¿Cómo desmontar un sistema de archivos en Linux sin investigar por qué está ocupado?
Quiero hacerlo en un solo comando. Debería manejar aplicaciones usando ese sistema de archivos, submontes, contenedores ( lxc-execute -n qqq <command>
) y todas las demás cosas.
Solo "desmontar. ¡Sin objeciones!". Se permiten parches o configuraciones especiales del kernel.
El sistema de archivos debe estar realmente desmontado, por umount -l
lo que ciertamente no es una opción. Por ejemplo, para cryptsetup remove
(BTW, ¿cómo forzarlo cryptsetup remove
? Actualizar: cryptsetup luksSuspend
pero no podrá hacerlo cryptsetup luksResume
si no es LUKS).
¿Cómo invalidar todos los manejadores de archivos en ese sistema de archivos?
La única forma confiable que conozco es montando el sistema de archivos a través del FUSE (por lo general, no hay problema para desmontar el FUSE porque simplemente puedo matar su proceso).
PS ya saben montaje fuser
, lsof | grep
, cat /proc/*/mounts | grep
y no de trabajo obsoletos "parche badfs".
umount --force
oumount -f
(equivalente)Si eso falla, entonces use:
umount --lazy
oumount --l
(equivalente)La opción " perezosa " "separará el sistema de archivos de la jerarquía del sistema de archivos ahora y limpiará todas las referencias al sistema de archivos tan pronto como ya no esté ocupado (requiere el núcleo 2.4.11 o posterior)". Puede causar inestabilidad, pero Desmontará la cosa. Cualquier programa que use la unidad puede bloquearse.
fuente
--force
que no funciona. Y--lazy
no es realmente desmontable: no libera cosas LVM, loopback o cryptsetup.se puede usar para forzar un desmontaje cuando el sistema de archivos está ocupado.
fuente
umount2: Device or resource busy
el único éxito parcial fue cuando experimenté con el parche badfs.Me temo que no hay forma de hacer esto con un solo comando.
umount -f
realmente no funciona tan bien como cabría esperar. Si hay submontes debajo de alguna otra montura, no puedes simplemente desmontar esas monturas en un orden aleatorio y esperar que bajen.Pero no se preocupe, hay una manera de hacer que todo esto sea un comando único: cree un script de shell / Perl que mate los procesos deseados, desmonte contenedores, submontes y finalmente desmonte algún otro montaje. Entonces puede llamar a su script a pedido. Inicialmente, eso es más trabajo para usted, pero después de que funciona el guión, todo es un juego de niños. :)
fuente