Dateisystem der Zukunft?

Neun Argumente für ZFS

02.11.2012 von Heiko Wüst
Was genau das Open-Source-Dateisystem ZFS ist und was ein neues Dateisystem überhaupt bringen soll, darüber herrscht nach über zehn Jahren Entwicklungszeit noch viel Unklarheit.

Das fängt schon mit der Abkürzung an, die zeitweise für "Zettabyte File System" stand, aber mittlerweile nur noch ein Pseudo-Akronym ist. Der erste ZFS-Prototyp wurde im Oktober 2001 erstellt, schon 2005 wurde er in die Entwicklung des damaligen Sun-Betriebssystems Solaris integriert. Technisch gesehen ist ZFS eine Kombination aus Dateisystem und einem logischen Volume-Manager, die eine praktisch unlimitierte Speicherkapazität, den prüfsummenbasierten Schutz vor Übertragungsfehlern, die Integration von Snapshots, ein kontinuierliche Überprüfung der Datenintegrität und automatische Reparatur von korrupten Daten beinhaltet.

Deutlicher wird die Bedeutung von ZFS für die Storage-Industrie aber vielleicht, wenn man darstellt, was das Dateisystem vor anderen Dateisystemen auszeichnet. Und das sind die folgenden neun Punkte:

128-bit statt 64-bit

Im Gegensatz zu anderen Dateisystemen, die gewöhnlich 64 Bit aufweisen, ist ZFS ein 128-Bit-Dateisystem. 2004 hatte ZFS-Miterfinder Jeff Bonwick erkannt, dass die Grenzen von 64-Bit-Dateisystemen nach Moores Gesetz nur noch 14 Verdoppelungen der Datenmenge entfernt seien. In vielen Unternehmen verdoppelt sich die Datenmenge mittlerweile jährlich; 64-Bit-Dateisysteme stoßen dadurch in vielen größeren Speicherumgebungen an ihre Grenze. In ein 128-Bit-Dateisystem kann man schlichtweg viel mehr Daten speichern - so viele, dass die reale Grenzen eher darin besteht, die nötige Energie für den Strom aufzubringen. Bonwick wird mit den Worten zitiert, man könne einen 128-Bit-Speicher-Pool nicht füllen, "ohne die Ozeane zu verdampfen." Es gibt in der Praxis kein Limit für Dateigröße oder die Anzahl an Dateien. Daher sind hochskalierbare ZFS-basierte Systeme oft die erste Wahl für Cloud-Storage- oder Hosting-Anbieter sowie in virtuellen Umgebungen. Wenn Installationen in den Petabyte-Bereich gehen, wird es fast alternativlos, ein 128-Bit-Dateisystem zu wählen.

End-to-End-Prüfsummen statt Datenkorruption

Keines der proprietären Dateisysteme großer Hersteller bietet vollkommenen Schutz gegen den Verlust von Daten. Alle Systeme leiden unter schleichender Datenkorruption (englisch "Silent Data Corruption"). Viele Gründe dafür sind alltäglich: Bootstorms, doppelte Software, Softwarefragmente in der Registry, Überschreiben von Treibern, fehlerhafte Motherboards, Controllerkarten und Firmware können die Ursache sein. Weitere Punkte sind elektromagnetische Spannungsspitzen, Gamma-Strahlung und Phantom-Schreibvorgänge, also Fälle, in denen die Daten nie tatsächlich geschrieben wurden, aber die Festplatte bereits Vollzug meldet. Diese Form der Datenkorruption führt dazu, dass Informationen unwiederbringlich verloren gehen. Traditionelle Dateisysteme bekämpfen Datenkorruption mit Prüfsummen mit einer Größe von 8 Bit, speichern diese jedoch im entsprechenden Datenblock. Damit können diese zwar Bit-Fäule ("Bit Rot") erkennen, nicht jedoch Phantom-Schreibvorgänge, falsch adressierte Schreibvorgänge, DMA Paritätsfehler, Treiberbugs oder zufälliges Überschreiben.

ZFS bietet dagegen End-to-End-Prüfsummen, die dafür sorgen, dass jedes einzelne Bit im gesamten Dateisystem stimmt oder andernfalls wieder automatisiert wiederhergestellt wird. ZFS bildet Prüfsummen über Metadaten und Nutzdaten ab und speichert diese Informationen im Gegensatz zu traditionellen Systemen in einem extra Block, dem sogenannten "Parent Block" ab. Die Prüfsummen werden hierarchisch in einem Merkle-Baum erstellt bis hin zum letzten Block, dem sogenannten "Überblock". Auf diese Weise wird die Datenintegrität konsistent über alle Informationen sichergestellt.

Copy-On-Write statt batteriegepufferter Speicher (NVRAM)

Eng mit dem vorangegangenen Thema der Datenintegrität hängt auch das Thema zusammen, wie Informationen geschrieben werden. Herkömmliche Storage-Systeme nutzen das Read-Write-Modify-Verfahren. Das heißt, originale Blöcke werden während einer Schreiboperation mit neuen Daten überschrieben. Ein klassisches "RAID-5 Write Hole" entsteht, wenn das System zwischen der Änderung von Daten und der Neuberechnung der Paritätsdaten ausfällt. Die Folge sind falsche Paritätsdaten. Wenn jemals die Originaldaten mit diesen falschen Daten wiederhergestellt werden sollen, kommen komplett unbrauchbare Daten heraus. Fehler werden immer erst erkannt, wenn die Daten bereits verloren sind. Dagegen helfen soll in herkömmlichen Systemen ein batteriegepufferter Speicher (NVRAM). Er hilft gegen Stromausfälle, aber nicht gegen Systemausfälle aus anderen Gründen.

ZFS vermeidet dieses Problem von vornherein, indem es nie die ursprünglichen mit den neuen Daten überschreibt. Dieses Verfahren nennt sich Copy-On-Write. Stattdessen werden die geänderten Daten neu allokiert und der gesamte Prüfsummenbaum neu berechnet. Auf diese Weise sind Daten in ZFS stets konsistent und es wird kein NVRAM in der Hardware benötigt, das die Speichermedien teurer macht.

Für schnelleres Schreiben kommt bei ZFS das "Copy-On-Write Transactional I/O Model" zu Hilfe. Wenn aktive durch neue Daten ersetzt werden sollen, wird ein neuer Block zugewiesen. Die Metadaten als Referenz des Originals ändern sich, um auf den neuen Block zu verweisen. Als Resultat sind die meisten I/Os in ZFS sequentiell und deshalb schneller zu finden. Außerdem nutzt ZFS ein Log, in dem alle Schreiboperationen gelistet sind. Im Falle eines Fehlers wird dieses Log genutzt, um die befallenen Blöcke ohne manuelle Eingriffe wiederherzustellen.

ARC (Adaptive Replacement Cache) statt Tiered Storage

Organisationen, die viel Zeit und Geld für ihre Storage-Infrastruktur aufwenden, nutzen heute Tiered Storage. Tiered Storage soll Daten, die nicht regelmäßig oder schon lange nicht mehr genutzt werden, von den teuren schnellen auf günstige langsamer Speichermedien verschieben. Während Tiered Storage in herkömmlichen Speicherwelten ein wichtiges Tool zur Kostenreduzierung und Performance-Steigerung ist, ist das Verschieben von Daten im ZFS Dateisystem gar nicht erst notwendig. Denn ein weiterer Punkt, der ZFS in der Speicherwelt einzigartig macht, ist die Nutzung des "Adaptive Replacement Cache" (ARC), um die Lesegeschwindigkeit zu erhöhen.

Der Caching Algorithmus identifiziert neben kürzlich gelöschten Blöcken auch seit langem nicht benutzte Blöcke oder die am wenigsten genutzte Blöcke (LRU - Least Recently Used / LFU - Least Frequently Used). Der entscheidende Unterschied zwischen Caching und Tiering ist, dass im Tiering die Daten verschoben und auf der Quelle gelöscht werden, beim Caching aber auf der Quelle erhalten bleiben. Wenn ein schnelles Medium wie SSD für den Cache genutzt wird, können Applikationen die Daten direkt vom Cache holen, ohne erst auf den Speicher zurückgreifen zu müssen. Mit ARC bleibt die Cache-Rate auch bei variierenden I/Os konstant hoch.

Speicher-Pool statt Volume-Manager und Partitionierung

Traditionelle Dateisysteme organisieren Festplatten in Partitionen und Volumes. Diese sind vergleichsweise starr. Es ist eine nervige und zeitraubende Aufgabe für Administratoren, Systeme nachts und am Wochendende zu erweitern und Partitionen zu verändern, wenn Speicher erweitert oder neu organisiert werden. ZFS geht einen anderen Weg: Es bietet eine neue Art der Abstraktion, genannt "Storagepool". Der Storagepool kombiniert alle Festplatten zu einer Einheit. Diesen elastischen Storagepool und die darin enthaltenen dynamischen "logischen" Partitionen zu verwalten, ist deutlich einfacher, als sich an den physischen Datenträgern zu orientieren.

Dies ermöglicht es Administratoren, Platten ganz nach Bedarf zum Storagepool und den Dateisystemen hinzuzufügen und bei laufenden Systemen Speicherplatz zu schaffen, wenn er benötigt wird. Dies unterstützt unter anderem auch das Thin Provisioning von Speicherplatz in virtuellen Umgebungen.

RAID-Z in der Software statt RAID-Controller

Herkömmliche Storage-Systeme benötigen RAID-Controller und Volume Manager. Damit verbunden sind Fehlerquellen wie Bugs in der RAID Controller Firmware oder im Volume Manager ebenso wie defekte Controller-Hardware. Bei ZFS ist eine Raid-Funktionalität dagegen in der Software bereits verankert. RAID-Z (oder RAID-Z1) funktioniert ähnlich wie RAID-5 und bietet einfache Parität, verhindert aber dank Copy-On-Write Synchronisationsprobleme. RAID-Z2 bietet die gleiche Redundanz wie RAID-6 (zweifache Parität). RAID-Z3 sogar dreifache Parität. Wie oben beschrieben erkennt ZFS Datenkorruption anhand eines End-to-End-Prüfsummenbaums und überschreibt keine Daten. Erkannte Fehler "heilt" ZFS automatisch, indem es den fehlerhaften Block durch eine konsistente Kopie ersetzt. Ein weiterer Vorteil: Raid-Z kann zwischen belegten und freien Blöcken unterscheiden. Bei der Wiederherstellung muss das System also nur den belegten Speicherplatz rekonstruieren, was Zeit spart.

Hier zeigt sich auch, dass ZFS über das bisherige Verständnis eines Dateisystems hinausgeht. Denn herkömmliche Storage-Architekturen zur Verwaltung des Speichers bestehen aus drei voneinander unabhängigen Komponenten: Storage-Management, Volume-Management und Dateisystem. Jede dieser drei Ebenen birgt die Gefahr, dass Daten korrumpiert werden können. Da die Ebenen unabhängig arbeiten, kann die jeweils andere Ebene diese Datenkorruption nicht erkennen. So kann das Dateisystem, welches auf einen defekten Datenblock auf der Festplatte zugreift, diesen Defekt nicht erkennen, sondern dieser wird erst von der Applikation registriert, die den Datenblock nicht einlesen kann. ZFS dagegen integriert den Volume Manager und RAID-Controller in das Dateisystem und bringt so drei unabhängige Ebenen unter einen Hut, um Datenintegrität zu garantieren.

Deduplizierung statt Mehrfachablage

Mehrfachablage von Daten gehört zu den Selbstverständlichkeiten gängiger File-Systeme. Unternehmen, die Speicherplatz einsparen wollen, indem Sie doppelte Daten ausfindig machen, benötigen ein zusätzliches Produkt zur Deduplizierung. ZFS hat dagegen seit 2009 unlimitierte Deduplizierung eingebaut. Administratoren können Datenvolumen für inline Deduplizierung konfigurieren. Sie erhalten so nicht nur mehr Kapazität, sondern reduzieren auch die Zahl der I/Os, wenn Daten hochgradig redundant sind. Den gleichen Effekt hat Kompression, der bei ZFS ebenfalls enthalten ist - und zwar auf Block-, nicht auf Dateiebene, wie bei den meisten anderen Produkten.

Volle Datenhistorie statt limitierter Snapshots

Herkömmliche Speichersysteme bieten nur eine begrenzte Zahl von Snapshots. Administratoren müssen sich genau überlegen, wie sie diese limitierte Zahl verwenden und Systeme so konfigurieren, dass sie möglichst sinnvolle Wiederherstellungspunkte haben. In ZFS können Snapshots dagegen unbeschränkt erstellt werden. Denn aufgrund des Copy-On-Write-Verfahrens und dem Log aller Schreiboperationen sind die älteren Daten weiter vorhanden. Die Snapshots lassen sich sowohl archivieren als auch mounten.

Unified Storage statt Speicherwildwuchs

Die meisten heutigen Speicherumgebungen sind historisch gewachsen und setzen sich aus einem Sammelsurium von Hardware und unterschiedlichen Storage-Silos zusammen. Fast alle größeren Storage-Appliances sind proprietär und binden die Software an die Hardware. Die Kunden zahlen dadurch mehr für die Hardware als diese eigentlich wert ist. Und auch Zusatzfunktionen wie Snapshots, Tiering oder Deduplizierung kosten in der Regel extra.

ZFS basiert dagegen auf einem Open-Source-Unix-Fundament und ist unter der Common Development and Distribution License (CDDL) lizensiert. ZFS-basierende OpenStorage-Produkte erlauben die Verwendung von Standardhardware statt teurer Produkte eines bestimmten Storage-Herstellers. Seit der Einstellung des OpenSolaris-Projektes wird die Entwicklung von ZFS im Illumos-Projekt fortgeführt. Die Hauptbeitragenden sind Nexenta, Joyent, Everycity und Reliant.

Statt Aufpreis für Enterprise-Features zu bezahlen, sind diese in ZFS standardmäßig enthalten. Vorhandene proprietäre Speichereinheiten lassen sich oft mit in die Speicherpools integriert werden. Auf diese Weise lässt sich auch ein wirklich einheitliche Speicherumgebung ("Unified Storage") aufbauen und der Speicherwildwuchs eindämmen. Gängige ZFS-Produkte können fast erstens jede Hardware in den Pool einbinden (von kostengünstigen JBODs bis hin zu leistungsstarken SSD), unterstützen zweitens sowohl SAN als auch NAS und drittens bieten sie Datenzugriff über eine große Bandbreite von Protokollen, beispielsweise CIFS, NFS, iSCSI, HTTP, FTP, WebDAV sowie Fibre Channel. (tc)