umount: el dispositivo está ocupado

14

A veces, cuando quiero desmontar un dispositivo, p. Ej.

sudo umount /dev/loop0

Recibiré el mensaje

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Por lo general, resuelvo este problema cerrando una ventana de consola (en mi caso xfce4-terminal) y luego umount.

¿Qué significa este problema? ¿Hay alguna solución más inteligente?

xralf
fuente
2
Eso sucede, por ejemplo, si todavía está en un shell en ese directorio donde está montado el dispositivo.
klapaucius
No recuerdo si estuve allí, pero lo intenté y tienes razón, esto sucedió.
xralf

Respuestas:

14

Significa que algún proceso tiene un directorio de trabajo o un identificador de archivo abierto debajo del punto de montaje. Lo mejor que puede hacer es finalizar el proceso ofensivo, cambiar su directorio de trabajo o cerrar el identificador de archivo antes de desmontarlo.

Sin embargo, hay una alternativa en Linux. Usando umount -lllamadas un "perezoso" desmontar. El sistema de archivos aún estará montado, pero no podrá verlo ni usarlo, excepto en los procesos que ya lo están usando. Cuando el programa infractor sale (por cualquier medio), el sistema "terminará" desmontando el sistema de archivos.

bahamat
fuente
2
¿Hay alguna manera de averiguar qué proceso tiene el identificador de archivo abierto y debe finalizar?
xralf
44
Usar lsofes probablemente la mejor manera.
bahamat
1
por ejemplo lsof | grep loop0?
xralf
No, grep para el punto de montaje. Debería enumerar todos los archivos debajo. No creo que muestre cosas que simplemente tengan un directorio de trabajo debajo del punto de montaje, por lo que no es un método perfecto.
bahamat
7

También puede usar fuserpara eliminar todos los procesos que utilizan el sistema de archivos montado.

fuser -cuk /mnt

Opciones:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

Compruébelo usted mismo en explicahell .

sys0dm1n
fuente
3

Dada su "solución habitual", significa que el shell que está ejecutando en la ventana de su consola tiene un directorio en un sistema de archivos en ese dispositivo como su directorio de trabajo actual.

Linux, y Unixes en general, desean mantener un sistema de archivos montado si un proceso tiene un directorio de trabajo actual en ese sistema de archivos.

Simplemente puede usar cden la ventana de la consola para salir de un directorio dentro o debajo en /mntlugar de matar la ventana de la consola y el shell que se ejecuta dentro de ella.

Bruce Ediger
fuente
0

Descubrí una situación que puede interferir con el desmontaje de un dispositivo que compartiré como respuesta a pesar de que esta pregunta es muy antigua.

Si tiene recursos compartidos NFS alojados en la máquina, y cualquiera de esos recursos compartidos NFS está respaldado por el dispositivo que está intentando desmontar, deberá dejar de compartirlos (lo mejor es detener el servicio NFS, por ejemplo, sudo service nfs-kernel-server stopen versiones recientes de Ubuntu ) Es posible que el servidor NFS no aparezca en lsof o fusor, lo que puede dificultar la identificación del problema.

Wug
fuente