ZFS
ZFS ist ein lokales Dateisystem und ein logischer Volume-Manager (Logical Volume Manager, LVM), der von Sun Microsystems entwickelt wurde, um die Platzierung, 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 integrierte Speicherfunktionen aus, zum Beispiel die folgenden:
- Replikation - der Prozess, bei dem ein Replikat (eine Kopie) erstellt wird.
- Deduplizierung - ein Prozess, der redundante Kopien von Daten eliminiert und den Speicher-Overhead reduziert.
- Komprimierung - Verringerung der Anzahl von 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.
- Data Protection - der Prozess des Schutzes wichtiger Informationen vor Beschädigung und/oder Verlust.
Geschichte von ZFS
Die Ingenieure von Sun 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 (Common Development and Distribution Licence, 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 OpenSolaris-Open-Source-Projekt, zu dem auch ZFS gehörte, wurde eingestellt, nachdem die Firma Oracle 2010 Sun übernommen und sich den Begriff ZFS schützen lassen hatte. Die Ingenieure von Oracle arbeiten weiterhin an der Verbesserung und Erweiterung 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 ins Leben gerufen, das auf dem ZFS-Quellcode in der letzten Version von OpenSolaris basiert. Die offene Gemeinschaft arbeitet an neuen Funktionen, Verbesserungen und Fehlerbehebungen für den 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 Datenintegrität 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 Billiarden Zettabytes zu skalieren.
Wie ZFS funktioniert
ZFS ist für die Ausführung auf einem einzigen Server mit möglicherweise Hunderten oder gar Tausenden von angeschlossenen Speicherlaufwerken konzipiert. ZFS fasst den verfügbaren Speicherplatz zusammen und verwaltet alle Festplatten als eine einzige Einheit. Ein Benutzer kann dem Pool weitere Speicherlaufwerke hinzufügen, wenn das Dateisystem zusätzliche Kapazität benötigt. ZFS ist hoch skalierbar und unterstützt eine große maximale Dateigröße.
ZFS speichert mindestens zwei Kopien von Metadaten, wenn Daten auf die Festplatte geschrieben werden. Zu den Metadaten gehören Informationen wie die Festplattensektoren, in denen die Daten gespeichert sind, die Größe der Datenblöcke und eine Prüfsumme der binären Ziffern 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 von dem anderen Laufwerk abrufen und die beschädigte Datenkopie reparieren.
ZFS wird im Allgemeinen als Copy-on-Write-Dateisystem bezeichnet, obwohl Oracle es als Redirect-on-Write beschreibt. Wenn ZFS Daten auf die Festplatte schreibt, überschreibt es nicht die vorhandenen Daten. 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, wobei auch ältere Versionen der Daten erhalten bleiben.
Ein echtes Copy-on-Write-Dateisystem würde eine exakte Kopie eines Datenblocks an einem anderen 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 I/O-Operationen - Lesen, Ändern und Schreiben - für jedes Schreiben von Daten. Im Gegensatz dazu ist bei einem Redirect-on-Write-System nur eine I/O-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 auf 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.
Hauptmerkmale 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 schiefläuft. Ein weiterer potenzieller Vorteil von ZFS ist eine Wiederherstellungstechnik im Falle eines Ransomware-Vorfalls.
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 eines ausgefallenen Laufwerks 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 in Stripes abgelegt, damit ein Speichersystem auch dann noch funktioniert, wenn ein Laufwerk ausfällt. Bei RAID-Z handelt es sich bei den „striped“ 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 herkömmliches 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 verkraften. 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: Die Inline-Datenkomprimierung ist eine integrierte Funktion in ZFS und OpenZFS, um die Anzahl der für die Speicherung von Daten erforderlichen Bits zu reduzieren. ZFS und OpenZFS unterstützen jeweils eine Reihe von Kompressionsalgorithmen. Benutzer haben die Möglichkeit, die Inline-Komprimierung zu aktivieren oder zu deaktivieren.
Deduplizierung: Die Inline-Datendeduplizierung ist eine eingebaute Funktion in ZFS und OpenZFS, die die Speichereffizienz durch die Eliminierung redundanter Daten erhöht. 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 Senden/Empfangen (send/receive): ZFS und OpenZFS ermöglichen das Senden eines Snapshots des Dateisystems an einen anderen Serverknoten, so dass ein Benutzer Daten auf ein separates System replizieren kann, zum Beispiel für Sicherungszwecke oder die Datenmigration in einen Cloud-Speicher.
Sicherheit: ZFS und OpenZFS unterstützen delegierte Berechtigungen und feiner abgestufte Zugriffskontrolllisten(ACL), 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 Datenträgerverwaltung, 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 große 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 unterschiedliche Meinungen zur Lizenzierung im Hinblick auf die Weitergabe des ZFS-Codes und der binären Kernel-Module. Red Hat beispielsweise hält es für problematisch, Code, der unter einer CDDL geschützt ist, zusammen mit Code zu vertreiben, der unter einer allgemeinen öffentlichen Lizenz (General Public Licence, GPL) steht. Im Gegensatz dazu hat Canonical, das Ubuntu vertreibt, festgestellt, dass es mit den Bedingungen der CDDL- und GPL-Lizenzen konform ist.
ZFS vs. OpenZFS
Das ZFS von Oracle und das Open-Source-System OpenZFS stammen aus demselben ZFS-Quellcode. Auf getrennten Wegen haben Oracle und die Open-Source-Gemeinschaft Erweiterungen hinzugefügt und erhebliche Leistungsverbesserungen an ZFS beziehungsweise OpenZFS vorgenommen. Die Oracle-ZFS-Updates sind proprietär und nur in Oracle-Technologien verfügbar. Die Aktualisierungen für den Open-Source-Code von OpenZFS sind frei verfügbar.
Die Liste der Erweiterungen, die Oracle seit 2010 an ZFS vorgenommen hat, umfasst unter anderem:
- Verschlüsselung
- Unterstützung für die Aufrechterhaltung komprimierter Daten über Neustarts des Betriebssystems hinweg im adaptiven L2-Ersatz-Cache (ARC)
- Boot-fä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
- Pool-/Dateisystem-Überwachung
Die Liste der Updates, die die Open-Source-Gemeinschaft an OpenZFS bis 2017 vorgenommen hat, umfasst:
- zusätzliche Kompressionsalgorithmen
- Wiederaufnehmbare Sende-/Empfangsfunktion, die es ermöglicht, eine lang laufende ZFS-Sende-/Empfangsoperation ab dem Punkt einer Systemunterbrechung neu zu starten
- komprimiertes Senden/Empfangen, das es dem System erlaubt, komprimierte Daten von einem ZFS-Pool zu einem anderen zu senden, ohne die Daten auf dem Weg vom Sendeknoten zum Ziel dekomprimieren/rekomprimieren zu müssen
- komprimiertes ARC, das es ZFS ermöglicht, komprimierte Daten im Memory zu halten, was einen größeren Arbeitsdatensatz im Cache ermöglicht
- 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.