Cuando corro umount /pathme sale:
umount: /path: device is busy.
El sistema de archivos es enorme, por lsof +D /pathlo que no es una opción realista.
lsof /path, lsof +f -- /pathy fuser /pathtodos no devuelven nada. fuser -v /pathda:
USER PID ACCESS COMMAND
/path: root kernel mount /path
que es normal para todos los sistemas de archivos montados no utilizados.
umount -ly umount -fno 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...--forceserá más difícil desmontarlo-vo-vvvincluso revelar más cuál es el problema con el montaje. Así que trate de:umount -vvv --force /babdmountRespuestas:
Parece que la causa de mi problema fue la
nfs-kernel-serverexportación del directorio. Elnfs-kernel-serverprobablemente va detrás de los archivos abiertos normales y, por lo tanto, no aparece en la lista porlsofyfuser.Cuando paré
nfs-kernel-serverpudeumountel 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 stopPrimero tuve que , ¡tu respuesta realmente ayudó!sudo service nfs stopy es posible que (no) también deba hacerlosudo exportfs -upara no exportar. Recuerde entoncessudo exportfs -rysudo service nfs startvolver a exportar y reiniciar el servicio.exportfs -uel 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>,mountycat /proc/mountsverifiqué 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 delosetupy 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 /pathmira 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 /pathno produjo nada, mientraslsof | grep /pathque 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,
lsofyfuserno lo encontraría.Si sospecha que le queda algo corriendo en un chroot,
sudo ls -l /proc/*/root | grep chrootencontrará al culpable (reemplace "chroot" con el camino al chroot).fuente
sudo ls -l /proc/*/status | grep HOSTdonde HOST es el nombre de host de la cárcellsof /mountpointyfuser /mountpointambos 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.fuserTambién se puede utilizar, pero en mi opiniónlsoftiene una salida más útil. Sin embargo,fuseres ú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
umountcausarle 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:
openconO_TMPFILE)Estos son el tipo de pokemon más difícil de alcanzar, y aparecen en
lsoflaTYPEcolumna comoa_inode(que no está documentada en lalsofpá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 /pathproporciona la misma lista de PID quefuser -m /path.fuser -M /pathcomprobará si/pathes 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,
mountsiguió dando elmount: / is busyerror. 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
DELen la salida. Simplemente reiniciar el proceso manteniendo el archivo eliminado resolvió el problema.fuente
lsofyfusertampoco 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/postfixa/disk2/pers/mail/postfix/varspoolpara 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
postfixydovecot(tantops auxcomonetstat -tuanpno mostraron nada relacionado) no pudeunmount /disk2/pers.Cuando quité el enlace simbólico y actualizó el
postfixydovecotarchivos de configuración para que apunte directamente a los nuevos directorios en/disk2/pers/que fue capaz de detener con éxito los servicios yunmountel 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
bindyoverlayse 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 4En 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