Gewährleistet BTRFS Datenkonsistenz bei Stromausfällen?

11

Wie ZFS ausschließlich feststellt ,ZFS gilt als unverwundbar ZFS akzeptiert, dass es möglicherweise anfällig für Stromausfälle ist.

Ich konnte eine solche Aussage für BTRFS nicht finden. Ist es zwischen Stromausfällen haltbar (oder geplant / geplant)?

Zeremonie
quelle
Lies erneut. "Wenn Ihr Pool durch fehlerhafte Hardware oder einen Stromausfall beschädigt wird, lesen Sie Reparieren des Pool-weiten ZFS-Speicherschadens." (..) Versuch , den Pool mit dem zpool clear -F Befehl wiederherzustellen
Michael D.
Sie sagen also "ZFS garantiert keine Datenkonsistenz, es versucht nur , sie wiederherzustellen"?
Zeremonie
Ja. Es gibt mehrere Caches, einen eingebauten Festplatten-Cache, Betriebssystem-Caches / Puffer. Irgendwann gibt es ein syncoder ein, flushdas Caches auf die Festplatte schreibt, oder nicht während eines Stromausfalls, dass Daten verloren gehen. ZFS funktioniert möglicherweise einwandfrei, wenn die Festplatte fehlerfrei ist und keine Stromausfälle vorliegen (oder eine USV angeschlossen ist, um den Computer bei einem Ausfall ordnungsgemäß herunterzufahren). Was Sie über FAT32 oder so nicht sagen können.
Michael D.
2
Datenverlust ist kein Problem, da es eine natürliche Folge ist, wenn ein Stromausfall auftritt, aber Datenkonsistenz ist in meinem Fall ein Problem. Ein Dateisystem kann unter solch extremen Bedingungen Daten verlieren, sollte jedoch keine inkonsistenten Daten auf der Festplatte verursachen. Ich benötige kontinuierliche Snapshots, damit ich mit BTRFS weitermachen kann. NILFS2 ist in meinem Fall jedoch die nächstgelegene Option.
Zeremonie
1
Ich habe die Frage im #btrfs IRC gestellt, sie sagten, should be ok if your hw isn't "buggy"wo nicht "Buggy" bedeutet your hw has correct flush/barrier semantics. Ich habe im IRC einen Link zu dieser Frage gepostet, hoffentlich würde sich jemand Zeit nehmen, um dies zu erläutern. aber jetzt ist es das.
Hi-Angel

Antworten:

5

Ich habe die Frage im #btrfs IRC gestellt, sie sagten, should be ok if your hw isn't "buggy"wo nicht "Buggy" bedeutet your hw has correct flush/barrier semantics.

TL; DR: Dies bedeutet, dass btrfs ähnlich wie ZFS vor Datenbeschädigung aufgrund von Stromausfall geschützt ist.

Hier ist der Grund: Die allgemeine Idee hinter ZFS und btrfs ist ähnlich. Beide verwenden Merkle-Bäume als Datenstruktur . Für Schreibvorgänge müssen möglicherweise mehrere Blöcke auf den Datenträgern aktualisiert werden. Das Dateisystem behandelt dies, indem es die neuen Daten in leere Blöcke schreibt (auch wenn eine vorhandene Datei geändert wird, sodass keine Blöcke geändert werden müssen, die den alten Status widerspiegeln) und einen neuen aktualisierten Baum erstellt. Sobald das ganze schwere Heben abgeschlossen ist und Daten + der aktualisierte Baum auf die Festplatte geschrieben wurden, wird der Kopfzeiger auf den neuen Baum aktualisiert, wodurch die Änderung sichtbar wird.

So sollen sich die Dinge beim Schreiben in eine Datei verhalten:

  1. Schreiben Sie Daten in freie Blöcke auf der Festplatte.
  2. Erstellen Sie eine Kopie des Merkle-Baums * und aktualisieren Sie ihn gemäß den in (1) beschriebenen Änderungen.
  3. Bitten Sie die Hardware, Daten auf die Festplatte zu leeren. Die Hardware schreibt alle ausstehenden Daten.
  4. Kopfzeiger auf neuen Merkle-Baum aktualisieren.
  5. Kostenlose alte Blöcke, die nicht mehr benötigt werden.

Wenn nach (4) die Stromversorgung unterbrochen wird, ist die Transaktion abgeschlossen. Wenn während der Schritte (1) bis (3) die Stromversorgung unterbrochen wird, zeigt das Dateisystem den alten Status an (die in Schritt (1) geschriebenen Daten gehen verloren, aber das Dateisystem ist konsistent). Beachten Sie, dass nicht nach Dateisystemfehlern gesucht werden muss, was bedeutet, dass das Dateisystem sofort verfügbar ist, was ein großer Vorteil ist (das Überprüfen großer Dateisysteme kann sehr lange dauern!).

Hier ist ein Beispiel, wie mit "fehlerhafter" Hardware etwas schief gehen kann:

  1. Schreiben Sie Daten in freie Blöcke auf der Festplatte.
  2. Erstellen Sie eine Kopie des Merkle-Baums * und aktualisieren Sie ihn gemäß den in (1) beschriebenen Änderungen.
  3. Bitten Sie die Hardware, Daten auf die Festplatte zu leeren. Die Hardware bestätigt den Abschluss, spült jedoch nicht vollständig (z. B. verbleiben die Daten möglicherweise im Rückschreibcache der Festplatte).
  4. Kopfzeiger auf neuen Merkle-Baum aktualisieren. Diese Daten werden vor anderen ausstehenden Daten auf die Festplatte geschrieben (z. B. weil sich der Kopf der Festplatte zufällig an der richtigen Stelle befindet).
  5. In den Schritten (1) und (2) geschriebene Daten werden auf die Festplatte geschrieben.
  6. Kostenlose alte Blöcke, die nicht mehr benötigt werden.

Das Dateisystem wird inkonsistent, wenn zwischen (4) und (5) oder während der Ausführung von Schritt (5) die Stromversorgung unterbrochen wird. Infolgedessen werden der Merkle-Baum und / oder die Daten möglicherweise nur teilweise geschrieben, wodurch das Dateisystem inkonsistent wird.

In der Praxis müssen Sie bei der Verwendung von RAID-Controllern besonders vorsichtig sein . Normalerweise deaktivieren sie die Rückschreibcaches auf der Festplatte und verwenden stattdessen ihren eigenen Rückschreibcache. Hier gibt es zwei Möglichkeiten, wie etwas schief gehen kann:

* Ich vereinfache die Dinge hier. Es ist eigentlich nicht notwendig, den gesamten Baum zu kopieren. Es müssen nur die Teile hinzugefügt werden, die geändert wurden. Die verbleibenden Teile können zwischen dem alten und dem neuen Baum geteilt werden .

Martin
quelle
Vielen Dank für diese nette Erklärung. Für alle Ansprüche, einschließlich IRC-Konversation, ist jedoch ein Zitat erforderlich. Dann wird Ihre Antwort akzeptiert.
Zeremonie
In Bezug auf die IRC-Protokolle bezog ich mich hier auf den Kommentar von @ Hi-Angel. Vielleicht kann er eine Referenz liefern? Ich habe jedoch noch ein paar Verweise auf die anderen Teile hinzugefügt.
Martin
BTRFS verwendet keine Merkle-Bäume, sondern B-Bäume (daher 'B-TRee FileSystem'), und Ihre Fehlerbeispiele erfordern, dass Schreibbarrieren von der Hardware nicht ordnungsgemäß implementiert werden (was heutzutage eher ungewöhnlich ist). . Ansonsten gute Antwort.
Austin Hemmelgarn
Die von btrfs verwendeten Bäume sind eigentlich sowohl B-Bäume (bei dieser Eigenschaft geht es um die "Form" des Baums und die Tatsache, dass sie sich selbst ausgleichen) als auch Hash- / Merkle-Bäume (Blätter enthalten den Hash einiger Daten, Knoten enthalten die Hasch ihrer Kinder, so dass sich jede Veränderung bis zur Wurzel ausbreitet). Durch die Möglichkeit, diese Hashes zu überprüfen, können btrfs und ZFS beschädigte Daten erkennen (und sie von einer anderen Festplatte lesen, wenn sie im "Spiegelungsmodus" verwendet werden).
Martin