Vor einiger Zeit gab es einige Diskussionen darüber, dass ext4 nach einem unreinen Unmount möglicherweise leere Dateien hinterlässt, was in diesem Artikel ziemlich gut zusammengefasst wurde . Grundsätzlich können Schreibvorgänge aufgrund der verzögerten Zuweisung viel länger als das Standard-Festschreibungsintervall des ext-Journals (5 Sekunden) im Schreibcache gespeichert werden.
Die Probleme scheinen in einem Patch behoben worden zu sein, der in bestimmten Situationen die Blockzuweisung erzwingt und dadurch die Daten standardmäßig nach höchstens 5 Sekunden auf die Festplatte zwingt.
Ich frage mich, was passiert, wenn eine Anwendung vorhandene Teile einer Datei überschreibt, ohne die Datei selbst abzuschneiden oder anzufügen. Wird das auch innerhalb von 5 Sekunden auf die Festplatte gebracht?
Dies scheint eine andere Situation zu sein als das Anhängen an eine Datei: Beim Anhängen ändert sich die Dateigröße. Dies ist eine Metadatenänderung. Daher muss innerhalb von 5 Sekunden ein Journal-Commit durchgeführt werden. Aufgrund von data = orders müssen die Daten aus Sicherheitsgründen zuvor geschrieben werden (andernfalls können Teile der gelöschten Dateien anderer Benutzer für den Eigentümer des angehängten Dokuments angezeigt werden Datei).
Wenn Sie nur Dateidaten überschreiben, gibt es keinen Grund, warum das Schreiben der Daten vor dem Festschreiben des Metadatenjournals erfolgen muss, da die alten Daten demselben Benutzer gehören wie die neuen. Tritt der Schreibvorgang trotzdem vor dem Festschreiben auf, oder kann er länger als das Festschreibungsintervall für das Journal verzögert werden? Wenn ja, wie lange?
Update: Ich weiß, dass all dies irrelevant ist, wenn man das Richtige tut, also fsync () verwendet. (Dies war der Hauptgrund für alle Diskussionen über ext4 und Datenverlust - das Problem betraf nur Anwendungen, die nicht fsync () sind oder nicht im richtigen Moment.) Ich schreibe keine eigene Anwendung, frage ich, weil ich Ich weiß nicht, ob alle meine Anwendungen das Richtige tun, und ich möchte einen ungefähren Zeitrahmen für solche "gefährlichen" Schreibvorgänge kennen. Der Grund für die Frage ist, dass mein Grafiktreiber regelmäßig Kernel-Panics verursacht, und ich möchte wissen, ob ich mir Gedanken über mehr als die letzten 5 Sekunden beim Schreiben von Daten machen muss.