il dispositivo sshfs è occupato


30

Ho montato un file system remoto usando sshfs (versione 2.8.4)

sshfs -o allow_root joeuser@example.com: ./example

ma smontando non riesce

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Qualche idea su cosa potrebbe causare questo errore e su come risolverlo?

Risposte:


14

Alcuni programmi utilizzano un file nel filesystem che stai tentando di smontare. Potrebbe essere un file aperto per la lettura o la scrittura, una directory corrente o qualche altro caso oscuro. Potrebbe anche essere dovuto al fatto che una directory sul filesystem è un punto di montaggio.

Per indagare, corri lsof +f -- example. Dirà quali processi stanno usando il filesystem. Esprimi il tuo giudizio sull'opportunità di chiudere i file, eliminarli o rinviare l'operazione di smontaggio.


Stranamente lsof non mostrava un processo gvfsd-archive, che era rimasto dopo aver aperto (e chiuso?) Un file di archivio da una GUI del file manager. Quindi, controlla anche ps aux | grep gvfsd-archive.
alexei,

Ha dato avvertimenti che lstat non può essere eseguito e che le informazioni potrebbero essere incomplete e non hanno elencato il colpevole. Nel mio caso, avevo un terminale aperto con la directory di lavoro all'interno di quella montata.
Jānis Elmeris,

36

Penso che tu voglia uno smontaggio pigro:

sudo umount -l example

1
Penso che il tuo suggerimento sia errato. Secondo la pagina di manuale pigro umount Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Quindi non risolverà il problema originale. D'accordo con @Gilles, lsofdovrebbe aiutare qui.

2
In realtà, questo ha funzionato per me. lsof non ha trovato alcun file aperto ma ha umount -lfunzionato.
Gerrit,

1
Questa soluzione ha funzionato anche per me!
Dan,

1
Sperimentato lo stesso problema con sshfs, questo ha funzionato anche per me.
Orun,

4

Ho appena avuto questo problema e non ho potuto kill -9leggere il processo dal filesystem montato. kill -9non ha funzionato nemmeno dopo fusermount -zu /mount/pointo umount -l /mount/point(che ha funzionato). L'unica cosa che ha funzionato è stata pkill -9 sshfs.


1
fusermount -zu /mount/pointha funzionato per me. Grazie!
ostrokach,

3

L'esecuzione di Ubuntu man fusermountracconta -zun'opzione, che è documentata come "smontaggio pigro". Sembra essere correlato, ma necessita di una conferma, che è data da questa altra pagina man: fusermount (man.he.net) , che dice "smontaggio pigro (funziona anche se la risorsa è ancora occupata)". Bisogna usarlo con il -u, l' -zopzione da sola, produrrà un errore. Ho provato l' -zopzione e posso confermare che fa il trucco, ma proprio questo sembra troppo un trucco: cosa fa esattamente? Renderlo smontato automaticamente non appena la directory non sarà più occupata? Non lo so, non documentato, quindi non sicuro.

Quindi ecco un'altra opzione, più dettagliata, ma più sicura: cerca di smontare fino a quando non riesce, tutte le volte che è necessario, in un ciclo.

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

C'è un feedback minimo sui progressi, in modo che uno sappia cosa sta succedendo e non crede che sia stato impiccato.

Questa opzione è accettabile da uno script di shell; per l'interazione dalla riga di comando, l'uso -zdell'opzione è più utile, ma probabilmente si deve essere consapevoli che la pagina man non la documenta e potrebbero esserci dei dubbi su cosa faccia esattamente.


2

Vedo spesso "dispositivo occupato" con sshfs quando ho una finestra terminale aperta su una directory nella condivisione sshfs. Uscire dal terminale o cambiare directory in una condivisione locale, quindi eseguire fusermount -u risolve i miei problemi.



1

Se hai già assicurato che nessun processo stia ancora utilizzando il filesystem prima di provare un "normale" umounting:

  • fuser -vm /mount/point e / o
  • lsof /mount/point per trovarli,
  • esci / uccidi / do_something_with_them in modo che non li usino /mount/pointpiù,

Provare:

  • pkill -KILL sshfs e poi
  • fusermount -u /mount/point.

Mi ha aiutato quando ho perso la connessione di rete e non riuscivo a smontare il punto di montaggio sshfs non rispondente.

Inoltre, se si desidera che sshfs venga smontato automaticamente quando si perde la connessione di rete , informando le applicazioni che usano sshfs di un errore I / O (in modo che non rimangano bloccati all'infinito), montare con:

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

Quando non vengono scambiati dati, il sshclient verificherà ogni 15 secondi se può ottenere una risposta dal server. Se 3 controlli falliscono, si disconnetterà e smonterà.

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.