GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So trennen Sie ein ausgelastetes Gerät

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

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

  • pkill target_process (beendet beschäftigte Prozesse nach Namen | kill PID | killall target_process )

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


Vermeiden Sie umount -l

Zum Zeitpunkt des Verfassens dieses Artikels empfiehlt die am häufigsten bewertete Antwort die Verwendung von umount -l .

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

  • Es hängt das Gerät nicht wirklich ab, es entfernt nur das Dateisystem aus dem Namensraum. Schreibvorgänge in geöffnete Dateien können fortgesetzt werden.
  • Es kann eine Beschädigung des Btrfs-Dateisystems verursachen

Workaround / Alternative

Das nützliche Verhalten von umount -l verbirgt das Dateisystem vor dem Zugriff durch absolute Pfadnamen, wodurch die weitere Moutpoint-Nutzung minimiert wird.

Dasselbe Verhalten kann erreicht werden, indem ein leeres Verzeichnis mit den Berechtigungen 000 gemountet wird über das auszuhängende Verzeichnis.

Dann treffen alle neuen Zugriffe auf Dateinamen unterhalb des Einhängepunkts das neu überlagerte Verzeichnis mit null Berechtigungen - neue Blocker zum Aushängen werden dadurch verhindert.

Versuchen Sie zuerst remount,ro

Der wichtigste Unmount-Erfolg, der freigeschaltet werden muss, ist der schreibgeschützte Remount. Wenn Sie die remount,ro erhalten Abzeichen, das wissen Sie:

  1. Alle ausstehenden Daten wurden auf die Festplatte geschrieben
  2. Alle zukünftigen Schreibversuche schlagen fehl
  3. Die Daten befinden sich in einem konsistenten Zustand, falls Sie das Gerät physisch trennen müssen.

mount -o remount,ro /dev/device wird garantiert fehlschlagen, wenn Dateien zum Schreiben geöffnet sind, also versuchen Sie es gleich. Vielleicht hast du 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 schreibgeschützt neu zu mounten und einen konsistenten Zustand sicherzustellen.

Wenn Sie zu diesem Zeitpunkt nicht schreibgeschützt neu mounten können, untersuchen Sie einige der anderen möglichen Ursachen, die hier aufgeführt sind.

Nur-Lesen-Remount-Erfolg freigeschaltet ð☑

Herzlichen Glückwunsch, Ihre Daten auf dem Einhängepunkt sind jetzt konsistent und vor zukünftigem Schreiben geschützt.

Warum fuser ist kleiner als lsof

Warum nicht use fuser verwenden vorhin? Nun, hättest du, aber fuser arbeitet mit einem Verzeichnis , kein Gerät , wenn Sie also den Einhängepunkt aus dem Dateinamensraum entfernen und trotzdem fuser verwenden möchten , müssten Sie:

  1. Duplizieren Sie vorübergehend den Einhängepunkt mit mount -o bind /media/hdd /mnt an einen anderen Ort
  2. Verstecken Sie den ursprünglichen Einhängepunkt und blockieren Sie den Namensraum:

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"

Sie hätten dann:

  1. Der ursprüngliche Namespace versteckt (es konnten keine Dateien mehr geöffnet werden, das Problem kann nicht schlimmer werden)
  2. Ein doppeltes Bind-gemountetes Verzeichnis (im Gegensatz zu einem Gerät), auf dem fuser ausgeführt werden soll .

Dies ist komplizierter, ermöglicht Ihnen aber die Verwendung von:

fuser -vmMkiw <mountpoint>

die interaktiv auffordert, die Prozesse mit zum Schreiben geöffneten Dateien zu beenden. Natürlich könnten Sie dies tun, ohne den Einhängepunkt zu verbergen, aber das obige ahmt umount -l nach , ohne die Gefahren.

Der -w Schalter beschränkt auf Schreibvorgänge und -i ist interaktiv, wenn Sie es also eilig haben, können Sie nach einem schreibgeschützten Remount Folgendes verwenden:

fuser -vmMk <mountpoint>

um alle verbleibenden Prozesse mit geöffneten Dateien unter dem Einhängepunkt zu beenden.

Hoffentlich können Sie das Gerät an dieser Stelle aushängen. (Sie müssen umount ausführen auf dem Einhängepunkt zweimal, wenn Sie einen Modus 000 gemountet haben Verzeichnis ganz oben.)

Oder verwenden Sie:

fuser -vmMki <mountpoint>

um die verbleibenden schreibgeschützten Prozesse, die das Unmounten blockieren, interaktiv zu beenden.

Verdammt, ich bekomme immer noch target is busy !

Geöffnete Dateien sind nicht der einzige Unmount-Blocker. Siehe hier und hier für andere Ursachen und deren Abhilfe.

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

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


JA !! Es gibt eine Möglichkeit, ein ausgelastetes Gerät sofort zu trennen – selbst wenn es ausgelastet ist und nicht zwangsweise ausgehängt werden kann. Sie können später alles aufräumen:

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, Datenverlust verursachen ODER offene Dateien beschädigen. Programme, die auf GERÄTE-/NFS-Zieldateien zugreifen, können Fehler auslösen ODER könnten nach dem erzwungenen Unmounten nicht richtig funktionieren.
  2. Tun Sie nicht oben ausführen umount Befehle, wenn sie sich innerhalb des gemounteten Pfads (Ordner/Laufwerk/Gerät) selbst befinden. Zuerst können Sie pwd verwenden Befehl, um Ihren aktuellen Verzeichnispfad zu validieren (der nicht der gemountete Pfad sein sollte), und verwenden Sie dann cd Befehl, um den gemounteten Pfad zu verlassen - um ihn später mit den obigen Befehlen zu unmounten.

Stellen Sie sicher, dass Sie sich nicht immer noch im gemounteten Gerät befinden, wenn Sie versuchen, es zu unmounten.


Linux
  1. So mounten und unmounten Sie Laufwerke unter Linux

  2. Wie finde ich das Kernel-Modul für ein bestimmtes Gerät?

  3. Wie finde ich heraus, welcher serielle Port verwendet wird?

  4. Linux – Wie verbinde ich ein logisch getrenntes USB-Gerät wieder?

  5. So erstellen Sie ein virtuelles Blockgerät (Loop-Gerät/Dateisystem) in Linux

So mounten und unmounten Sie Dateisysteme in Linux

So verbinden Sie sich über Bluetooth in GNOME unter Linux

So verfolgen Sie Ihren Linux-Laptop

Manuelles Mounten/Unmounten eines USB-Geräts unter Ubuntu 20.04 und 22.04

So erkennen und verwalten Sie Geräte unter Linux

Wie starte ich einen Android-Emulator in Ubuntu 16.04?