Vermeiden umount -l
Zum Zeitpunkt des Schreibens empfiehlt die am besten gewählte Antwort die Verwendung umount -l
.
umount -l
ist gefährlich oder bestenfalls unsicher . Zusammenfassend:
- Das Gerät wird nicht ausgehängt, sondern nur das Dateisystem aus dem Namespace entfernt. Das Schreiben in geöffnete Dateien kann fortgesetzt werden.
- Dies kann zu einer Beschädigung des btrfs-Dateisystems führen
Umgehen / Alternative
Das nützliche Verhalten von umount -l
besteht darin, das Dateisystem durch absolute Pfadnamen vor dem Zugriff zu verbergen , wodurch die weitere Verwendung von Mundpunkten minimiert wird.
Das gleiche Verhalten kann erreicht werden, indem ein leeres Verzeichnis mit Berechtigungen 000
für das Verzeichnis bereitgestellt wird, dessen Bereitstellung aufgehoben werden soll.
Dann werden alle neuen Zugriffe auf Dateinamen unterhalb des Mountpunkts mit null Berechtigungen auf das neu überlagerte Verzeichnis übertragen - neue Blocker für das Aufheben der Bereitstellung werden dadurch verhindert.
Versuchen Sie es zuerst remount,ro
Der wichtigste Erfolg beim Entsperren ist das schreibgeschützte Remount. Wenn Sie das remount,ro
Abzeichen erhalten, wissen Sie, dass:
- Alle ausstehenden Daten wurden auf die Festplatte geschrieben
- Alle zukünftigen Schreibversuche schlagen fehl
- Die Daten befinden sich in einem konsistenten Zustand, falls Sie das Gerät physisch trennen müssen.
mount -o remount,ro /dev/device
Es ist garantiert, dass dies fehlschlägt, wenn Dateien zum Schreiben geöffnet sind. Versuchen Sie es also direkt. Du fühlst dich vielleicht glücklich, Punk!
Wenn Sie Pech haben, konzentrieren Sie sich nur auf Prozesse mit Dateien, die zum Schreiben geöffnet sind :
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
Sie sollten dann in der Lage sein, das Gerät schreibgeschützt erneut bereitzustellen und einen konsistenten Status sicherzustellen.
Wenn Sie zu diesem Zeitpunkt nicht schreibgeschützt erneut bereitstellen können, untersuchen Sie einige der anderen hier aufgeführten möglichen Ursachen .
Schreibgeschützter Re-Mount-Erfolg freigeschaltet 🔓☑
Herzlichen Glückwunsch, Ihre Daten auf dem Mountpoint sind jetzt konsistent und vor künftigem Schreiben geschützt.
Warum fuser
ist schlechter alslsof
Warum nicht fuser
früher verwenden? Nun, Sie könnten es haben, arbeiten aber fuser
mit einem Verzeichnis , nicht mit einem Gerät . Wenn Sie also den Mountpoint aus dem Dateinamenraum entfernen und dennoch verwenden fuser
möchten, müssen Sie:
- Duplizieren Sie den Mountpoint vorübergehend mit
mount -o bind /media/hdd /mnt
an einen anderen Ort
- Blenden Sie den ursprünglichen Einhängepunkt aus und blockieren Sie den Namespace:
Hier ist wie:
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:
- Der ursprüngliche Namespace ist ausgeblendet (es konnten keine weiteren Dateien geöffnet werden, das Problem kann nicht schlimmer werden)
- Ein doppelt gebundenes gebundenes Verzeichnis (im Gegensatz zu einem Gerät), auf dem ausgeführt werden soll
fuser
.
Dies ist komplizierter [1] , ermöglicht Ihnen jedoch Folgendes:
fuser -vmMkiw <mountpoint>
Hier werden Sie interaktiv aufgefordert, die Prozesse mit zum Schreiben geöffneten Dateien abzubrechen. Natürlich können Sie dies tun, ohne den Einhängepunkt überhaupt zu verbergen, aber die oben genannten Nachahmungen umount -l
, ohne die Gefahren.
Der -w
Schalter beschränkt sich auf Schreibvorgänge und -i
ist interaktiv. Wenn Sie es also nach einem schreibgeschützten Remount eilig haben, können Sie Folgendes verwenden:
fuser -vmMk <mountpoint>
um alle verbleibenden Prozesse mit Dateien abzubrechen, die unter dem Mountpoint geöffnet sind.
Hoffentlich können Sie das Gerät an dieser Stelle aushängen. (Sie müssen umount
zweimal auf dem Mountpoint ausgeführt werden, wenn Sie ein Modusverzeichnis 000
oben gebunden haben .)
Oder verwenden Sie:
fuser -vmMki <mountpoint>
um die verbleibenden schreibgeschützten Prozesse, die das Aufheben der Bereitstellung blockieren, interaktiv zu beenden.
Verdammt, ich verstehe immer noch target is busy
!
Offene Dateien sind nicht der einzige Blocker zum Aufheben der Bereitstellung. Weitere Ursachen und deren Abhilfemaßnahmen finden Sie hier und hier .
Selbst wenn Sie einen lauernden Gremlin haben, der Sie daran hindert, das Gerät vollständig abzumelden, haben Sie Ihr Dateisystem zumindest in einem konsistenten Zustand.
Anschließend können Sie lsof +f -- /dev/device
alle Prozesse mit geöffneten Dateien auf dem Gerät mit dem Dateisystem auflisten und anschließend beenden.
[1] Die Verwendung ist weniger kompliziert mount --move
, aber das erfordert mount --make-private /parent-mount-point
Auswirkungen . Wenn der Mountpoint unter dem /
Dateisystem bereitgestellt wird , möchten Sie dies grundsätzlich vermeiden.