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/KINGSTONper 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 COMMANDcolonna mostra il nome dell'eseguibile del programma e la PIDcolonna mostra l'ID del processo. La NAMEcolonna 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). USERdovrebbe 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)rper la lettura e wper 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 31421trova 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:
kuccide il processo offensivo,vmostra in anticipo il processo e il suo utenteiti 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. -_-