Cuando corro umount /path
me sale:
umount: /path: device is busy.
El sistema de archivos es enorme, por lsof +D /path
lo que no es una opción realista.
lsof /path
, lsof +f -- /path
y fuser /path
todos no devuelven nada. fuser -v /path
da:
USER PID ACCESS COMMAND
/path: root kernel mount /path
que es normal para todos los sistemas de archivos montados no utilizados.
umount -l
y umount -f
no es lo suficientemente bueno para mi situación.
¿Cómo puedo averiguar por qué el núcleo piensa que este sistema de archivos está ocupado?
fuser -vm /path
...--force
será más difícil desmontarlo-v
o-vvv
incluso revelar más cuál es el problema con el montaje. Así que trate de:umount -vvv --force /babdmount
Respuestas:
Parece que la causa de mi problema fue la
nfs-kernel-server
exportación del directorio. Elnfs-kernel-server
probablemente va detrás de los archivos abiertos normales y, por lo tanto, no aparece en la lista porlsof
yfuser
.Cuando paré
nfs-kernel-server
pudeumount
el directorio.He hecho una página con ejemplos de todas las soluciones hasta ahora aquí: http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html
fuente
sudo service samba stop
Primero tuve que , ¡tu respuesta realmente ayudó!sudo service nfs stop
y es posible que (no) también deba hacerlosudo exportfs -u
para no exportar. Recuerde entoncessudo exportfs -r
ysudo service nfs start
volver a exportar y reiniciar el servicio.exportfs -u
el directorio en cuestión.Para añadir a BruceCran 's comentario anterior, el motivo de mi manifestación de este problema ahora era un rancio montaje de bucle de retorno. Ya verifiqué la salida de
fuser -vm <mountpoint>
/lsof +D <mountpoint>
,mount
ycat /proc/mounts
verifiqué si se estaba ejecutando algún antiguo servidor nfs-kernel-server, apagué las cuotas, intenté (pero fallé) ayumount -f <mountpoint>
todos pero me resigné a abandonar el tiempo de actividad de 924 días antes de finalmente verificar la salida delosetup
y la búsqueda de dos bucles-no-montados configurado, pero rancio:entonces
Una publicación en el foro de Gentoo también enumera los archivos de intercambio como un posible culpable; Aunque el intercambio de archivos es probablemente bastante raro en estos días, no está de más comprobar la salida de
cat /proc/swaps
. No estoy seguro de si las cuotas podrían evitar un desmontaje: estaba agarrando pajitas.fuente
En lugar de usar lsof para rastrear el sistema de archivos, simplemente use la lista total de archivos abiertos y agréguelo. Creo que este rendimiento debe ser más rápido, aunque es menos preciso. Debería hacer el trabajo.
fuente
lsof /path
, dijelsof | grep '/path'
. La diferencia es que lsof sin argumentos muestra todos los archivos abiertos utilizando algún tipo de tabla de caché, y grep es muy rápido para buscarlo. Las cosas que probó con lsof hacen que escanee a través del sistema de archivos, lo que lleva mucho tiempo.lsof /path
mira el camino. No se ve en todos los archivos. A menudo es mucho más rápido quelsof | grep /path
(en mi prueba no científica fue YMMV 20 veces más rápido) ya que no mira todos los archivos abiertos, sino solo los archivos de esa ruta.lsof /path
no produjo nada, mientraslsof | grep /path
que me mostró el proceso que contenía archivos abiertos y me impedía desmontar el volumen.Para mí, el proceso ofensivo fue un demonio corriendo en un chroot. Porque estaba en un chroot,
lsof
yfuser
no lo encontraría.Si sospecha que le queda algo corriendo en un chroot,
sudo ls -l /proc/*/root | grep chroot
encontrará al culpable (reemplace "chroot" con el camino al chroot).fuente
sudo ls -l /proc/*/status | grep HOST
donde HOST es el nombre de host de la cárcellsof /mountpoint
yfuser /mountpoint
ambos encontramos un proceso, incluso si está chrooteado.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, verifique también 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) .
fuente
Para que el fusor informe sobre los PID que sostienen una montura abierta, debe usar -m
fuente
lsof /path
proporciona la misma lista de PID quefuser -m /path
.fuser -M /path
comprobará si/path
es un punto de montaje.Tenemos un sistema propietario donde el sistema de archivos raíz es normalmente de solo lectura. Ocasionalmente, cuando los archivos tienen que copiarse, se vuelve a montar lectura-escritura:
Y luego volver a montar:
Esta vez, sin embargo,
mount
siguió dando elmount: / is busy
error. Fue causado por un proceso que contenía un descriptor abierto a un archivo que había sido reemplazado por algún comando, que se ejecutó cuando el sistema de archivos era de lectura y escritura. La línea importante de lalsof -- /
salida es (se han cambiado los nombres):Observe el
DEL
en la salida. Simplemente reiniciar el proceso manteniendo el archivo eliminado resolvió el problema.fuente
lsof
yfuser
tampoco me dio nada.Después de un proceso de renombrar todos los directorios posibles a .old y reiniciar el sistema cada vez que hice cambios, encontré un directorio particular (relacionado con postfix) que era responsable.
Resultó que una vez hice un enlace simbólico de
/var/spool/postfix
a/disk2/pers/mail/postfix/varspool
para minimizar las escrituras en disco en un sistema de archivos raíz basado en SDCARD (Sheeva Plug).Con este enlace simbólico, incluso después de detener los servicios
postfix
ydovecot
(tantops aux
comonetstat -tuanp
no mostraron nada relacionado) no pudeunmount /disk2/pers
.Cuando quité el enlace simbólico y actualizó el
postfix
ydovecot
archivos de configuración para que apunte directamente a los nuevos directorios en/disk2/pers/
que fue capaz de detener con éxito los servicios yunmount
el directorio.La próxima vez miraré más de cerca el resultado de:
El comando anterior enumerará recursivamente todos los enlaces simbólicos en un árbol de directorios (aquí comenzando en
/var
) y filtrará los nombres que apuntan a un punto de montaje de destino específico (aquí disco2).fuente
Tuve este problema y resultó que había sesiones de pantalla activas en segundo plano que no conocía. Me conecté a la otra sesión de pantalla activa y su shell ni siquiera estaba actualmente en el directorio montado. Matar esas otras sesiones de shell solucionó el problema para mí.
Solo pensé en compartir mi resolución.
fuente
Hoy el problema era un zócalo abierto (específicamente
tmux
):fuente
Tengo un par de
bind
yoverlay
se monta bajo mi montura que me estaban bloqueando, comprobar el tabulador para el punto de montaje que desea desmontar. Sospecho que fue la montura superpuesta en particular, pero también podría haber sido la uniónfuente
Esta es más una solución que una respuesta, pero la estoy publicando en caso de que pueda ayudar a alguien.
En mi caso, estaba tratando de modificar el LVM porque quería agrandar la partición / var, así que necesitaba desmontarlo. Probé todos los comentarios y respondí en esta publicación (gracias a todos y especialmente a @ ole-tange por reunirlos) y aún recibí el error "dispositivo está ocupado".
Traté de eliminar la mayoría de los procesos en el orden especificado en el nivel de ejecución 0 también, solo en caso de que el orden fuera relevante en mi caso, pero eso tampoco ayudó. Entonces, lo que hice fue crearme un nivel de ejecución personalizado (combinando la salida de chkconfig en nuevos comandos chkconfig --level) que sería muy similar a 1 (modo de usuario único) pero con capacidades de red (con red ssh y xinet).
Como estaba usando redhat, el nivel de ejecución 4 está marcado como "no utilizado / definido por el usuario", así que usé ese y ejecuté
init 4
En mi caso, esto estaba bien, ya que necesitaba reiniciar el servidor en cualquier caso, pero probablemente ese será el caso de cualquiera que haya modificado los discos.fuente