Das sshfs-Gerät ist ausgelastet


30

Ich habe ein Remote-Dateisystem mit sshfs (Version 2.8.4) gemountet

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

aber das Abhängen schlägt fehl

> 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))

Irgendwelche Ideen, was diesen Fehler verursachen könnte und wie man ihn beheben könnte?

Antworten:


14

Einige Programme verwenden eine Datei in dem Dateisystem, das Sie aushängen möchten. Es kann sich um eine Datei handeln, die zum Lesen oder Schreiben geöffnet wurde, ein aktuelles Verzeichnis oder einige weitere unklare Fälle. Es könnte sogar daran liegen, dass ein Verzeichnis im Dateisystem ein Einhängepunkt ist.

Führen Sie aus, um dies zu untersuchen lsof +f -- example. Hier erfahren Sie, welche Prozesse das Dateisystem verwenden. Machen Sie sich selbst ein Urteil darüber, ob Sie Dateien schließen, töten oder den Vorgang zum Aufheben des Ladevorgangs verschieben möchten.


Seltsamerweise zeigte lsof keinen gvfsd-Archivierungsprozess, der durch das Öffnen (und Schließen?) Einer Archivdatei über eine Dateimanager-GUI verursacht wurde. Also auch nachschauen ps aux | grep gvfsd-archive.
Alexei

Es wurde gewarnt, dass lstat nicht ausgeführt werden kann und dass die Informationen möglicherweise unvollständig sind, und der Täter wurde nicht aufgeführt. In meinem Fall hatte ich ein Terminal geöffnet, in dem sich das Arbeitsverzeichnis befand.
Jānis Elmeris

36

Ich denke du willst ein faules Absteigen:

sudo umount -l example

1
Ich denke, dein Vorschlag ist falsch. Laut Handbuchseite faul umount Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. Daher wird das ursprüngliche Problem nicht behoben. Einverstanden mit @Gilles, lsofsollte hier weiterhelfen.

2
Eigentlich hat das bei mir geklappt. lsof konnte keine offenen Dateien finden, umount -lfunktionierte aber .
Gerrit

1
Diese Lösung hat auch bei mir funktioniert!
Dan

1
Das gleiche Problem mit sshfs hat auch bei mir funktioniert.
Orun

4

Ich hatte gerade dieses Problem und konnte kill -9den Prozess nicht aus dem gemounteten Dateisystem lesen. kill -9hat auch nach fusermount -zu /mount/pointoder nicht funktioniert umount -l /mount/point(was hat funktioniert). Das einzige was funktionierte war pkill -9 sshfs.


1
fusermount -zu /mount/pointarbeitete für mich. Vielen Dank!
Ostrokach

3

Wenn Sie Ubuntu ausführen, werden Sie man fusermountauf eine -zOption hingewiesen, die als "Lazy Unmount" dokumentiert ist. Es scheint verwandt zu sein, benötigt aber eine Bestätigung, die von dieser anderen Manpage gegeben wird: fusermount (man.he.net) , auf der steht "Lazy Unmount (funktioniert auch, wenn die Ressource noch ausgelastet ist)". Man muss es verwenden , mit der -udie -zOption allein, wird einen Fehler erzeugen. Ich habe die -zOption ausprobiert und kann bestätigen, dass sie den Trick macht, aber genau das sieht nach einem Trick aus: Was genau macht sie? Stellen Sie sicher, dass die Bereitstellung automatisch aufgehoben wird, sobald das Verzeichnis nicht mehr belegt ist. Ich weiß nicht, nicht dokumentiert, also unsicher.

Hier ist eine weitere Option, die ausführlicher, aber sicherer ist: Sie versucht, die Bereitstellung aufzuheben, bis sie in einer Schleife so oft wie nötig erfolgreich ist.

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;

Es gibt eine minimale Fortschrittsrückmeldung, damit man weiß, was los ist und nicht glaubt, dass es hängt.

Diese Option ist in einem Shell-Skript zulässig. Für die Kommandozeileninteraktion ist die Verwendung der -zOption praktischer, aber man muss sich wahrscheinlich bewusst sein, dass die Manpage sie nicht dokumentiert und es Zweifel gibt, was sie genau macht.


2

Ich sehe oft "Gerät beschäftigt" mit sshfs, wenn ein Terminalfenster für ein Verzeichnis auf der sshfs-Freigabe geöffnet ist. Das Beenden des Terminals oder das Ändern der Verzeichnisse auf eine lokale Freigabe und das Ausführen von fusermount -u lösen meine Probleme.



1

Wenn Sie bereits sichergestellt haben, dass noch kein Prozess das Dateisystem verwendet, bevor Sie das "normale" Umounting versuchen:

  • fuser -vm /mount/point und / oder
  • lsof /mount/point um sie zu finden,
  • quit / kill / do_something_with_them damit sie nicht /mount/pointmehr benutzen ,

Versuchen:

  • pkill -KILL sshfs und dann
  • fusermount -u /mount/point.

Es hat mir geholfen, wenn ich die Netzwerkverbindung verloren habe und den nicht reagierenden sshfs-Einhängepunkt nicht umhängen konnte.

Wenn Sie möchten , dass sshfs bei einem Ausfall der Netzwerkverbindung automatisch umgemountet wird , und Anwendungen, die sshfs verwenden, über einen E / A-Fehler informiert werden (damit sie nicht unendlich hängen bleiben), mounten Sie mit:

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

Wenn keine Daten ausgetauscht werden, sshprüft Ihr Client alle 15 Sekunden, ob er eine Antwort vom Server erhalten kann. Wenn 3 Prüfungen fehlschlagen, wird die Verbindung getrennt und die Anzahl verringert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.