Evitar umount -l
Al momento de escribir, la respuesta mejor votada recomienda usar umount -l
.
umount -l
es peligroso o, en el mejor de los casos, inseguro . En resumen:
- En realidad, no desmonta el dispositivo, solo elimina el sistema de archivos del espacio de nombres. Las escrituras para abrir archivos pueden continuar.
- Puede causar la corrupción del sistema de archivos btrfs
Trabajar alrededor / alternativa
El comportamiento útil de umount -l
es ocultar el sistema de archivos del acceso por rutas de acceso absolutas , minimizando así el uso adicional de moutpoint.
Este mismo comportamiento se puede lograr montando un directorio vacío con permisos 000
sobre el directorio que se va a desmontar.
Entonces, cualquier acceso nuevo a los nombres de archivo en el punto de montaje debajo del punto de montaje golpeará el directorio recién superpuesto con cero permisos; por lo tanto, se evitan nuevos bloqueadores para el desmontaje.
Primero intenta remount,ro
El mayor logro de desmontaje para desbloquear es el remontaje de solo lectura. Cuando obtienes la remount,ro
insignia, sabes que:
- Todos los datos pendientes se han escrito en el disco.
- Todos los intentos futuros de escritura fallarán
- Los datos están en un estado coherente, en caso de que necesite desconectar físicamente el dispositivo.
mount -o remount,ro /dev/device
está garantizado que fallará si hay archivos abiertos para escribir , así que intente eso directamente. ¡Puede que te sientas afortunado, punk!
Si no tiene suerte, concéntrese solo en los procesos con archivos abiertos para escribir :
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
Debería poder volver a montar el dispositivo de solo lectura y garantizar un estado coherente.
Si no puede volver a montar solo lectura en este momento, investigue algunas de las otras posibles causas enumeradas aquí .
Logro de remontaje de solo lectura desbloqueado 🔓☑
Felicitaciones, sus datos en el punto de montaje ahora son consistentes y están protegidos de futuras escrituras.
¿Por qué fuser
es inferior alsof
¿Por qué no usar el uso fuser
antes? Bueno, podría haberlo hecho, pero fuser
opera en un directorio , no en un dispositivo , por lo que si desea eliminar el punto de montaje del espacio de nombre de archivo y aún usarlo fuser
, necesitaría:
- Duplique temporalmente el punto de montaje con
mount -o bind /media/hdd /mnt
otra ubicación
- Oculta el punto de montaje original y bloquea el espacio de nombres:
Así es cómo:
null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"
# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked. https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"
# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"
# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"
Entonces tendrías:
- El espacio de nombres original está oculto (no se pueden abrir más archivos, el problema no puede empeorar)
- Un directorio montado de enlace duplicado (a diferencia de un dispositivo) en el que ejecutar
fuser
.
Esto es más complicado [1] , pero le permite usar:
fuser -vmMkiw <mountpoint>
que solicitará interactivamente matar los procesos con archivos abiertos para escritura. Por supuesto, puede hacer esto sin ocultar el punto de montaje, pero lo anterior imita umount -l
, sin ninguno de los peligros.
El -w
interruptor se restringe a los procesos de escritura, y -i
es interactivo, por lo que después de un montaje de solo lectura, si tiene prisa, puede usar:
fuser -vmMk <mountpoint>
para eliminar todos los procesos restantes con archivos abiertos debajo del punto de montaje.
Con suerte, en este punto, puede desmontar el dispositivo. (Deberá ejecutar umount
el punto de montaje dos veces si ha montado un 000
directorio de modo en la parte superior).
O usar:
fuser -vmMki <mountpoint>
para eliminar interactivamente los procesos de solo lectura restantes que bloquean el desmontaje.
Maldita sea, todavía me sale target is busy
!
Los archivos abiertos no son el único bloqueador desmontado. Vea aquí y aquí otras causas y sus remedios.
Incluso si tiene un gremlin al acecho que le impide desmontar completamente el dispositivo, al menos tiene su sistema de archivos en un estado coherente.
Luego puede usar lsof +f -- /dev/device
para enumerar todos los procesos con archivos abiertos en el dispositivo que contiene el sistema de archivos y luego eliminarlos.
[1] Es menos complicado de usar mount --move
, pero eso requiere mount --make-private /parent-mount-point
que tenga implicaciones . Básicamente, si el punto de montaje está montado bajo el /
sistema de archivos, querrás evitar esto.