¿Cómo eliminar archivos .fuse_hidden *?

34

Tengo un pequeño servidor Linux (Debian Squeeze) que ejecuta un servidor Samba que está configurado para compartir algunas carpetas con algunas máquinas con Windows. Al intentar eliminar uno de los directorios de Windows recibí el error "No se puede eliminar la carpeta".

Intenté eliminar el directorio de la consola de Linux, recibí un error similar:

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty

Enumeré el contenido del directorio y encontré un archivo llamado .fuse_hidden seguido de un número hexadecimal (000ivalc100000185).

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185

Traté de eliminar el archivo .fuse_hidden, pero se creó un nuevo archivo al instante (tenga en cuenta el cambio del número hexadecimal).

# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186

También intenté usar Midnight Commander para eliminar el archivo sin éxito.

Otras soluciones que he encontrado hasta ahora involucran GUI y solo tengo consola.

Cualquier sugerencia es apreciada.

Lando
fuente
3
El demonio fusible parece estar activo. Deténgalo antes de eliminar el archivo.
ott--
He cambiado mi comentario mientras tanto.
ott--
Ese fue mi primer pensamiento, pero no pude encontrar un servicio de Fuse para detener, reinicié Samba en su lugar, el problema se resolvió, el archivo desapareció. Gracias.
Lando
rm dir-name -rf?
Hauke ​​Laging

Respuestas:

52

Esto es similar a lo que sucede cuando elimina un archivo que otro sistema ha abierto en un montaje NFS. El problema es que el archivo se ha eliminado del sistema de archivos mientras su "conteo de enlaces" era> 1, lo que significa que otros procesos aún lo mantienen abierto.

  • Inicie sesión en el sistema donde reside físicamente el archivo. (sin montaje en red)
  • Ejecute lsof dir-name/.fuse_hidden000bd8c100000185para averiguar qué procesos mantienen abierto el identificador de archivo.
  • Termine esos procesos si tiene sentido o descubra qué pasos puede realizar para liberar "con gracia" el identificador de archivo abierto sin terminar el proceso.

Normalmente, cuando elimina un archivo en su sistema de archivos local que otro proceso ha abierto, el sistema operativo cumple con su solicitud y lo elimina del árbol de directorios, pero el sistema operativo todavía considera que el inodo al que apunta el árbol está en uso. Cada vez que se abre un archivo, su "recuento de enlaces" aumenta en uno, y el espacio solo se libera realmente cuando ese recuento de enlaces llega a cero.

Cuando se encuentra con un problema de esta naturaleza, significa que el sistema operativo ha decidido, por cualquier motivo, no eliminar ese archivo del árbol de directorios: generalmente porque tiene motivos para creer que aún necesita ser accedido por cosas que no pueden utilizar el número de inodo directo. Inicialmente puede parecer que cumple, pero detrás de escena el sistema operativo lo renombra para que tenga un prefijo de punto oculto para que aún sea accesible con alguna forma de direccionamiento de ruta del sistema de archivos. El espacio aún se liberará cuando el recuento de enlaces llegue a cero, pero ese objeto permanecerá en el directorio hasta que desaparezcan los enlaces.

Andrew B
fuente
Supuse que tenía que ver con algún servicio que todavía usara el archivo (en este caso Samba), me había olvidado de lsof.
Lando
Guíame al problema. lsof¡Me ayudó a identificar qué proceso todavía estaba leyendo el archivo y por entonces pude eliminar todo!
ThanksForAllTheFish
Tengo el problema, eso lsofy fuserno menciono ningún proceso para ese archivo, ¿alguna sugerencia?
mxmlnkn
0

Gracias por las sugerencias, pero nada funcionó para mí. Pero encontré una solución: moví el SSD externo a una PC con Windows. Al usar el Explorador de archivos (con "Elementos ocultos" marcados), navegué hasta el .Trashesdirectorio y pude eliminar el .fuser_hiddenarchivo.

¡Espero que esto ayude!

RobertC
fuente