Comment supprimer des fichiers .fuse_hidden *?

34

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.

Lando
la source
3
Le démon Fuse semble être actif. Arrêtez-le avant de supprimer le fichier.
ott--
J'ai changé de commentaire entre-temps.
ott--
C’était ma première pensée, mais je n’ai pas trouvé de service Fuse à arrêter, j’ai redémarré Samba à la place, le problème est résolu, le fichier a disparu. Merci.
Lando
rm dir-name -rf?
Hauke ​​Laging

Réponses:

52

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.

  • Connectez-vous au système sur lequel le fichier réside physiquement. (pas de montage réseau)
  • Exécutez lsof dir-name/.fuse_hidden000bd8c100000185pour savoir quels processus maintiennent le descripteur de fichier ouvert.
  • Mettez fin à ces processus s'il est logique de le faire, ou déterminez les étapes que vous pouvez effectuer pour libérer "en douceur" le descripteur de fichier ouvert sans mettre fin au processus.

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.

Andrew B
la source
J'ai deviné que cela avait à voir avec un service qui utilisait encore le fichier (dans ce cas, Samba), j'avais oublié lsof.
Lando
Conduis-moi au problème. lsofm'a aidé à identifier le processus en cours de lecture du fichier et j'étais alors en mesure de tout supprimer!
ThanksForAllTheFish
J'ai le problème, cela lsofet fuserne soulève aucun processus pour ce dossier, aucune suggestion?
mxmlnkn
0

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 .Trashesrépertoire pour pouvoir supprimer le .fuser_hiddenfichier.

J'espère que cela t'aides!

RobertC
la source