Nach fast zwei Jahren Entwicklung Release , Implementierung des ZFS-Dateisystems als Modul für den Linux-Kernel. Der Modulbetrieb wurde mit Linux-Kerneln von 2.6.32 bis 5.1 getestet. Die fertigen Installationspakete werden in Kürze verfügbar sein für die gängigsten Linux-Distributionen, einschließlich Debian, Ubuntu, Fedora, RHEL/CentOS. Das ZFS on Linux-Modul ist bereits Teil der Distributionen Debian, Ubuntu, Gentoo, Sabayon Linux und ALT Linux.
Im Rahmen von ZFS on Linux wurde die Implementierung der ZFS-Komponenten sowohl für die Funktionsweise des Dateisystems als auch für den Betrieb des Volume-Managers vorbereitet. Insbesondere wurden die Komponenten SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) und ZPL (ZFS POSIX Layer) implementiert. Darüber hinaus bietet das Projekt die Möglichkeit, ZFS als Backend für das Cluster-Dateisystem Lustre zu nutzen. Die Fortschritte des Projekts basieren auf dem originalen ZFS-Code, der aus dem OpenSolaris-Projekt importiert und mit Verbesserungen und Korrekturen der Illumos-Community erweitert wurde. Das Projekt wird mit Unterstützung von Mitarbeitern des Lawrence Livermore National Laboratory im Rahmen eines Vertrags mit dem US-Energieministerium weiterentwickelt.
Der Code wird unter der freien CDDL-Lizenz veröffentlicht, die mit der GPLv2 nicht kompatibel ist. Dies verhindert die Integration von ZFS on Linux in den Hauptzweig des Linux-Kernels, da eine Kombination von Code unter den Lizenzen GPLv2 und CDDL nicht zulässig ist. Um diese Lizenzinkompatibilität zu umgehen, wurde beschlossen, das Produkt vollständig unter der CDDL-Lizenz als separat herunterladbares Modul zu verteilen, das unabhängig vom Kernel bereitgestellt wird. Die Stabilität des ZFS on Linux-Code ist vergleichbar mit anderen Dateisystemen für Linux.
Wesentliche Änderungen:
- Es wurde eine integrierte Unterstützung für die Verschlüsselung gespeicherter Daten auf Ebene des Dateisystems und der Partitionen hinzugefügt. Standardmäßig wird der Algorithmus aes-256-ccm für die Verschlüsselung verwendet. Um die Verschlüsselungsschlüssel zu laden, wird der Befehl „zfs load-key“ angeboten.
- Die Möglichkeit zur Übertragung von verschlüsselten Daten bei der Ausführung der Befehle «zfs send» und «zfs receive» wurde implementiert. Mit der Angabe der Option «-w» werden bereits im Pool verschlüsselte Daten unverändert in einen anderen Pool übertragen, ohne vorherige Entschlüsselung. Bei dieser Art der Kopie bleiben die Daten durch den Schlüssel der sendenden Partei geschützt, was ermöglicht, diesen Modus für Backups auf nicht vertrauenswürdigen Systemen zu verwenden (im Falle einer Kompromittierung des Empfängers kann ein Angreifer ohne den Schlüssel keinen Zugriff auf die Daten erhalten);
- Die Unterstützung für das Entfernen von primären Speicherlaufwerken aus dem Speicherpool wurde hinzugefügt, sowohl für einzelne Laufwerke als auch für solche, die Teil eines Mirrors sind. Das Entfernen erfolgt mit dem Befehl «zpool remove». Während des Entfernungsprozesses werden die Daten vom auszuschließenden Laufwerk auf die verbleibenden primären Laufwerke im Pool kopiert;
- Der Befehl „zpool checkpoint“ wurde hinzugefügt, um den aktuellen Zustand des Pools zu speichern, sodass sämtliche zukünftigen Änderungen auf den gespeicherten Zeitpunkt zurückgesetzt werden können (es wird ein Snapshot des gesamten Pools erstellt). Diese Funktion kann nützlich sein, wenn potenziell riskante komplexe Verwaltungsarbeiten durchgeführt werden, die normalerweise zu irreversiblen Änderungen führen (wie z.B. die Aktivierung von Flags für neue ZFS-Funktionen oder die Datenbereinigung).
- Der Befehl „zpool trim“ wurde hinzugefügt, der es ermöglicht, die im Pool verwendeten Speichergeräte über Sektoren zu informieren, die nicht mehr genutzt werden. Die Anwendung der TRIM-Operation verbessert die Effizienz von SSD-Speichern und verhindert eine Verschlechterung ihrer Leistung. Um einen kontinuierlichen Hintergrundprozess für die Übertragung von TRIM-Befehlen zu aktivieren, wurde die neue Eigenschaft „autotrim“ vorgestellt.
- Das Kommando «zpool initialize» wurde hinzugefügt, um den gesamten nicht zugewiesenen Speicherplatz zu initialisieren. Dies ermöglicht eine sofortige Verfügbarkeit ohne Leistungsbeeinträchtigung beim ersten Zugriff (zum Beispiel bei der Bereitstellung virtualisierter Speichern wie VMware VMDK);
- Die Unterstützung für das Projekt-Accounting und Quoten wurde ergänzt, um die zuvor verfügbaren Quoten auf Nutzer- und Gruppenebene zu erweitern. Im Wesentlichen sind Projekte separate Objektbereiche, die mit einer eigenen Identifikation (Projekt-ID) verknüpft sind. Die Bindung wird durch den Befehl ‘chattr -p’ oder durch Attributvererbung definiert. Zur Verwaltung von Projekten stehen die Befehle «zfs project» und «zfs projectspace» zur Verfügung, die es ermöglichen, Projekte zu erstellen und deren Datenspeicher-Beschränkungen festzulegen;
- Die Möglichkeit zur Erstellung von Lua-Skripten zur Automatisierung verschiedener Aufgaben mit ZFS wurde hinzugefügt. Die Skripte werden in speziellen isolierten Umgebungen mit dem Befehl «zpool program» ausgeführt;
- Eine neue Bibliothek wurde implementiert , die eine stabile API zur Verwaltung von ZFS aus Python-Anwendungen bereitstellt. Die Bibliothek ist ein Wrapper um libzfs_core und bietet ein identisches Funktionsset, verwendet jedoch Python-typische Datentypen;
- Die Kompatibilität der Utility-Programme arcstat, arcsummary und dbufstat mit Python 3 ist gewährleistet. Die Skripte arcstat.py, arc_summary.py und dbufstat.py wurden in Versionen ohne die Endung „.py“ umbenannt;
- Die Unterstützung für die Direct IO-Schnittstelle des Linux-Kernels (O_DIRECT) wurde hinzugefügt, die den Zugriff auf Daten ohne Pufferung und Umgehung des Caches ermöglicht;
- Leistungsoptimierungen wurden vorgestellt:
- Die Ausführung der Befehle „scrub“ und „resilver“ wurde beschleunigt, indem sie in zwei Phasen unterteilt wurden (eine separate Phase für das Scannen von Metadaten und das Bestimmen der Position der Datenblöcke auf der Festplatte, was eine weitergehende Überprüfung durch sequentielles Lesen von Daten ermöglicht);
- Die Unterstützung für Datenplatzierungs-Klassen (Allocation classes) wurde hinzugefügt,
, die es ermöglichen, relativ kleine SSD-Laufwerke in den Pool einzubeziehen und diese nur für die Speicherung bestimmter Arten häufig verwendeter Blöcke zu nutzen, wie z.B. Metadaten, DDT-Daten und kleine Datei-Blöcke; - Verbesserte Leistung für Verwaltungsteam, wie zum Beispiel
„zfs list“ und „zfs get“, durch das Caching der erforderlichen Metadaten, die für ihre Funktion notwendig sind; - Unterstützung für die Parallelisierung von Blockallokationsoperationen hinzugefügt, indem separate „Allocator“-Prozesse für jede Gruppe von Metaslab gestartet werden. In Standard-Systemen wird eine Leistungssteigerung von 5-10 % festgestellt, auf großen Systemen (8 128 GB SSD, 24-Kern-NUMA, 256 GB RAM) kann die Steigerung bei Blockallokationen 25 % erreichen;
- Die Möglichkeit zur verzögerten Ausführung des Befehls „resilver“ (Neuorganisation der Datenverteilung unter Berücksichtigung der Änderung der Speicherkonfiguration) wurde hinzugefügt – wenn eine neue Operation gestartet wird, während die vorherige noch nicht abgeschlossen ist, beginnt der neue Handler erst nach Abschluss der vorherigen;
- Optimierungen im ZIL-Log (ZFS Intent Log) erlaubt das Erstellen und Verarbeiten von Blöcken, während bereits Blocke durch den Speicher verarbeitet werden;
- Die Zeit zum Registrieren von Partitionen (zvol) im System wurde verkürzt. Wenn der Pool eine große Anzahl von Partitionen enthält, stehen diese jetzt sofort nach der Ausführung von „zpool import“ zur Verfügung;
- Unterstützung für die hardwaregestützte Beschleunigung von SHA256-Hash-Berechnungen und AES-GCM-Verschlüsselungsoperationen unter Verwendung von Chips mit Intel QAT (Quick Assist Technology) wurde hinzugefügt. Unterstützung für die Hardwarebeschleunigung des Intel C62x-Chipsatzes und CPU Atom C3000 wurde integriert.
Quelle: opennet.ru
