Was ist ZFS

Das ZFS-Dateisystem ist ein revolutionäres neues Dateisystem, das grundlegend die Art ändert, wie Dateisysteme verwaltet werden. Drawing ZFS bietet Funktionen und Features, welche in Dateisysteme die heutzutage eingesetzt werden, nicht verfügbar sind. ZFS ist robust, skalierbar und einfach zu verwalten.

ZFS Pooled Storage

ZFS verwaltet den physischen Speicher in sogenannten Pools. Früher (im Sinn von anderen Dateisystemen) wurden die Dateisysteme auf ein einzelnes Datenträgerlaufwerk aufgesetzt. Um später mehrere Geräte adressieren zu können, wurden Volume Manager eingeführt, welche prinzipiell dem darüberliegenden Dateisystem ein einzelnes Gerät vorgaukelt. Somit musste man nichts am Filesystem Design ändern um mehrere Geräte für 1 Filesystem zu unterstützen. Dadurch wurde alles komplexer und behindert auch die Weiterentwicklung eines Dateisystems, da dem Filesystem der pyhsikalische Zugriff auf Datenträger und Dateien fehlt.

ZFS eliminiert diese Porbleme alle zusammen. Anstatt den Benutzer zu zwingen Virtuelle Speicherverbünde zu erstellen, verbindet ZFS alle Datenträger zu einem Speicherpool zusammen. Der Speicherpool beschreibt die Physikalischen Eigenschaften des Speichers und agiert als ein beliebiger Datenspeicher, auf dessen Rücken man wiederum ein anderes Dateisystem erstellen kann. Datenredundanz, Speicherlayout und Geräte werden nach oben hin nicht abstrahiert und dem System geheimgehalten.
Dateisysteme werden nicht mehr auf einzelne Geräte beschränkt, Geräte können nun ihren Speicherplatz mit allen darüberliegenden Dateisystemen teilen. Als User muss man sich keine Sorgen mehr darüber machen, wie groß ein Dateisystem sein muss, es wächst einfach mit, bis die Grenze oder das Quota des Pools erreicht ist. Falls ein weiteres Speichermodul hinzugefügt worden ist, können alle Dateisysteme instantan ohne weiteres Zutun eines Admins diesen Speicher benützen.
Abstrakter gesehen, funktioniert ein ZFS Pool wie das Virtual Memory System. Wenn ein weiter DIMM hinzugefügt wird, musst man nicht im Betriebsystem mittels Befehle erzwingen, dass der neue Speicher verwendet wird. Das Betriebsystem addressiert den neunen Speicher einfach den Prozessen, welchen ihn benötigen. Alle Prozesse im System können automatisch den neuen Speicher nutzen, so auch im ZFS.

Transaktions Semantik in ZFS

ZFS ist ein transaktionales Dateisystem, was bedeutet, dass dessen Zustand immer konsistent auf der Festplatte geschrieben steht. Somit ist ZFS ein robustes Dateisystem.

Traditionelle Systeme überschreiben oft Daten an Ort und Stelle. Das würde bedeuten, fällt beispielsweise der Strom zwischen dem Zeitpunkt, während der Datenblock zugeordnet wird und die Referenz gespeichert wird aus, befindet sich das Dateisystem in einem inkonsistenten Zustand, da der Block bereits zugeordnet wurde, aber die Referenz noch nicht gesetzt werden konnte.

Aus genau dieser Problematik wurde fsck entwickelt. Dieses Tool versucht die entstanden Fehler bestmöglich zu reparieren. Die Nachteile von einem inkonsistenten Dateisystem sind jedoch gravierend. Bei einer großen Datenmenge kann der fsck schon beim Boot einige Minuten beanspruchen. Dies ist natürlich bei Hosting oder Servern, welche eine hohe Uptime halten sollten ein echtes Problem. Nicht all zu selten kann sich auch ein geplanter Reboot mit einer Downtime von weniger als 3 Minuten auf Stunden verlängern. Dies ärgert nicht nur den Sysadmin, sondern auch die Kunden/Mitarbeiter. Zudem gibt es nach dem stundenlangen Warten nicht einmal die Garantie, dass alles gut gegangen ist.

Später wurde dann auch noch *Journaling* eingeführt.
Bei Journaling werden Schreib-Aktionen in einem eigenen "Log" (Journal) mitprotokolliert. Durch diesen Schreiblog kann man alle Schritte bis zum Crash nachspielen und somit die Konsistenz wiederherstellen. Dieses Verfahren bringt einen unnötigen Overhead mit sich, weil die Daten zweimal geschrieben werden, speziell bei Multithreaded-Zugriff kann es dazu führen, dass der Journal die Schreiboperationen künstlich verlangsamt um mithalten zu können.

ZFS ist genauso wie BTRFS ein 'Copy on Write'-Dateisystem . Hier mein Artikel über BTRFS. ZFS hat allerdings Robustheit von Beginn an bei der Entwicklung berücksichtig und gilt als Markenzeichen dieses Systems. Bei ZFS werden nie Datenblöcke überschrieben oder direkt bearbeitet. Schreiboperationen werden als Commits behandelt, und zwar nach dem 'Alles oder Nichts'-Prinzip. Dies bedeutet ein Commit wird vollständig bearbeitet und auf die Platte/n geschrieben oder gar nicht. Falls letzteres Eintritt behandelt die Schicht darüber den Ausnahmefall. Dadurch wird per Design garantiert, dass das Dateisystem nicht inkonsistent werden kann. Dennoch ist zu berücksichtigen, dass sich bei einem Crash die letzten Daten eventuell nicht mehr auf dem Datenträge befinden, aber das Dateisystem selbst trotzdem konsistent bleibt.

Checksummen in ZFS

In ZFS kann man als User selbst entscheiden welchen Checksum-Algorithmus man verwenden möchte. Zudem werden in ZFS Metadaten und Daten mit Checksummen versehen und gespeichert, in Folge dessen kann man auch alle Arten von Fuzzy Bits oder BitRot erkennen.
Traditionelle Dateisysteme können zwar bereits Checksummen, allerdings nur lückenhaft. Da diese Dateisysteme aus der Not heraus durch Volume-Managers und deren Design auf Checksummen im Blocklevel zurückgreifen müssen, kann es passieren, dass ein Block zwar richtig geschrieben wird, aber an der falschen Stelle. Die Überprüfung der Prüfsumme würde "alles ok" ergeben, aber die Daten in einem inkorrekten Zustand lassen.
In ZFS sind Checksummen so generiert und gespeichert, dass man solche Fehler erkennen und reparieren kann. Alle Checksummvergleiche und Datenreparaturen sind auf der Dateisystem-Schicht realisiert und somit tranparent für Applikationen.

Selbstheilende Daten in ZFS

Kling wie Zukunft, ist aber heute schon Realität. In der ZFS Dokumentation wird dieses grandiose Feature nur mit 2 Zeilen beschrieben:

In addition, ZFS provides for self-healing data. ZFS supports storage pools with varying levels of data redundancy. When a bad data block is detected, ZFS fetches the correct data from another redundant copy and repairs the bad data, replacing it with the correct data.

Die ganze Magie ist durch das geniale Design und auch die Verbindung der Parität mit den Checksummen möglich. Was ich bisher unerwähnt gelassen habe ist die Tatsache, dass ZFS auch per Design Parität unterstützt. ZFS heilt die Daten indem es durch einen Checksummen-Fehler aufmerksam wird, dass etwas nicht in Ordnung ist. In einem derartigen Fall greift es auf die Checksummen und Blöcke, die sich in der Parität befinden, zurück und repariert den Fehler on the fly online.

Skalierbarkeit von ZFS

Die Skalierbarkeit ist ein weiteres Design-Element von ZFS . Die Entwickler haben bei jedem Algorithmus Acht gegeben, dass dieser auch mit den anderen gleich skaliert und somit "*Das Dateisystemder der Zukunft *"wird. Es ist ein 128-Bit Dateisystem und erlaubt somit 256 Quadrillionen Zettabytes an Speicher. Es können in einem Verzeichnis bis zu 2^48 (264 Trillionen) Einträge gehalten werden und es exisitiert kein Limit an Subdateisystemen und Subverzeichnissen, welche aufgenommen werden können.

Zur Veranschaulichung: 256 Quadrillionen = 256.000.000.000.000.000.000.000.000 ZB (Zettabytes)
und 1 Zettabyte sind 2^21 Bytes = 1.000.000.000.000.000.000.000 Bytes
Somit alles in allem: 256.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000 Bytes
Umgerechnet in Terrabytes sind das 2.56 × 10^35 Terrabytes ... also sehr sehr viele.

ZFS Snapshots

In ZFS ist es genauso einfach wie in BTRFS Snapshots von Dateisystem zu erstellen, da es, wie schon erwähnt, ein Copy-on-Write-Dateisystem, oder kurz CoW, ist. Somit lassen sich nicht nur vom Dateisystem sondern vom ganzen Pool oder nur von Datasets oder SubVolumes instantan Abbilder erschaffen. Snapshots benötigen dabei keinen weiteren Speicherplatz, allerdings die darauffolgenden Änderungen.

Admins Heaven - ZFS - Admins Himmel

Das Administrieren von ZFS ist durch die Unterstützung des mitgelieferten Tools wirklich einfach, schnell und auf dem LiveSystem verfügbar. Es muss keine lange kryptische Konfigurationsdatei geschrieben werden und mit oft nur einen (oder sehr wenigen Befehlen) kann man den Speicherpool verwalten und Snapshots sowie Datasets erstellen. Weitere Infos über ZFS und das Tool zpool werden bald in einem weiteren Artikel zu lesen sein. "