Synchronisiert umount Anrufe, um ausstehende Schreibvorgänge abzuschließen

8

Wir haben ein BBB-basiertes Custom Board mit Kernel 3.12.

Ich habe Zweifel bezüglich umount und & sync.

Nehmen wir an, ein Skript stellt eine Partition bereit. Muss zuvor ein syncBefehl ausgeführt werden umount, um ausstehende Schreibvorgänge abzuschließen? ?

KUNST
quelle

Antworten:

12

Nein, du musst syncvorher nicht rennen umount. umountschließ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 syncfinden, 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 umountwirklich alle ausstehenden Vorgänge abzuschließen: Mounten Sie einen langsamen USB-Stick, kopieren Sie eine große Datei darauf und rufen Sie direkt umountdanach auf cp. Es dauert einige Sekunden, bis Sie eine neue Eingabeaufforderung sehen. Wenn Sie dstatusw. 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.

dirkt
quelle
Vielen Dank für die Antwort dirkt, Kennst du den Codepfad im Kernel, der das macht?
ART
6
Es könnte nicht anders sein. Wenn Sie syncdann müssten, müssten Sie zuerst das Schreiben von Prozessen blockieren, sonst könnte es nicht bearbeitet werden, syncbis Sie die unmount(eine Rennbedingung) erreicht haben.
Strg-Alt-Delor
1
umount -lLä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.
Mio Rin
Richtig. Sogar das Aushängen im Notfall (Alt + SysRq + U) durchläuft diesen Pfad, der zuerst synchronisiert wird.
Gilles 'SO - hör auf böse zu sein'
1
Meine Erklärung besagt, dass eine Synchronisierung tatsächlich das beheben würde, worüber Sie sich Sorgen machen. Die Schreibvorgänge, die nach der Synchronisierung erfolgen, würden jedoch zu Beschädigungen führen (wenn dies auf diese Weise funktioniert). Daher wäre ein System, das vor dem Aufheben eine Synchronisierung benötigt, grundlegend fehlerhaft. Da Gnu / Linux nicht grundlegend kaputt ist, kann es nicht so sein. Daher müssen Sie nicht synchronisieren. Wenn Sie eine Synchronisierung durchführen müssten, müssten Sie zuerst festlegen, dass alle Schreibvorgänge auf das Gerät blockiert werden (vor der Synchronisierung).
Strg-Alt-Delor