ZFS ist ein lokales Dateisystem und ein logischer Volume-Manager, der von Sun Microsystems Inc. entwickelt wurde, um die Platzierung, die Speicherung und den Abruf von Daten in Computersystemen der Unternehmensklasse zu steuern und zu kontrollieren.
Das ZFS-Dateisystem und der Volume-Manager zeichnen sich durch Datenintegrität, hohe Skalierbarkeit und eingebaute Speicherfunktionen aus, wie z. B.:
- Replikation – der Prozess der Erstellung eines Replikats (einer Kopie) von etwas.
- Deduplizierung – ein Prozess, der redundante Kopien von Daten eliminiert und den Speicheraufwand reduziert.
- Komprimierung – eine Verringerung der Anzahl der Bits, die zur Darstellung von Daten benötigt werden.
- Snapshots – ein Satz von Referenzmarkierungen für Daten zu einem bestimmten Zeitpunkt.
- Klone – eine identische Kopie von etwas.
- Datenschutz – der Prozess des Schutzes wichtiger Informationen vor Korruption und/oder Verlust.
Geschichte von ZFS
Sun-Ingenieure begannen 2001 mit der Entwicklung von ZFS für das Unix-basierte Solaris-Betriebssystem (OS) des Unternehmens. Im Jahr 2005 veröffentlichte Sun den ZFS-Quellcode unter einer gemeinsamen Entwicklungs- und Vertriebslizenz (CDDL) als Teil des quelloffenen Betriebssystems OpenSolaris. Eine Gemeinschaft von Entwicklern, darunter Vertreter von Sun und anderen Anbietern, arbeitete an Verbesserungen des Open-Source-Codes und portierte ZFS auf weitere Betriebssysteme, darunter FreeBSD, Linux und Mac OS X.
Das Open-Source-Projekt OpenSolaris, zu dem auch ZFS gehörte, wurde beendet, nachdem die Oracle Corp. Sun im Jahr 2010 übernommen und den Begriff ZFS als Marke geschützt hatte. Die Ingenieure von Oracle arbeiten weiterhin an der Verbesserung und Ergänzung von ZFS auf Solaris. Oracle verwendet seinen proprietären ZFS-Code als Grundlage für Oracle Solaris, die Oracle ZFS Storage Appliance und andere Oracle-Technologien.
Eine Entwicklergemeinschaft hat ein neues Open-Source-Projekt namens OpenZFS gestartet, das auf dem ZFS-Quellcode in der letzten Version von OpenSolaris basiert. Die offene Gemeinschaft arbeitet an neuen Funktionen, Verbesserungen und Fehlerkorrekturen am OpenZFS-Code. Zu den Betriebssystemen, die OpenZFS unterstützen, gehören Apple OS X, FreeBSD, illumos (das auf OpenSolaris basiert) und Linux-Varianten wie Debian, Gentoo und Ubuntu. OpenZFS funktioniert auf allen Linux-Distributionen, aber nur einige kommerzielle Anbieter bieten es als Teil ihrer Distributionen an. Zu den Unternehmen mit kommerziellen Produkten, die auf OpenZFS aufbauen, gehören Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS und Spectra Logic.
ZFS und OpenZFS sind vor allem für Unternehmen interessant, die große Datenmengen verwalten und die Integrität der Daten sicherstellen müssen. Zu den Nutzern gehören wissenschaftliche Einrichtungen, nationale Laboratorien, Regierungsbehörden, Finanzunternehmen, Telekommunikations-, Medien- und Unterhaltungsunternehmen.
ZFS stand ursprünglich für Zettabyte File System, aber das Wort Zettabyte hat im Zusammenhang mit dem Dateisystem keine Bedeutung mehr. Als 128-Bit-Dateisystem hat ZFS das Potenzial, auf 256 Quadrillionen Zettabytes zu skalieren.
Wie ZFS funktioniert
ZFS ist für die Ausführung auf einem einzigen Server mit möglicherweise Hunderten, wenn nicht Tausenden von angeschlossenen Speicherlaufwerken konzipiert. ZFS fasst den verfügbaren Speicher zusammen und verwaltet alle Festplatten als eine Einheit. Ein Benutzer kann dem Pool weitere Speicherlaufwerke hinzufügen, wenn das Dateisystem zusätzliche Kapazität benötigt. ZFS ist hochgradig skalierbar und unterstützt eine große maximale Dateigröße.
ZFS speichert mindestens zwei Kopien von Metadaten, wenn Daten auf die Festplatte geschrieben werden. Die Metadaten enthalten Informationen wie die Festplattensektoren, in denen die Daten gespeichert sind, die Größe der Datenblöcke und eine Prüfsumme der Binärziffern eines Datenteils. Wenn ein Benutzer den Zugriff auf eine Datei anfordert, führt ein Prüfsummenalgorithmus eine Berechnung durch, um zu überprüfen, ob die abgerufenen Daten mit den ursprünglich auf die Festplatte geschriebenen Bits übereinstimmen. Stellt die Prüfsumme eine Inkonsistenz fest, markiert sie die fehlerhaften Daten. In Systemen mit einem gespiegelten Speicherpool oder der ZFS-Version von RAID kann ZFS die korrekte Kopie vom anderen Laufwerk abrufen und die beschädigte Datenkopie reparieren.
ZFS wird gemeinhin als Copy-on-Write-Dateisystem bezeichnet, obwohl Oracle es als Redirect-on-Write beschreibt. Wenn ZFS Daten auf die Festplatte schreibt, überschreibt es die vorhandenen Daten nicht. ZFS schreibt einen neuen Block an eine andere Stelle auf der Festplatte und aktualisiert die Metadaten so, dass sie auf den neu geschriebenen Block verweisen, während ältere Versionen der Daten beibehalten werden.
Ein echtes Copy-on-Write-Dateisystem würde eine exakte Kopie eines Datenblocks an einem separaten Ort erstellen, bevor der ursprüngliche Block überschrieben wird. Vor dem Überschreiben der Daten müsste das System den vorherigen Wert des Blocks lesen. Ein Copy-on-Write-Dateisystem erfordert drei E/A-Operationen – Lesen, Ändern und Schreiben – für jedes Schreiben von Daten. Im Gegensatz dazu ist bei einem Redirect-on-Write-System nur eine E/A-Operation erforderlich, was eine größere Effizienz und höhere Leistung ermöglicht.
ZFS ist eine beliebte Wahl für Network-Attached-Storage-Systeme, bei denen NFS über dem Dateisystem läuft, sowie in virtuellen Serverumgebungen. Ein weiteres gängiges Einsatzszenario ist das Aufsetzen eines Cluster-Dateisystems wie General Parallel File System (GPFS) oder Lustre auf ZFS, um eine Skalierung auf zusätzliche Serverknoten zu ermöglichen. OpenStack-Benutzer können ZFS als zugrunde liegendes Dateisystem für Cinder-Blockspeicher und Swift-Objektspeicher einsetzen.
Schlüsselfunktionen von ZFS
Snapshots und Klone: ZFS und OpenZFS können Point-in-Time-Kopien des Dateisystems mit großer Effizienz und Geschwindigkeit erstellen, da das System alle Kopien der Daten beibehält. Snapshots sind unveränderliche Kopien des Dateisystems, während Klone geändert werden können. Snapshots und Klone sind in Boot-Umgebungen mit ZFS auf Solaris integriert, so dass Benutzer zu einem Snapshot zurückkehren können, wenn beim Patchen oder Aktualisieren des Systems etwas schief läuft. Ein weiterer potenzieller Vorteil von ZFS ist eine Wiederherstellungstechnik gegen Ransomware.
RAID-Z: Mit RAID-Z können dieselben Daten an mehreren Orten gespeichert werden, um die Fehlertoleranz und die Leistung zu verbessern. Das System rekonstruiert die Daten auf dem verlorenen Laufwerk mit Hilfe der Informationen, die auf den anderen Laufwerken des Systems gespeichert sind. Ähnlich wie bei RAID 5 werden bei RAID-Z Paritätsinformationen auf jedem Laufwerk gestrippt, damit ein Speichersystem auch dann noch funktioniert, wenn ein Laufwerk ausfällt. Bei RAID-Z handelt es sich bei den gestripten Daten jedoch um einen vollständigen Block, dessen Größe variabel ist. Obwohl RAID-Z in der Regel mit RAID 5 verglichen wird, führt es einige Vorgänge anders aus, um bestimmte seit langem bestehende Probleme mit herkömmlichem RAID zu lösen. Ein Problem, das RAID-Z behebt, ist der so genannte Write-Hole-Effekt, bei dem ein System nicht feststellen kann, welche Daten- oder Paritätsblöcke aufgrund eines Stromausfalls oder einer katastrophalen Systemunterbrechung auf die Festplatte geschrieben wurden. Hersteller von Systemen, die traditionelles RAID verwenden, lösen das Problem in der Regel durch den Einsatz einer unterbrechungsfreien Stromversorgung oder spezieller Hardware.
RAID-Z2 unterstützt den Verlust von zwei Speicherlaufwerken, ähnlich wie RAID 6, und RAID-Z3 kann den Verlust von drei Speichergeräten tolerieren. Benutzer haben die Möglichkeit, Laufwerke in Gruppen anzuordnen, wie bei herkömmlichem RAID. Ein System mit zwei Gruppen von sechs Laufwerken, die als RAID-Z3 eingerichtet sind, könnte beispielsweise den Verlust von drei Laufwerken in jeder Gruppe verkraften.
Komprimierung: Inline-Datenkomprimierung ist eine eingebaute Funktion in ZFS und OpenZFS, um die Anzahl der Bits zu reduzieren, die zum Speichern von Daten erforderlich sind. ZFS und OpenZFS unterstützen jeweils eine Reihe von Kompressionsalgorithmen. Benutzer haben die Möglichkeit, die Inline-Komprimierung zu aktivieren oder zu deaktivieren.
Deduplizierung: Inline-Datendeduplizierung ist eine integrierte Funktion in ZFS und OpenZFS, die Speichereffizienz durch die Beseitigung redundanter Daten ermöglicht. ZFS und OpenZFS finden die doppelten Daten, indem sie die Prüfsumme für einen Block untersuchen, die in der Größe variieren kann. Benutzer können die Inline-Deduplizierung aktivieren oder deaktivieren.
ZFS send/receive: ZFS und OpenZFS ermöglichen es, einen Schnappschuss des Dateisystems an einen anderen Serverknoten zu senden, so dass ein Benutzer Daten auf ein separates System replizieren kann, z. B. für Sicherungszwecke oder die Datenmigration auf Cloud-Speicher.
Sicherheit: ZFS und OpenZFS unterstützen delegierte Berechtigungen und feiner abgestufte Zugriffskontrolllisten, um zu verwalten, wer administrative Aufgaben durchführen darf. Benutzer haben die Möglichkeit, ZFS als schreibgeschützt einzustellen, sodass keine Daten geändert werden können. Oracle unterstützt die Verschlüsselung in ZFS auf Solaris.
Vorteile und Einschränkungen von ZFS
ZFS integriert das Dateisystem und den Volume Manager, so dass die Benutzer keine separaten Tools und Befehlssätze erwerben und erlernen müssen. ZFS bietet einen umfangreichen Funktionsumfang und Datendienste ohne Kosten, da es in das Oracle-Betriebssystem integriert ist. Open Source OpenZFS ist frei verfügbar. Das Dateisystem kann durch Hinzufügen von Laufwerken zum Speicherpool erweitert werden. Bei herkömmlichen Dateisystemen muss die Größe der Festplattenpartition geändert werden, um die Kapazität zu erhöhen, und die Benutzer benötigen häufig Produkte zur Volumenverwaltung, die ihnen dabei helfen.
ZFS ist auf die Ausführung auf einem einzigen Server beschränkt, im Gegensatz zu verteilten oder parallelen Dateisystemen wie GPFS und Lustre, die auf mehrere Server skaliert werden können.
Der reichhaltige Funktionsumfang von ZFS kann die Verwendung und Verwaltung der Software kompliziert machen. Funktionen wie die integrierten ZFS-Prüfsummenalgorithmen können zusätzliche Rechenleistung erfordern und die Leistung beeinträchtigen.
In der Linux-Gemeinschaft gibt es verschiedene Meinungen zur Lizenzierung in Bezug auf die Weiterverbreitung des ZFS-Codes und der binären Kernelmodule. Red Hat beispielsweise hält es für problematisch, Code, der unter einer CDDL geschützt ist, zusammen mit Code, der unter einer allgemeinen öffentlichen Lizenz (GPL) geschützt ist, zu verteilen. Im Gegensatz dazu hat Canonical, das Ubuntu vertreibt, festgestellt, dass es die Bedingungen der CDDL- und GPL-Lizenzen einhält.
ZFS vs. OpenZFS
Oracles ZFS und das quelloffene OpenZFS leiten sich vom gleichen ZFS-Quellcode ab. Auf getrennten Wegen haben Oracle und die Open-Source-Gemeinschaft Erweiterungen hinzugefügt und erhebliche Leistungsverbesserungen an ZFS bzw. OpenZFS vorgenommen. Die Oracle-ZFS-Updates sind proprietär und nur in Oracle-Technologien verfügbar. Updates für den Open-Source-Code von OpenZFS sind frei verfügbar.
Die Liste der Verbesserungen, die Oracle seit 2010 an ZFS vorgenommen hat, umfasst:
- Verschlüsselung;
- Unterstützung für die Persistenz komprimierter Daten über Betriebssystem-Neustarts hinweg im L2 Adaptive Replacement Cache (ARC);
- bootfähige Extensible Firmware Interface-Labels, die Unterstützung für physische Festplatten und virtuelle Festplatten-Volumes mit einer Größe von mehr als 2 TB bieten;
- Standard-Benutzer- und Gruppenquoten; und
- Pool-/Dateisystemüberwachung.
Die Liste der Updates, die die Open-Source-Community an OpenZFS vorgenommen hat, umfasst:
- zusätzliche Komprimierungsalgorithmen;
- resumierbares Senden/Empfangen, das es ermöglicht, eine lang laufende ZFS-Sende-/Empfangsoperation vom Punkt einer Systemunterbrechung aus neu zu starten;
- komprimiertes Senden/Empfangen, das es dem System ermöglicht, komprimierte Daten von einem ZFS-Pool zu einem anderen zu senden, ohne dass die Daten dekomprimiert/rekomprimiert werden müssen, wenn sie vom Sendeknoten zum Ziel gelangen;
- Komprimierter ARC, der es ZFS erlaubt, komprimierte Daten im Speicher zu halten, was einen größeren Arbeitsdatensatz im Cache ermöglicht; und
- Erhöhung der maximalen Blockgröße von 128 KB auf 16 MB, um die Leistung bei der Arbeit mit großen Dateien zu verbessern und die Datenrekonstruktion bei der Wiederherstellung nach einem Laufwerksausfall zu beschleunigen.