Ich habe ein Projekt, wo ich die Daten auf der Festplatte sehr häufig im Falle eines Stromausfalls aktualisieren müssen. Beim Überschreiben von genau 512b (1 Sektor meines Laufwerks) in der Datei mit Daten gleicher Länge markiert das Dateisystem die Sektoren, die geändert wurden, und aktualisiert sie auf der Festplatte, wenn sie zum Leeren bereit sind? Oder schreibt es die ganze Datei jedes Mal, wenn es eine Änderung löscht? Ich bin hauptsächlich mit ext4 beschäftigt, aber ich bin neugierig, ob es das gleiche mit jedem Dateisystem ist.Dateisystem: Überschreiben von Daten gleicher Länge
Wenn der Standard Änderungen nicht nachverfolgt, sondern die gesamte Datei überschreibt, gibt es eine Möglichkeit, dies zu ändern? Einige Schreiboptionen?
Und in einer 1mb-Datei, wenn ich 300b eines 512b-Sektors schrieb, würde es immer noch nur den einen Sektor überschreiben? Es würde nur einen Lesevorgang für den anderen 212b durchführen, bevor es den zu überschreibenden Sektor löscht? – Shenanigans
Wenn Sie direkte E/A verwenden, müssen Sie eine direkte E/A-Leseoperation ausführen, gefolgt von einer direkten E/A-Schreiboperation, und die direkten E/A-Operationen müssen den direkten E/A-Regeln folgen um einen 512 ausgerichteten Lesevorgang auszuführen, ändern Sie die 300 Bytes und führen Sie dann einen direkten E/A-Schreibvorgang aus, der auch den direkten E/A-Regeln folgt, also muss der Puffer an einer 512-Byte-Grenze ausgerichtet sein schreiben müssen 512 Byte ausgerichtet sein, und die Länge muss ein Vielfaches von 512 Bytes sein. –
Wenn Sie einen gepufferten Schreibvorgang durchführen, wird der Seitencache durchlaufen, was einen Lese-, Änderungs- und Schreibzyklus von 4k bedeutet. –