Warum ist fauler MNT_DETACH oder `umount -l` unsicher / gefährlich?

10

Ich habe an einigen Stellen gelesen, dass dies umount -lunsicher ist:

In einer Antwort von @cas :

Verwenden Sie umountdie --lazyOption nicht, wenn Sie sich darum kümmern, wann das externe Laufwerk sicher vom Stromnetz getrennt werden kann

Ein Kommentar von @frostschutz :

umount --lazyist nicht sicher und kann nicht sicher gemacht werden. [...]

Dieser util-linux Kommentar von Rüdiger Meier :

Sie sollten die Verwendung umount -lüberhaupt vermeiden . /tmp/mountpointBeenden Sie einfach alle Prozesse, die verwendet werden, und stellen Sie sie dann ohne Option um -l.

Warum ist umount -lunsicher / gefährlich?

Gibt es eine Möglichkeit, es sicher zu machen?

Tom Hale
quelle

Antworten:

12

Ein fauler Aushängen schafft eine Schrödingers Katze Halterung

  • Sie können nicht wissen, ob das Gerät tatsächlich nicht gemountet ist oder nicht
  • Das "nicht gemountete" Dateisystem bleibt unter bestimmten Umständen zugänglich
  • Auf das "nicht gemountete" Dateisystem kann unter bestimmten Umständen nicht zugegriffen werden

Es gibt ein falsches Sicherheitsgefühl : Es scheint, dass das Dateisystem nicht gemountet wurde, aber in Wirklichkeit wurde es nur vor dem Dateinamensraum / der Hierarchie verborgen.

  • Prozesse können weiterhin über offene Dateideskriptoren schreiben
  • Neue oder vorhandene Dateien können von Prozessen mit einem Arbeitsverzeichnis innerhalb des Mountpoints über relative Pfadnamen zum Schreiben geöffnet werden

Dies bedeutet, dass Sie, wenn Sie umount -l /media/hddkeinen Zugriff mehr haben /media/hdd/dir/file(absoluter Pfadname), aber einen Prozess mit Arbeitsverzeichnis /media/hddhaben, immer noch neue Prozesse erstellen können, die lesen / schreiben können ./dir/file(relativer Pfadname).

Wenn Sie versuchen, das Gerät abzuhängen, wird eine verwirrende Meldung angezeigt:

# umount --force --all-targets /dev/sdb2
umount: /dev/sdb2: not mounted

Dies macht es aussehen wie das Gerät hat unounted, aber es noch können Prozesse auf die Festplatte geschrieben werden.

Da es verschiedene nicht offensichtliche Situationen gibt, die dazu führen können, dass umount blockiert wird , wird das Dateisystem möglicherweise immer noch nicht ausgehängt, obwohl lsof +f -- /dev/devicenichts angezeigt wird .

Sie werden nie erfahren, ob das Dateisystem tatsächlich nicht bereitgestellt wird. Es gibt keine Möglichkeit, es herauszufinden.

Wechselmedien

Wenn Sie umount -leinen Wechseldatenträger verwenden, befinden Sie sich in der Schwebe: Sie können nicht sicher sein, ob alle ausstehenden Daten auf den Datenträger geschrieben wurden.

Das Beste, was Sie nach a tun können, umount -list sicherzustellen , dass alle Schreibvorgänge abgeschlossen sind und zukünftiges Schreiben verhindert wird. Sie können jedoch immer noch nicht garantieren, dass es nicht gemountet wurde.

Wenn das Gerät bei Wechselmedien nicht ordnungsgemäß ausgehängt ist, kann es beim nächsten Anschließen zu merkwürdigem Verhalten kommen:

  • Das Gerät erhält einen inkrementierten Gerätenamen, dh /dev/sdbwird /dev/sdc. Auf die Kernel-Protokollnachrichten wird möglicherweise weiterhin verwiesen, /dev/sdbobwohl dieses Gerät nicht mehr als Datei unter vorhanden ist /dev. (Die einzige Möglichkeit, dies zu beheben, ist ein Neustart.)

  • btrfs-Beschädigung kann die Folge sein. btrfs erwartet, dass jeweils nur ein Dateisystem mit einer bestimmten UUID vorhanden ist. Der Kernel sieht immer noch dieselbe UUID auf dem Phantomgerät und dem neuen Gerät. (Ich musste meine btrfs Backup-Festplatte neu erstellen).

systemd Fallstricke

Tom Hale
quelle
"Neue oder vorhandene Dateien können von Prozessen mit einem Arbeitsverzeichnis innerhalb des Mountpoints über relative Pfadnamen zum Schreiben geöffnet werden." Dies sind die Informationen, nach denen ich gesucht habe. Haben Sie zusätzliche Links oder Referenzen?
Jonathon Reinhart
@ Jonathon check man umount. Ich müsste sonst googeln. Bitte posten Sie Ihre Ergebnisse, wenn Sie dies tun.
Tom Hale
Ich habe in umount(2)letzter Zeit mehrmals gelesen . Es heißt nur "Führen Sie ein verzögertes Aufheben der Bereitstellung durch: Machen Sie den Bereitstellungspunkt für neue Zugriffe nicht verfügbar, trennen Sie das Dateisystem und alle darunter bereitgestellten Dateisysteme sofort voneinander und von der Bereitstellungs-Tabelle und führen Sie das Aufheben der Bereitstellung tatsächlich aus, wenn der Bereitstellungspunkt nicht mehr ausgelastet ist . " Leider ist dies weniger detailliert als das, was Sie angegeben haben.
Jonathon Reinhart
umount(8)sagt, dass ein Dateisystem ausgelastet ist, "zum Beispiel wenn offene Dateien darauf sind oder wenn ein Prozess sein Arbeitsverzeichnis dort hat oder wenn eine Auslagerungsdatei darauf verwendet wird." Das klingt nicht nach einer endgültigen Liste, ist aber wahrscheinlich so gut, wie ich finden kann.
Jonathon Reinhart
Ich habe etwas näher auf das eingegangen, was Sie gesagt haben, und dieser Antwort einige andere Beispiele hinzugefügt . Danke für die Auskunft!
Jonathon Reinhart