Welche Chance hat ZFS, in einem konsistenten Zustand zu sein (auch wenn einige Daten verloren gegangen sind) und der Pool beim Neustart verwendbar / lesbar ist?
ZFS funktioniert wie ein Transaktionsdatenbank- Verwaltungssystem, da alte Daten beim Aktualisieren nicht überschrieben werden, wie dies bei herkömmlichen Dateisystemen der Fall ist. Stattdessen werden die neuen Daten an anderer Stelle auf die Festplatte geschrieben, dann werden die Metadatenstrukturen des Dateisystems so aktualisiert, dass sie auf die neuen Daten verweisen. Erst dann wird der Block der alten Daten für die Wiederverwendung durch das Dateisystem freigegeben. Auf diese Weise bleibt bei einem plötzlichen Stromausfall die alte Kopie der Daten bestehen, wenn die neuen Datenaktualisierungen nicht zu 100% auf permanenten Speicherplatz festgelegt sind. Sie haben nicht die Hälfte des Blocks ersetzt oder ähnliches, wodurch Daten beschädigt werden.
Darüber hinaus verwendet ZFS ein ausgefeiltes Prüfsummenschema, mit dem das Dateisystem falsch geschriebene oder beschädigte Daten erkennen kann.
Wenn Sie ZFS mit redundantem Speicher verwenden, kann dieses Dateisystem bei der Reparatur des Dateisystems zwischen zwei oder mehr redundanten Kopien der Daten wählen. Wenn Sie also zwei Kopien eines Blocks haben und nur eine davon mit der gespeicherten Prüfsumme übereinstimmt, weiß das Dateisystem, dass es die fehlerhaften Kopien mit der leeren reparieren soll.
Diese Reparaturen können im zfs scrub
laufenden Betrieb ausgeführt werden, wenn Sie versuchen, die Daten zu lesen oder zu ändern. Daraufhin erkennt das Dateisystem möglicherweise, dass die angeforderten Blöcke nicht vollständig koscher sind - oder während einer Operation. Es ist üblich, einen Scrub so zu planen, dass er regelmäßig in ZFS-Pools ausgeführt wird, auf die selten auf Dateien zugegriffen wird, da das Dateisystem sonst keinen Hardware-Datenverlust im normalen Betriebsablauf feststellen würde. Es ist üblich, dass ZFS-Pools, die auf zweifelhafter Hardware ausgeführt werden, nach jedem Scrubben eine bestimmte Anzahl fester Blöcke anzeigen.
Das Scrubben ist ein bisschen wie fsck
bei anderen Dateisystemen vom Typ Unix, nur dass dies online geschieht, während das Dateisystem eingehängt und verwendbar ist. Dies geschieht im Hintergrund und nur, wenn sich der Pool sonst im Leerlauf befindet. Außerdem fsck
prüfen Implementierungen normalerweise nur Metadaten und nicht Daten, sondern beide ZFS-Prüfsummen und können somit Fehler in beiden erkennen. Wenn diese Integritätsmechanismen entscheiden, dass einer der Blöcke ersetzt werden muss, kann er anhand der Prüfsummen entscheiden, mit welcher Kopie die beschädigten Kopien ersetzt werden sollen.
Angenommen, die Speichermedien, Hardware und Software funktionieren noch zuverlässig / ordnungsgemäß. Was muss sonst noch schief gegangen sein, damit ein Pool verloren geht?
Meines Wissens gibt es keinen solchen Fall. Entweder ist eines der drei Dinge, die Sie erwähnen, fehlgeschlagen, oder ZFS wird den Pool bereitstellen und aus ihm lesen.
Unzureichende Redundanz + Festplattenfehler (oder andere schwerwiegende Hardwareprobleme) ist ein Fall
Ja, obwohl dies in einem subtileren Fall passieren kann, als ich denke, dass Sie darüber nachdenken.
Nehmen Sie einen einfachen 2-Wege-Spiegel. Ich denke, Sie denken darüber nach, dass eine der Festplatten physisch vom Computer entfernt oder zumindest aus irgendeinem Grund nicht zugänglich ist. Stellen Sie sich jedoch vor, dass der Sektor 12345 auf beiden Festplatten beschädigt ist. Dann können Ihnen alle intelligenten Prüfsummen und Redundanzen in ZFS nicht helfen: Beide Kopien sind beschädigt, sodass der gesamte Block, der diesen Sektor enthält, nicht gelesen werden kann.
Aber hier ist der Clou: weil ZFS ist sowohl ein Dateisystem und ein Volume - Manager - im Gegensatz zu peitschen-up wie Hardware - RAID + ext4 oder LVM2 + ext4 - ein zpool status
Befehl werden Ihnen sagen, welche Datei unwiederbringlich beschädigt wird. Wenn Sie diese Datei entfernen, kehrt der Pool sofort in einen unbeschädigten Zustand zurück. Das Problem wurde behoben. Die Lash-ups, die das Dateisystem von den RAID- und LVM-Komponenten trennen, können dies nicht tun.
Welche Situationen müssen entstehen, bevor es nicht möglich ist, und was muss geschehen, um sie entstehen zu lassen?
Der einzige Fall, den ich kenne, ist so etwas wie das obige Beispiel, bei dem die Datenbeschädigung die redundanten Kopien der Metadaten der Schlüsseldateisysteme beschädigt hat, die ZFS nicht lesen kann.
Aus diesem Grund mit heutigen extrem großen Festplatten - 100 Billionen Bits! - Ich empfehle, dass Sie ZFS (oder ein anderes RAID- oder LVM-System) mit mindestens zwei Redundanzen konfigurieren. In ZFS bedeutet dies raidz2, 3-Wege-Spiegel oder höher.
Allerdings speichert ZFS normalerweise weitere Kopien aller Metadaten des Dateisystems, die über die normalen Redundanzwerte für reguläre Dateidaten hinausgehen. Ein 2-Wege-Spiegel speichert beispielsweise 2 Kopien der regulären Benutzerdaten, aber 4 Kopien aller Metadaten. Sie können dies für die Leistung zurückrufen, aber Sie können es nicht vollständig deaktivieren.
Es gibt ein Kapitel im ZFS-Handbuch über ZFS-Fehlermodi, das Sie möglicherweise aufklären werden.