Antworten:
Nein, du musst sync
vorher nicht rennen umount
. umount
schließt alle ausstehenden Schreibvorgänge ab, bevor das Dateisystem tatsächlich ausgehängt wird. Es wird auch abgelehnt, die Bereitstellung aufzuheben, wenn ein Prozess das Dateisystem noch verwendet, z. B. als aktuelles Arbeitsverzeichnis.
Bearbeiten : Das Aushängen wird meistens in behandelt fs/namespace.c
. Sie werden dort keinen expliziten Aufruf sync
finden, aber Sie sehen Kommentare in der Zeile "Markieren Sie diesen Mountpunkt zum Aufheben der Bereitstellung, lehnen Sie alle weiteren Vorgänge ab und entfernen Sie die Bereitstellung, wenn alle Vorgänge abgeschlossen sind". Sie können auch explizite Überprüfungen während der Verwendung anzeigen.
Sie können sich leicht selbst testen, um umount
wirklich alle ausstehenden Vorgänge abzuschließen: Mounten Sie einen langsamen USB-Stick, kopieren Sie eine große Datei darauf und rufen Sie direkt umount
danach auf cp
. Es dauert einige Sekunden, bis Sie eine neue Eingabeaufforderung sehen. Wenn Sie dstat
usw. in einem anderen Fenster ausführen, werden die Schreibvorgänge angezeigt, die noch ausgeführt werden. Das ist genau das gleiche Verhalten, als hätten Sie getippt sync
.
sync
dann müssten, müssten Sie zuerst das Schreiben von Prozessen blockieren, sonst könnte es nicht bearbeitet werden, sync
bis Sie die unmount
(eine Rennbedingung) erreicht haben.
umount -l
Lässt den Befehl abgeschlossen werden, wenn noch etwas das Dateisystem verwendet, und wartet im Hintergrund, bis der Vorgang abgeschlossen ist, und hebt ihn dann leise auf.