umount: il dispositivo è occupato


14

A volte quando voglio smontare un dispositivo, ad es

sudo umount /dev/loop0

Riceverò il messaggio

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Di solito risolvo questo problema chiudendo una finestra della console (nel mio caso xfce4-terminal) e quindi umount.

Cosa significa questo problema? C'è qualche soluzione più intelligente?


2
Ciò accade ad esempio se si è ancora in una shell in quella directory in cui è montato il dispositivo.
klapaucius,

Non ricordo se ero lì ma l'ho provato e hai ragione, è successo.
Xralf,

Risposte:


14

Significa che alcuni processi hanno una directory di lavoro o un handle di file aperto sotto il punto di montaggio. La cosa migliore da fare è terminare il processo offensivo, cambiare la sua directory di lavoro o chiudere l'handle del file prima di smontare.

C'è un'alternativa su Linux però. L'utilizzo di umount -lchiama un smontaggio "pigro". Il filesystem sarà comunque montato ma non sarai in grado di vederlo o usarlo, ad eccezione dei processi che lo stanno già utilizzando. Quando il programma incriminato esce (con qualunque mezzo) il sistema "finirà" smontando il filesystem.


2
C'è un modo per scoprire quale processo ha l'handle di file aperto e dovrebbe essere terminato?
Xralf,

4
L'uso lsofè probabilmente il modo migliore.
bahamat,

1
ad es lsof | grep loop0.
Xralf,

No, grep per il mount point. Dovrebbe elencare tutti i file sottostanti. Non penso che mostrerà cose che hanno semplicemente una directory di lavoro sotto il mount point, quindi non è un metodo perfetto.
bahamat,

7

Puoi anche usare fuserper terminare tutti i processi usando il file system montato.

fuser -cuk /mnt

Opzioni:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

Verifica tu stesso su spiega Shell .


3

Data la tua "solita soluzione", significa che la shell che hai in esecuzione nella finestra della tua console ha una directory in un file system su quel dispositivo come directory di lavoro corrente.

Linux e Unix in generale, vogliono molto male mantenere un file system montato se un processo ha una directory di lavoro corrente in quel file system.

Si può semplicemente usare cdnella finestra della console per uscire da una directory dentro o sotto /mntpiuttosto che uccidere la finestra della console e la shell in esecuzione al suo interno.


0

Ho scoperto una situazione che può interferire con lo smontaggio di un dispositivo che condividerò come risposta anche se questa domanda è molto vecchia.

Se sul computer sono ospitate condivisioni NFS e una di quelle condivisioni NFS è supportata dal dispositivo che si sta tentando di smontare, è necessario interrompere la condivisione (meglio interrompere il servizio NFS, ad esempio sudo service nfs-kernel-server stopsu versioni recenti di Ubuntu ). Il server NFS potrebbe non comparire in lsof o fuser, il che può rendere difficile l'identificazione del problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.