485 Stimmen

Aushängen eines belegten Geräts

Ich habe einige Samba-Laufwerke, auf die täglich von mehreren Benutzern zugegriffen wird. Ich habe bereits Code, um freigegebene Laufwerke (aus einer SQL-Tabelle) zu erkennen und sie in ein spezielles Verzeichnis zu mounten, auf das alle Benutzer zugreifen können.

Ich möchte wissen, wenn ich ein Laufwerk aus meiner SQL-Tabelle entferne (und es somit offline nehme), wie oder ob es überhaupt eine Möglichkeit gibt, ein ausgelastetes Gerät wieder einzuhängen? Bislang habe ich festgestellt, dass jede Form von umount funktioniert nicht.

Abgesehen von der Möglichkeit der Datenzerstörung - ist es möglich, ein Gerät, das gerade gelesen wird, wieder zu trennen?

5 Stimmen

Eine allgemeinere Antwort, die weitere Ursachen für das Scheitern von umount behandelt, finden Sie hier oletange.blogspot.dk/2012/04/umount-device-is-busy-warum.html

11 Stimmen

Hallo, wahrscheinlich Sie cd in das gemountete Verzeichnis, dann werden Sie Root oder melden sich wieder an, dann ist die andere Shell gefangen. Machen Sie exit auf allen Schalen.

0 Stimmen

794voto

Amit Verma Punkte 8005

YES !! Es gibt eine Möglichkeit, ein besetztes Gerät sofort zu trennen - auch wenn es besetzt ist und nicht gewaltsam abgehängt werden kann. Sie können später alles bereinigen:

umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)

HINWEIS/ACHTUNG

  1. Diese Befehle können einen laufenden Prozess unterbrechen, Datenverluste verursachen ODER geöffnete Dateien beschädigen. Programme, die auf Ziel-Device/NFS-Dateien zugreifen, können Fehler auslösen ODER nach dem erzwungenen Aushängen nicht mehr richtig funktionieren.
  2. Do pas oben ausführen umount Befehle innerhalb des gemounteten Pfads (Ordner/Laufwerk/Gerät) selbst. Zunächst können Sie verwenden pwd um Ihren aktuellen Verzeichnispfad zu überprüfen (der nicht der gemountete Pfad sein sollte), dann verwenden Sie cd um aus dem gemounteten Pfad herauszukommen - um ihn später mit den obigen Befehlen wieder auszuhängen.

42 Stimmen

Anmerkung: -l hier ist ein Kleinbuchstabe L (für "Lazy unmounting"). ( Siehe diese verwandte Antwort . )

5 Stimmen

Gearbeitet. Eine Nuance, wenn Sie über FTP-Client angemeldet sind, müssen Sie sich abmelden, um den Ordner erfolgreich zu trennen.

0 Stimmen

Sie funktionieren nicht. Beide bleiben einfach für immer hängen. (Debian 8, cifs-utils 2:6.4-1)

243voto

Frank Tudor Punkte 3998

Wenn möglich, lassen Sie uns den beschäftigten Prozess lokalisieren/identifizieren, diesen Prozess beenden und dann unmount die Samba-Freigabe/das Samba-Laufwerk, um den Schaden zu minimieren:

  • lsof | grep '<mountpoint of /dev/sda1>' (oder was auch immer das montierte Gerät ist)

  • pkill target_process (tötet beschäftigten Prozess nach Namen | kill PID | killall target_process )

  • umount /dev/sda1 (oder was auch immer das montierte Gerät ist)

15 Stimmen

Das führt zu nichts. Ich nehme an, dass dies daran liegt, dass es sich um ein Netzlaufwerk handelt und ich die Prozesse anderer Computer, die auf das Laufwerk zugreifen, nicht sehen kann. Das Gleiche gilt für die "fuser"-Befehle.

0 Stimmen

Oh verdammt... Sie brauchen die Samba-Befehle... /usr/bin/smbclient service <Passwort>: Mal sehen, ob Sie damit anfangen können... tldp.org/HOWTO/SMB-HOWTO-8.html

2 Stimmen

Die smb-Befehle sind eigentlich veraltet und wurden durch "umount.cifs" .... ersetzt, das ebenfalls nicht funktioniert. Es scheint, dass ich nicht in der Lage bin, umzuhängen, während es beschäftigt ist.

164voto

Luci Punkte 1469

Vergewissern Sie sich, dass Sie sich nicht mehr in dem gemounteten Gerät befinden, wenn Sie versuchen, es umzuhängen.

24 Stimmen

Genau, es reicht aus, den aktuellen Ordner (auf dem Zielgerät) im Terminal zu öffnen (z. B. mit dem cd-Befehl), um den Aushängevorgang zu stoppen :)

3 Stimmen

Ja, ich hatte eine Shell in einem Verzeichnis auf dem Gerät laufen. Ich schloss das Terminalfenster und voila

1 Stimmen

Vergewissern Sie sich auch, dass es keine anderen Einhängepunkte innerhalb des Einhängepunkts gibt, den Sie versuchen umount .

113voto

Tom Hale Punkte 32065

Vermeiden Sie umount -l

Zum Zeitpunkt der Erstellung dieses Artikels empfiehlt die am häufigsten abgegebene Antwort die Verwendung von umount -l .

umount -l gefährlich oder bestenfalls unsicher ist . Zusammengefasst:

  • Dabei wird das Gerät nicht wirklich ausgehängt, sondern nur das Dateisystem aus dem Namensraum entfernt. Schreibvorgänge auf geöffnete Dateien können fortgesetzt werden.
  • Es kann zu einer Beschädigung des btrfs-Dateisystems führen

Umgehung/Alternative

Das nützliche Verhalten von umount -l versteckt das Dateisystem vor dem Zugriff durch absolut Pfadnamen und minimiert so die weitere Nutzung von Ausgangspunkten.

Dasselbe Verhalten kann erreicht werden, indem man ein leeres Verzeichnis mit folgenden Rechten einbindet 000 über dem Verzeichnis, das ausgehängt werden soll.

Dann werden alle neuen Zugriffe auf Dateinamen im Bereich unterhalb des Einhängepunkts auf das neu überlagerte Verzeichnis mit null Rechten treffen - neue Blockierungen der Aushängung werden dadurch verhindert.

Versuchen Sie zunächst remount,ro

Die größte Errungenschaft, die es zu erreichen gilt, ist die schreibgeschützte Remount-Funktion. Wenn Sie die remount,ro Abzeichen, das wissen Sie:

  1. Alle anstehenden Daten wurden auf die Festplatte geschrieben
  2. Alle zukünftigen Schreibversuche werden fehlschlagen.
  3. Die Daten sind in einem konsistenten Zustand, falls Sie das Gerät physisch abtrennen müssen.

mount -o remount,ro /dev/device wird garantiert fehlschlagen, wenn Dateien zum Schreiben geöffnet sind Probieren Sie es also direkt aus. Vielleicht hast du ja Glück, Punk!

Wenn Sie Pech haben, konzentrieren Sie sich nur auf Prozesse mit zum Schreiben geöffneten Dateien :

lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'

Sie sollten dann in der Lage sein, das Gerät wieder schreibgeschützt einzuhängen und einen konsistenten Zustand zu gewährleisten.

Wenn Sie zu diesem Zeitpunkt nicht wieder schreibgeschützt einhängen können, untersuchen Sie einige der anderen möglichen Ursachen, die aufgelistet sind aquí .

Schreibgeschützte Re-Mount-Leistung freigeschaltet

Herzlichen Glückwunsch, Ihre Daten auf dem Mountpoint sind nun konsistent und vor zukünftigem Schreiben geschützt.

Warum fuser unterlegen ist gegenüber lsof

Warum nicht verwenden fuser früher? Nun, das hätten Sie tun können, aber fuser wirkt auf eine Verzeichnis , nicht ein Gerät Wenn Sie also den Einhängepunkt aus dem Dateinamensraum entfernen wollen und trotzdem fuser müssten Sie das tun:

  1. Duplizieren Sie den Einhängepunkt vorübergehend mit mount -o bind /media/hdd /mnt an einen anderen Ort
  2. Ausblenden des ursprünglichen Einhängepunkts und Sperren des Namensraums:

So geht's:

null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"

# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked.  https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"

# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"

# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"

Das wäre dann der Fall:

  1. Der ursprüngliche Namensraum wird ausgeblendet (es können keine weiteren Dateien geöffnet werden, das Problem kann nicht schlimmer werden)
  2. Ein dupliziertes, gebundenes Verzeichnis (im Gegensatz zu einem Gerät), auf dem laufen soll fuser .

Dies ist etwas verworrener [1] sondern erlaubt Ihnen die Verwendung:

fuser -vmMkiw <mountpoint>

der interaktiv darum bittet, die Prozesse zu beenden, deren Dateien zum Schreiben geöffnet sind. Natürlich könnten Sie dies auch tun, ohne den Einhängepunkt überhaupt zu verstecken, aber die obige Vorgehensweise imitiert umount -l ohne die damit verbundenen Gefahren.

El -w beschränkt sich auf schreibende Prozesse, und der Schalter -i ist interaktiv. Wenn Sie es also eilig haben, können Sie nach einem Nur-Lese-Remount die Option

fuser -vmMk <mountpoint>

um alle verbleibenden Prozesse mit offenen Dateien unter dem Einhängepunkt zu beenden.

Jetzt können Sie das Gerät hoffentlich aushängen. (Dazu müssen Sie umount auf dem Einhängepunkt zweimal, wenn Sie einen Modus gebunden haben 000 Verzeichnis oben).

Oder verwenden:

fuser -vmMki <mountpoint>

um die verbleibenden Nur-Lese-Prozesse, die das Aushängen blockieren, interaktiv zu beenden.

Verdammt, ich bekomme immer noch target is busy !

Offene Dateien sind nicht die einzige Blockade beim Aushängen. Siehe aquí y aquí für andere Ursachen und deren Abhilfe.

Selbst wenn Sie einen lauernden Kobold haben, der Sie daran hindert, das Gerät vollständig auszuhängen, haben Sie zumindest Ihr Dateisystem in einen konsistenten Zustand gebracht.

Sie können dann lsof +f -- /dev/device um alle Prozesse mit offenen Dateien auf dem Gerät, das das Dateisystem enthält, aufzulisten und sie dann zu beenden.


[1] Weniger umständlich ist es, wenn man mount --move aber das erfordert mount --make-private /parent-mount-point was Auswirkungen hat . Grundsätzlich gilt: Wenn der Einhängepunkt unter dem / Dateisystem, sollten Sie dies vermeiden.

5 Stimmen

Wenn --lazy so gefährlich ist, warum gibt es dann nicht einmal eine Warnung in der umount man-Seite? Alles was dort steht ist " Lazy unmount. Löse das Dateisystem jetzt aus der Dateihierarchie und lösche alle Verweise auf dieses Dateisystem, sobald es nicht mehr belegt ist. "

2 Stimmen

Das erneute Aushängen als schreibgeschützt und der erneute Versuch des Aushängens haben geholfen. Versuchen Sie das also immer zuerst, bevor Sie möglicherweise Zeit mit der weiteren Fehlersuche verschwenden.

0 Stimmen

@xdevs23: mount -o remount,ro + umount funktioniert, wenn Sie viele sporadische Schreibvorgänge haben, aber nichts wirklich an der Halterung hängt. Natürlich erhalten alle Prozesse, die versuchen, beschreibbare Dateien zu erstellen, Fehler, wenn sie nur lesen können.

52voto

user3751769 Punkte 619

Versuchen Sie Folgendes, aber bevor Sie es ausführen beachten Sie, dass die -k Flagge werden alle laufenden Prozesse, die das Gerät beschäftigen, beendet.

El -i Flagge macht fuser vor dem Töten fragen.

fuser -kim /address  # kill any processes accessing file
unmount /address

6 Stimmen

lsof | grep '/dev/<my-device> Ich habe nichts zurückgeschickt, aber das funktioniert prima! Vielleicht möchten Sie auch vorschlagen fuser -m /dev/<my-device> für den Fall, dass Sie den Prozess herausfinden wollen, bevor Sie ihn beenden.

3 Stimmen

Durch die Ausführung des Befehls fuser wurde die Verbindung zum VPS sofort unterbrochen.

0 Stimmen

In Ubuntu 18.04 gibt es keinen Fuser

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X