J'ai un petit serveur Linux (Debian Squeeze) qui exécute un serveur Samba configuré pour partager des dossiers avec certaines machines Windows. En essayant de supprimer l'un des répertoires de Windows, j'ai reçu l'erreur "Impossible de supprimer le dossier".
J'ai essayé de supprimer le répertoire de la console Linux. J'ai eu une erreur similaire:
# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty
J'ai énuméré le contenu du répertoire et trouvé un fichier nommé .fuse_hidden suivi d'un nombre hexadécimal (000¹).
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185
J'ai essayé de supprimer le fichier .fuse_hidden, mais un nouveau fichier a été créé instantanément (notez le changement de numéro hexadécimal).
# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186
J'ai également essayé d'utiliser Midnight Commander pour supprimer le fichier sans succès.
Les autres solutions que j'ai trouvées jusqu'à présent impliquent l'interface graphique et je n'ai que la console.
Toutes les suggestions sont appréciées.
rm dir-name -rf
?Réponses:
Ceci est similaire à ce qui se produit lorsque vous supprimez un fichier ouvert par un autre système sur un montage NFS. Le problème est que le fichier a été supprimé du système de fichiers alors que son "nombre de liens" était> 1, ce qui signifie que d'autres processus le maintiennent toujours ouvert.
lsof dir-name/.fuse_hidden000bd8c100000185
pour savoir quels processus maintiennent le descripteur de fichier ouvert.Normalement, lorsque vous supprimez un fichier sur votre système de fichiers local ouvert par un autre processus, le système d'exploitation se conforme à votre demande et le supprime de l'arborescence de répertoires, mais l'inode vers lequel pointe l'arborescence est toujours considéré comme utilisé par le système d'exploitation. Chaque fois qu'un fichier est ouvert, son "nombre de liens" s'incrémente d'une unité et l'espace n'est réellement libéré que lorsque le nombre de liens atteint zéro.
Lorsque vous rencontrez un problème de cette nature, cela signifie que le système d’exploitation a, pour une raison quelconque, décidé de ne pas supprimer ce fichier de l’arborescence de répertoires: généralement, parce qu’il a des raisons de croire qu'il doit toujours être accessible par des éléments inaccessibles. utilisez le numéro d'inode direct. Cela peut sembler initialement conforme, mais en coulisse, le système d’exploitation le renomme pour lui donner un préfixe caché afin qu’il soit toujours accessible avec une forme quelconque d’adressage du chemin du système de fichiers. L'espace sera toujours libéré lorsque le nombre de liens atteindra zéro, mais cet objet restera dans le répertoire jusqu'à ce que les liens disparaissent.
la source
lsof
m'a aidé à identifier le processus en cours de lecture du fichier et j'étais alors en mesure de tout supprimer!lsof
etfuser
ne soulève aucun processus pour ce dossier, aucune suggestion?Merci pour les suggestions, mais rien n'a fonctionné pour moi. Mais j'ai trouvé une solution: j'ai déplacé le SSD externe vers un PC sous Windows. À l'aide de l'Explorateur de fichiers (avec l'option "Objets masqués" cochée), j'ai navigué jusqu'au
.Trashes
répertoire pour pouvoir supprimer le.fuser_hidden
fichier.J'espère que cela t'aides!
la source