Quando io faccio
sudo umount /media/KINGSTON
ho ottenuto
umount: /media/KINGSTON: device is busy.
Chiudo tutte le finestre e mi assicuro che tutte le shell puntino ad altre directory. Come posso sapere quale processo impedisce l'umount?
Quando io faccio
sudo umount /media/KINGSTON
ho ottenuto
umount: /media/KINGSTON: device is busy.
Chiudo tutte le finestre e mi assicuro che tutte le shell puntino ad altre directory. Come posso sapere quale processo impedisce l'umount?
Risposte:
aprire un terminale:
fuser -c /media/KINGSTON
Produrrà qualcosa del genere:
/media/KINGSTON/: 3106c 11086
Questo ti darà il pid dei processi usando questo volume. Il personaggio extra alla fine del pid fornirà alcune informazioni extra. (c in 3106c)
c - il processo utilizza il file come directory di lavoro corrente
m - il file è mappato con mmap
o - il processo lo utilizza come file aperto
r - il file è la directory principale del processo
t - il processo accede al file come file di testo
y: questo file è il terminale di controllo per il processo
Quindi per smontare basta uccidere quei pids e riprovare a smontare
sudo kill -9 3106 11086
sudo umount /media/KINGSTON
Nota: per trovare il nome esatto dell'applicazione di questi pid è possibile utilizzare questo comando
cat /proc/<pid>/cmdline
Per esempio : cat /proc/11086/cmdline
questo produrrà qualcosa di simile al di sotto.
evince^@/media/KINGSTON/Ubuntu-guide.pdf^@
Spero che questo possa aiutare
ps <pid>
invece di modificare i file in / proc per vedere il nome del comando e gli argomenti.
Lo strumento più utile è lsof . Mostra quali file sono utilizzati da quali processi. Se /media/KINGSTON
è un punto di montaggio (anche il nome del dispositivo funzionerebbe), il comando seguente mostra tutti i file in uso su questo punto di montaggio:
lsof /media/KINGSTON
Se esegui questo comando come un normale utente, mostrerà solo i tuoi processi¹. Esegui sudo lsof /media/KINGSTON
per vedere tutti i processi degli utenti.
L'output lsof
è simile al seguente:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zsh4 31421 gilles cwd DIR 8,1 4096 130498 /var/tmp
zsh4 31421 gilles txt REG 8,1 550804 821292 /bin/zsh4
zsh4 31421 gilles mem REG 8,1 55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4 31421 gilles 12r REG 8,1 175224 822276 /usr/share/zsh/functions/Completion.zwc
La COMMAND
colonna mostra il nome dell'eseguibile del programma e la PID
colonna mostra l'ID del processo. La NAME
colonna mostra il nome del file; potresti vedere (deleted)
se il file è stato eliminato mentre era aperto (quando un file viene eliminato, non ha più un nome, ma esiste ancora fino a quando l'ultimo processo che lo utilizza non chiude il file). USER
dovrebbe essere autoesplicativo. Le altre colonne non contano qui tranne forse FD
, che mostra come il file viene utilizzato dal processo:
cwd
: directory di lavoro correntetxt
: il programma eseguibile²mem
: un file mappato in memoria (qui, pensalo come un file aperto)r
per la lettura e w
per la scritturaNon esiste un modo meccanico per individuare la finestra in cui è aperto un file (ciò non è tecnicamente significativo: se un processo ha più finestre, un file non è particolarmente associato a una finestra o all'altra), né a un semplice modo di identificare la finestra di un processo (e ovviamente un processo non deve avere finestre). Ma di solito il nome del comando e il nome del file sono sufficienti per individuare l'autore del reato e chiudere correttamente il file.
Se non riesci a chiudere il file e vuoi solo terminarlo, puoi terminare il processo con kill 31421
(dove si 31421
trova l'ID del processo) o kill -HUP 31421
("riaggancia"). Se uccisione pianura non fa il trucco, uccidere con estremo pregiudizio: kill -KILL 31421
.
C'è una GUI per lsof, glsof , ma non è ancora del tutto pronta per la prima serata, e finora non è stata creata per Ubuntu.
¹
Lsof può elencare alcune informazioni sui processi di altri utenti, ma non rileva il punto di montaggio, quindi non li elencherà se si specifica un punto di montaggio.
² Il
codice eseguibile viene spesso chiamato testo nelle discussioni sui formati eseguibili.
Anche questo può aiutare:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
Nel frattempo il comando del fusore è molto migliorato. Puoi fare l'intero lavoro con un singolo comando:
$ sudo fuser -ickv /"mountpoint"
Dove:
k
uccide il processo offensivo,v
mostra in anticipo il processo e il suo utentei
ti chiede conferma. Se qualche processo resiste, riprovare con fuser -ickv -9
(o più in generale con -SIGNAL
) che uccide quelli più ostinati.
Ma troverai sempre un processo "immortale" ...!
In questi casi ultimamente ho imparato a usare
$ sudo umount --lazy --force <mountpoint>
come ultima risorsa, che finora ha funzionato per me ogni volta.
vboxmanage
. -_-