Wie man wirklich das Unmounten eines Dateisystems erzwingt (ohne manuelle Untersuchung, warum es ausgelastet ist)


13

Wie kann man ein Dateisystem unter Linux aushängen, ohne zu untersuchen, warum es ausgelastet ist?

Ich möchte es mit einem Befehl tun. Es sollte Anwendungen handhaben, die dieses Dateisystem, Submounts, Container ( lxc-execute -n qqq <command>) und alle anderen Dinge verwenden.

Einfach "aussteigen. Keine Einwände!". Spezielle Kernel-Patches oder -Konfigurationen sind zulässig.

Dateisystem sollte wirklich nicht gemountet sein, umount -list also sicher keine Option. Zum Beispiel für cryptsetup remove(Übrigens, wie erzwungen wird cryptsetup remove? Update:, cryptsetup luksSuspend aber Sie werden nicht in der Lage sein, cryptsetup luksResumewenn es nicht LUKS ist).

Wie mache ich alle Dateihandles auf diesem Dateisystem ungültig?

Die einzige verlässliche Methode, die ich kenne, ist das Mounten des Dateisystems über FUSE (normalerweise ist das Mounten des FUSE-Objekts kein Problem, da ich nur den Prozess beenden kann).

PS bereits wissen montieren fuser, lsof | grep, cat /proc/*/mounts | grepund veraltet nicht funktionierenden „badfs Patch“.

Antworten:


3

Verwenden Sie die Tastenkombination Magic SysRq : Alt+ SysRq+u

Beachten Sie, dass Sie wahrscheinlich zuerst eine Notfall - Synchronisierung durchführen sollte: Alt+ SysRq+s

Beachten Sie auch, dass Sie auf einigen (insbesondere neueren) Tastaturen PrtSceher als verwenden müssenSysRq


Die Umschalttaste ist nicht erforderlich, nur die Tastenkombination Alt + SysRq +. Eine weitere erwähnenswerte Funktion (insbesondere für Laptopbenutzer) ist, dass Sie Alt drücken, SysRq drücken und loslassen, dann den Buchstaben / die Ziffer drücken und loslassen und schließlich Alt loslassen können. Das Wichtigste ist, dass alle Dateisysteme schreibgeschützt neu gemountet werden. Es ist also eine letzte Sache, bevor ein Neustart erzwungen wird, keine allgemeine Methode, um Dateisysteme schreibgeschützt neu zu mounten.
Gilles 'SO - hör auf, böse

@Gilles: danke für den tipp zur umschalttaste. Ich habe meine Anweisungen korrigiert.
sml

1. Es wird nur lesend gemountet. Es ist nicht so gewollt. Zum Beispiel möchte ich es aushängen und erneut mit FUSE einhängen. 2. Eine schlechte Sache ist, dass ich das Root-Dateisystem "-o remounten, rw" und andere danach müssen, um zur normalen Arbeit zurückzukehren.
Vi.

3

umount --forceoder umount -f(gleichwertig)

Wenn dies fehlschlägt, verwenden Sie:

umount --lazyoder umount --l(gleichwertig)

Die " Lazy " -Option "trennt das Dateisystem jetzt von der Dateisystemhierarchie und bereinigt alle Verweise auf das Dateisystem, sobald es nicht mehr ausgelastet ist. (Erfordert Kernel 2.4.11 oder neuer.)" Dies kann zu Instabilität führen, aber es kann sein werde das ding demontieren lassen. Alle Programme, die das Laufwerk verwenden, können abstürzen.


Geht natürlich --forcenicht Und --lazyist nicht wirklich unmount - es gibt keine LVM-, Loopback- oder Cryptsetup-Dinge frei.
Vi.

1
umount -f

kann verwendet werden, um das Aufheben der Bereitstellung zu erzwingen, wenn das Dateisystem ausgelastet ist.


1
Bei mir hat es nie umount2: Device or resource busygeklappt : Der einzige Teilerfolg war, als ich mit badfs patch experimentiert habe.
Vi.

Ich hatte die gleiche Fehlermeldung, aber sie funktionierte trotzdem. Das Dateisystem wurde nach dem umount -f
IanH

3
Versuchen Sie "Lazy Umount", umount -l. Es wird immer umgezählt, kann jedoch zu einem instabilen Dateisystem führen.
Jimmy Hedman

Ich denke, dass Jimmys Kommentar zu dieser Antwort die beste Option ist. Es ist wahr, dass ein "verzögertes" Unmounten zu Instabilität führen kann, aber es wird davon ausgegangen, dass Sie sich bereits in einem instabilen Zustand befinden, wenn Sie das Dateisystem zwangsweise ummounten müssen. Warum ist '-l' zu diesem Zweck keine Option?
Deesto

@deesto, Lazy Unmount macht das Undelying-Block-Device (LVM-Volume, LUKS-Container, Loopback) nicht unreferenziert.
Vi.

1

Ich fürchte, es gibt keine Möglichkeit, dies mit einem Befehl zu tun. umount -ffunktioniert wirklich nicht so reibungslos wie man hoffen würde. Wenn sich unter einem anderen Mount Submounts befinden, können Sie diese Mounts nicht einfach in zufälliger Reihenfolge entfernen und hoffen, dass sie sinken.

Aber keine Sorge, es gibt eine Möglichkeit, all dies zu einem einzigen Befehl zu machen: Erstellen Sie ein Shell- / Perl-Skript, das die gewünschten Prozesse beendet, die Bereitstellung von Containern aufhebt, die Bereitstellung aufhebt und schließlich eine andere Bereitstellung aufhebt. Dann können Sie Ihr Skript einfach bei Bedarf aufrufen. Anfangs ist das mehr Arbeit für Sie, aber nachdem Sie das Skript zum Laufen gebracht haben, ist alles ein Kinderspiel. :)


1
Dies sind Fälle, in denen ich die Bereitstellung nicht einmal manuell aufheben kann: 1. Prozesse im unterbrechungsfreien Ruhezustand, die nicht fortgesetzt werden können (abgestürzte Treiber usw.) 2. Fehlgeschlagener Speicher (der auch jede Anforderung daran hängt). Ich möchte, dass dieses "schmutzige Aushängen" damit fertig wird.
Vi.
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.