Welche Mount-Option muss für das ext3-Dateisystem verwendet werden, um Datenverlust oder -beschädigung zu minimieren?

15

Ich habe ein eingebettetes Setup mit einem initramfs für das Root-Dateisystem, aber mit einer benutzerdefinierten ext3-Partition, die auf einem Compact-Flash-IDE-Laufwerk installiert ist. Da die Datenintegrität angesichts eines Stromausfalls der wichtigste Faktor im gesamten Setup ist, habe ich die folgenden Optionen zum Mounten verwendet (unten ist der Eintrag aus meiner /etc/fstabDatei angegeben)

<file system> <mount pt> <type> <options>                         <dump><pass>
/dev/sda2     /data      ext3   auto,exec,relatime,sync,barrier=1 0     2

Ich bin auf diese Möglichkeiten gestoßen, weil ich im Internet herumgelesen habe. Was mich beunruhigt ist, dass der Inhalt /proc/mountsfolgendes ergibt:

/dev/sda2 /data ext3 rw,sync,relatime,errors=continue,user_xattr,acl,
barrier=1,data=writeback 0 0

Ich verstehe aus dem Herumlesen, dass ich die data=journalOption für mein Mount verwenden möchte, da dies den besten Schutz gegen Datenkorruption bietet. In der Manpage für bestimmte ext3-Optionen wird mountjedoch Folgendes zur Rückschreiboption angegeben:

Die Datenreihenfolge bleibt nicht erhalten - Daten können in das Hauptdateisystem geschrieben werden, nachdem ihre Metadaten in das Journal geschrieben wurden.
Es wird gemunkelt, dass dies die Option mit dem höchsten Durchsatz ist. Es garantiert die Integrität des internen Dateisystems , kann jedoch zulassen, dass alte Daten nach einem Absturz und einer Journalwiederherstellung in Dateien angezeigt werden.

Ich bin sehr verwirrt darüber - die Manpage scheint nahezulegen, dass ich für die Dateisystemintegrität eine data=writebackOption angeben möchte, mountaber die meisten anderen Referenzen, die ich gefunden habe (einschließlich einiger veröffentlichter Bücher über eingebettetes Linux), schlagen vor, dass ich sie verwenden sollte data=journal. Was wäre der beste Ansatz für mich? Die Schreibgeschwindigkeit ist überhaupt kein Problem - die Datenintegrität ist es jedoch.

Mathematiker1975
quelle
1
Bietet eine Anleitung zu data = journal . Ich würde das gerne für alles andere verwenden, da RH nur diese Art der Bestellung unterstützt.
slm
2
@sim eigentlich heißt es data=ordered: p
sourcejedi

Antworten:

7

Lassen Sie sich nicht von der Tatsache irreführen, dass nur writebackerwähnt wird internal filesystem integrity.
Mit ext3, ob Sie verwenden journal, orderedoder writeback, Dateisystem - Metadaten sind immer gelagert und dass Mittel interne Dateisystemintegrität.

Mit den Datenmodi können Sie steuern, wie normale Daten in das Dateisystem geschrieben werden.
Im writebackModus werden Metadatenänderungen zuerst im Journal aufgezeichnet und ein Festschreibungsblock wird geschrieben. Nach der Aktualisierung des Journals können Metadaten und Datenausschreibungen fortgesetzt werden. data=writeback kann ein schwerwiegendes Sicherheitsrisiko darstellen: Wenn das System beim Anhängen an eine Datei abstürzt, nachdem die Metadaten festgeschrieben (und zusätzliche Datenblöcke zugewiesen) wurden, aber bevor die Daten geschrieben wurden (Datenblöcke mit neuen Daten überschrieben), dann nach dem Journal Die Wiederherstellung dieser Datei kann Blöcke enthalten, die mit Daten aus zuvor gelöschten Dateien gefüllt sind - von jedem Benutzer 1 .

Wenn also die Datenintegrität Ihr Hauptanliegen ist und Geschwindigkeit keine Rolle spielt, data=journalist der richtige Weg.

don_crissti
quelle
4

Wie Sie bereits bemerkt haben, können Sie Ihr Dateisystem nicht vor Abstürzen jeglicher Art schützen.

Was du tun kannst:

  1. Auf der Softwareseite können Sie fdatawrites nach jeder wichtigen Operation verwenden (siehe diesen Beitrag von Theodore T'so, einem der Hauptentwickler von Linux FS Kernel. Es ist immer noch wahr. Es gibt auch diesen über einen größeren Datenverlust, der in älteren Versionen von ext4 verborgen ist).
  2. Reduzieren Sie das Commit-Intervall auf 1 Sekunde ( commit = 1 ) (siehe diesen Artikel von LWN, es geht um ext4, enthält aber wirklich nützliche Informationen zu ext3). NB: Es sollte nicht benötigt werden, mit Synchronisierung .
  3. Wie RHEL doc von sim sagte, verwende * data_err = abort * und data = ordered
  4. noatime reduziert unnötige Operationen auf dem Dateisystem
  5. Wie Sie bereits bemerkt haben, ist barriere = 1 ein guter Weg, um Datenverluste zu minimieren (siehe diesen Beitrag ).
  6. Die Synchronisierung ist natürlich auch eine der Optionen "Ich möchte meine Daten nicht verlieren".

Am Ende können die Optionen für die paranoische Montage so aussehen:

auto,exec,relatime,sync,barrier=1,commit=1,data=ordered,data_err=abort,noatime,

Darüber hinaus können Sie die Datenintegrität bei jedem Start mit einem automatischen Fsck sicherstellen.

Coren
quelle
2

Versuchen Sie zu ändern, welchen Teil der Manpage Sie einbetten:

Schreib zurück

Die Datenreihenfolge bleibt nicht erhalten - Daten können in das Hauptdateisystem geschrieben werden, nachdem ihre Metadaten in das Journal geschrieben wurden. Es wird gemunkelt, dass dies die Option mit dem höchsten Durchsatz ist. Es garantiert die Integrität des internen Dateisystems, kann jedoch zulassen, dass alte Daten nach einem Absturz und einer Journalwiederherstellung in Dateien angezeigt werden.

Wie don_crissti betonte, haben die anderen Modi kein "jedoch".

depquid
quelle