A veces, me gustaría desmontar un dispositivo USB con umount /run/media/theDrive
, pero recibo un drive is busy
error.
¿Cómo averiguo qué procesos o programas están accediendo al dispositivo?
process
open-files
unmounting
Stefan
fuente
fuente
Respuestas:
Úselo
lsof | grep /media/whatever
para averiguar qué está usando el soporte.Además, considere
umount -l
(uzyunt) para evitar que nuevos procesos usen la unidad mientras realiza la limpieza.fuente
fuser -mv /path/to/mountpoint
podría ser una alternativa más legible para descubrir procesos utilizando un punto de moint.lsof | grep
funciona mejor para mí.fuser -mv
parece volcar más de 80 procesos no relacionados. Estoy usando los directorios de Mount Binded.umount -l
es peligroso .mount -o bind
un000
directorio vacío de modo en la parte superior y limpiar a través delsof +f -- /dev/device
.La mayoría de las veces, el mejor comando a utilizar es lsof ( “ l i s t o pluma f iles”).
¿Dónde
/media/usb0
está el punto de montaje de la unidad USB u otro sistema de archivos para desmontar?+f --
le dice a lsof que trate el argumento posterior como un punto de montaje; por lo general, pero no siempre, se maneja solo, por lo quelsof /media/usb0
también funciona. Esto encuentra archivos abiertos (incluso los que no están vinculados), archivos mapeados en memoria, directorios actuales y algunos usos más oscuros. Deberá ejecutar el comando como root para obtener información sobre los procesos de otros usuarios (y creo que hay unices dondelsof
debe ejecutarse como root).Hay usos que lsof no encontrará; Estos son poco comunes en los medios extraíbles. Incluyen:
/foo
si/foo/bar
es un punto de montaje./foo
si/foo/bar
es un dispositivo de bloque montado o un archivo regular montado en bucle, o si es la fuente de un montaje de enlace de Linux.Otro comando que puede servir en caso de necesidad es el fusor, que solo enumera los PID de los procesos con archivos abiertos en el dispositivo:
fuente
Puedes usarlo
lsof
como dijo Peter, o si estás seguro de que solo quieres matar todas esas cosas y desmontarlo, probablemente puedas hacer algo como:fuente
-M
por seguridad.-M
debe aplicar.fuser
:-M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Abrir archivos
Los procesos con archivos abiertos son los culpables habituales. Mostrarlos:
Hay una ventaja en el uso en
/dev/<device>
lugar de/mountpoint
: un punto de montaje desaparecerá después de unumount -l
, o puede estar oculto por un montaje superpuesto.fuser
También se puede utilizar, pero en mi opiniónlsof
tiene una salida más útil. Sin embargo,fuser
es útil cuando se trata de matar los procesos que causan tus dramas para que puedas seguir con tu vida.Listar archivos en
<mountpoint>
(ver advertencia arriba):Elimine interactivamente solo procesos con archivos abiertos para escritura:
Después de volver a montar solo lectura (
mount -o remount,ro <mountpoint>
), es seguro (r) eliminar todos los procesos restantes:Puntos de montaje
El culpable puede ser el núcleo mismo. Otro sistema de archivos montado en el sistema de archivos que está intentando
umount
causarle dolor. Verifícalo con:Para montajes de bucle invertido ( gracias Stephen Kitt ), también verifique la salida de:
Inodos anónimos (Linux)
Los inodos anónimos pueden ser creados por:
open
conO_TMPFILE
)Estos son el tipo de pokemon más difícil de alcanzar, y aparecen en
lsof
laTYPE
columna comoa_inode
(que no está documentada en lalsof
página del manual ).No aparecerán
lsof +f -- /dev/<device>
, por lo que deberá:Para ver los procesos de eliminación de inodos anónimos, consulte: Lista de relojes inotify actuales (nombre de ruta, PID) .
inotify
relojes (Linux)Este comentario explica por qué
inotify
no debe impedir que un desmontaje, pero esta nota se describen las situaciones en las que voluntad :fuente
lsof
.Mountpoints
sección.Si usa GNOME, el desmontaje a través de Nautilus mostrará un mensaje que indica qué proceso todavía está usando la unidad y el archivo que está usando.
fuente
Para (al menos) OpenBSD:
Por ejemplo (usar
doas
para ejecutarfstat
como root ya que de lo contrario solo veríamos nuestros propios procesos):En este caso, no podría desmontar
/usr/ports
hasta que el usuario_pbuild
haya terminado de ejecutar esos dosmake
procesos.fuente
Este es un escollo común: debe recurrir a un usuario diferente (ya sea root o cualquier otro usuario), cambiar al directorio de un dispositivo montado y luego cerrar sesión como ese usuario. Cuando olvides que te fuiste en ese directorio, puedes intentar encontrarlo hasta que estés ciego.
lsof
muestra al shell qué directorio actual está usando ese dispositivo. Es posible que desee su como ese usuario nuevamente para cambiar su directorio.fuente