Tengo algunas unidades de samba a las que acceden varios usuarios a diario. Ya tengo código para reconocer unidades compartidas (de una tabla SQL) y montarlas en un directorio especial donde todos los usuarios puedan acceder a ellas.
Quiero saber, si elimino una unidad de disco de mi tabla SQL (efectivamente desconectada) ¿cómo, o incluso, hay una manera de desmontar un dispositivo ocupado? Hasta ahora he descubierto que cualquier forma de umount
no funciona.
Ignorando la posibilidad de destruir datos, ¿es posible desmontar un dispositivo que se está leyendo actualmente?
cd
montaste el directorio, luego te convertiste en root o iniciaste sesión nuevamente y luego el otro shell está atrapado. Hacerexit
en todas las conchas.Respuestas:
¡¡SI!! Hay una manera de desconectar un dispositivo ocupado de inmediato (incluso si está ocupado y no se puede desmontar con fuerza). Puede limpiar todo más tarde:
NOTA:
fuente
-l
aquí hay una minúsculaL
(para "desmontaje diferido"). (Vea esta respuesta relacionada .)-l
/--lazy
no corromperá los archivos abiertos, pero en Linux parece que no puede saber cuándo el dispositivo está realmente desmontado y se puede quitarSi es posible, ubiquemos / identifiquemos el proceso ocupado, eliminemos el proceso y luego desmontemos el recurso compartido de samba para minimizar el daño.
lsof | grep '<mountpoint of /dev/sda1>'
(o cualquiera que sea el dispositivo montado)pkill target_process
(mata el proceso ocupado por nombre |kill PID
|killall target_process
)umount /dev/sda1
(o cualquiera que sea el dispositivo montado)fuente
lsof
:# opkg install lsof
Asegúrese de no estar todavía en el dispositivo montado cuando intente desmontar.
fuente
umount
.Intente lo siguiente, pero antes de ejecutarlo, tenga en cuenta que la
-k
bandera matará cualquier proceso en ejecución manteniendo el dispositivo ocupado.La
-i
bandera hacefuser
preguntar antes de matar.fuente
lsof | grep '/dev/<my-device>
no devolvió nada, ¡pero esto funciona muy bien! Es posible que también desee sugerirfuser -m /dev/<my-device>
en caso de que desee conocer el proceso antes de matarlo.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: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: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 :
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, perofuser
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 usarlofuser
, necesitaría:mount -o bind /media/hdd /mnt
otra ubicaciónAsí es cómo:
Entonces tendrías:
fuser
.Esto es más complicado [1] , pero le permite usar:
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: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 un000
directorio de modo en la parte superior).O usar:
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 requieremount --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.fuente
--lazy
es tan peligroso, ¿por qué no hay una advertencia en laumount
página del manual? Todo lo que dice es " Desmontaje diferido. Separe el sistema de archivos de la jerarquía de archivos ahora, y limpie todas las referencias a este sistema de archivos tan pronto como ya no esté ocupado "Verifique los sistemas de archivos NFS exportados con exportfs -v. Si se encuentra, elimine con exportfs -d share: / directorio. Estos no aparecen en la lista de fusor / lsof y pueden evitar que umount tenga éxito.
fuente
Echa un vistazo a
umount2
:fuente
Alguien ha mencionado que si está utilizando la terminal y su directorio actual está dentro de la ruta que desea desmontar, obtendrá el error.
Como complemento, en este caso,
lsof | grep path-to-be-unmounted
debe tener el siguiente resultado:fuente
Otra alternativa cuando algo funciona es editar
/etc/fstab
, agregarnoauto
marcas y reiniciar la máquina. El dispositivo no se montará, y cuando termine de hacer lo que sea, quite la bandera y reinicie nuevamente.fuente
Respuesta de nicho:
Si tiene un grupo zfs en ese dispositivo, al menos cuando se trata de un grupo basado en archivos,
lsof
no mostrará el uso. Pero puedes simplemente correry luego desmontar.
fuente