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.
rm dir-name -rf
?Respuestas:
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.
lsof dir-name/.fuse_hidden000bd8c100000185
para averiguar qué procesos mantienen abierto el identificador de archivo.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.
fuente
lsof
¡Me ayudó a identificar qué proceso todavía estaba leyendo el archivo y por entonces pude eliminar todo!lsof
yfuser
no menciono ningún proceso para ese archivo, ¿alguna sugerencia?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
.Trashes
directorio y pude eliminar el.fuser_hidden
archivo.¡Espero que esto ayude!
fuente