Cómo forzar realmente el desmontaje de un sistema de archivos (sin una investigación manual, ¿por qué está ocupado?)

13

¿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 -llo 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 luksResumesi 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 | grepy no de trabajo obsoletos "parche badfs".

Vi.
fuente

Respuestas:

3

Use el combo de teclas Magic SysRq : Alt+ SysRq+u

Tenga en cuenta que probablemente debería hacer una sincronización de emergencia primero: Alt+ SysRq+s

También tenga en cuenta que en algunos teclados (especialmente los más nuevos), debe usar en PrtSclugar deSysRq

sml
fuente
La tecla Mayús no es necesaria, solo Alt + SysRq + tecla. Otra cosa que vale la pena mencionar (especialmente para usuarios de computadoras portátiles) es que puede presionar Alt, presionar y soltar SysRq, luego presionar y soltar la letra / dígito y finalmente soltar Alt. Lo más importante es que esto vuelve a montar todos los sistemas de archivos como de solo lectura, por lo que es una última opción antes de reiniciar por la fuerza, no una forma general de volver a montar los sistemas de archivos de solo lectura.
Gilles 'SO- deja de ser malvado'
@Gilles: gracias por el consejo sobre la tecla shift. He corregido mis instrucciones.
sml
1. Solo se remonta a solo lectura. No es que se quiera. Por ejemplo, quiero desmontarlo y volver a montarlo usando FUSE. 2. Lo malo es que necesito "-o remontar, sistema de archivos raíz rw" y otros después de eso para volver al trabajo normal.
Vi.
3

umount --forceo umount -f(equivalente)

Si eso falla, entonces use:

umount --lazyo umount --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.

Freedom_Ben
fuente
Por supuesto --forceque no funciona. Y --lazyno es realmente desmontable: no libera cosas LVM, loopback o cryptsetup.
Vi.
1
umount -f

se puede usar para forzar un desmontaje cuando el sistema de archivos está ocupado.

como la lima
fuente
1
Nunca me ha funcionado: umount2: Device or resource busyel único éxito parcial fue cuando experimenté con el parche badfs.
Vi.
Recibí el mismo mensaje de "error", pero no obstante funcionó. El sistema de archivos se desmontó después del montaje -f
IanH
3
Prueba "lazy umount", umount -l. Siempre se monta pero podría producir un sistema de archivos inestable.
Jimmy Hedman el
Creo que el comentario de Jimmy sobre esta respuesta es en realidad la mejor opción. Es cierto que un desmontaje "perezoso" puede causar inestabilidad, pero se supone que ya está en un estado inestable si necesita desmontar a la fuerza el sistema de archivos. Con este fin, ¿por qué '-l' no es una opción?
deesto
@deesto, Lazy Unmount no hace que el dispositivo de bloque subyacente (volumen LVM, contenedor LUKS, loopback) no tenga referencia.
Vi.
1

Me temo que no hay forma de hacer esto con un solo comando. umount -frealmente 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. :)

Janne Pikkarainen
fuente
1
Estos son casos en los que no puedo desmontar ni siquiera manualmente: 1. procesos de suspensión ininterrumpida que no se pueden reanudar (controladores bloqueados, etc.) 2. Almacenamiento fallido (que también bloquea cada solicitud). Quiero que este "desmontaje sucio" se encargue de esto.
Vi.