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:
- Alle anstehenden Daten wurden auf die Festplatte geschrieben
- Alle zukünftigen Schreibversuche werden fehlschlagen.
- 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:
- Duplizieren Sie den Einhängepunkt vorübergehend mit
mount -o bind /media/hdd /mnt
an einen anderen Ort
- 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:
- Der ursprüngliche Namensraum wird ausgeblendet (es können keine weiteren Dateien geöffnet werden, das Problem kann nicht schlimmer werden)
- 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
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 Sieexit
auf allen Schalen.0 Stimmen
ご覧ください: unix.stackexchange.com/questions/107885