Nach fast zwei Jahren Entwicklung Release , Implementierung des ZFS-Dateisystems als Modul für den Linux-Kernel. Die Modularbeiten wurden mit Linux-Kernen von 2.6.32 bis 5.1 getestet. Fertige Installationspakete werden in naher Zukunft für die wichtigsten Linux-Distributionen, einschließlich Debian, Ubuntu, Fedora, RHEL/CentOS. Das Modul ZFS auf Linux ist bereits Bestandteil der Distributionen Debian, Ubuntu, Gentoo, Sabayon Linux und ALT Linux.
Im Rahmen von ZFS auf Linux wurde eine Implementierung der ZFS-Komponenten entwickelt, die sowohl mit dem Betrieb des Dateisystems als auch mit der Funktion des Volumenmanagers zusammenhängt. Insbesondere wurden die Komponenten implemented: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) und ZPL (ZFS POSIX Layer). Darüber hinaus bietet das Projekt die Möglichkeit, ZFS als Backend für das verteilte Dateisystem Lustre zu verwenden. Die Entwicklungen des Projekts basieren auf dem ursprünglichen ZFS-Code, der aus dem OpenSolaris-Projekt importiert und mit Verbesserungen und Korrekturen von der Illumos-Community erweitert wurde. Das Projekt wird mit der 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 vertrieben, die mit GPLv2 nicht kompatibel ist und daher eine Integration von ZFS auf Linux in den Hauptzweig des Linux-Kernels verhindert, da eine Vermischung von Code unter GPLv2- und CDDL-Lizenzen unzulässig ist. Um diese Lizenzinkompatibilität zu umgehen, wurde entschieden, das Produkt vollständig unter der CDDL-Lizenz als separat ladbares Modul zu vertreiben, das getrennt vom Kernel bereitgestellt wird. Die Stabilität der Codebasis von ZFS auf Linux wird als vergleichbar mit anderen Dateisystemen für Linux bewertet.
Hauptänderungen:
- Es wurde eine integrierte Unterstützung für die Verschlüsselung gespeicherter Daten auf der Ebene des Dateisystems und der Partitionen hinzugefügt. Standardmäßig wird der Algorithmus aes-256-ccm für die Verschlüsselung verwendet. Zum Laden der Verschlüsselungsschlüssel wurde der Befehl „zfs load-key“ vorgeschlagen;
- Die Möglichkeit, verschlüsselte Daten beim Ausführen der Befehle „zfs send“ und „zfs receive“ zu übertragen, wurde implementiert. Bei Angabe der Option „-w“ werden bereits im Pool verschlüsselte Daten unverändert in einen anderen Pool übertragen, ohne sie zwischenzeitlich zu entschlüsseln. Bei dieser Art von Kopie bleibt der Datenbestand durch den Schlüssel der sendenden Seite geschützt, was es ermöglicht, diesen Modus für Backups auf nicht vertrauenswürdige Systeme zu verwenden (im Falle einer Kompromittierung des Empfängers hat der Angreifer ohne Schlüssel keinen Zugriff auf die Daten);
- Unterstützung für das Entfernen von primären Speichergeräten aus dem Storage-Pool hinzugefügt, die sowohl einzeln als auch im Rahmen eines Spiegels angeschlossen sind. Das Entfernen erfolgt mit dem Befehl „zpool remove“. Während des Entfernungsprozesses werden die Daten vom ausgeschlossenen Speichergerät auf die verbleibenden primären Speichergeräte im Pool kopiert;
- Der Befehl „zpool checkpoint“ wurde hinzugefügt, um den aktuellen Zustand des Pools zu speichern und eine Rückkehr zu einem späteren Zeitpunkt zu ermöglichen (es wird ein Snapshot des gesamten Pools erstellt). Diese Funktion kann nützlich sein, während potenziell gefährlicher komplexer administrativer Arbeiten, die normalerweise zu irreversiblen Änderungen führen (zum Beispiel Aktivierung von Flags für neue ZFS-Funktionalitäten oder Datenbereinigung);
- Der Befehl „zpool trim“ wurde hinzugefügt, um die im Pool verwendeten Geräte über Sektoren zu informieren, die nicht mehr verwendet werden. Die Anwendung der TRIM-Operation ermöglicht eine Steigerung der Effizienz von SSD-Geräten und verhindert eine Verschlechterung ihrer Leistung. Um einen kontinuierlichen Hintergrundprozess zur Übermittlung von TRIM-Befehlen zu ermöglichen, wurde die neue Eigenschaft „autotrim“ eingeführt;
- Der Befehl „zpool initialize“ wurde hinzugefügt, um den gesamten nicht zugewiesenen Festplattenspeicher zu initialisieren, was eine sofortige Verwendung ohne Leistungseinbußen beim ersten Zugriff ermöglicht (zum Beispiel bei der Bereitstellung von virtualisierten Speichern wie VMware VMDK);
- Unterstützung für Projektkonten und -quoten hinzugefügt, die die zuvor verfügbaren Benutzer- und Gruppenkontingente ergänzen. Projekte sind im Wesentlichen separate Objektbereiche, die mit einer eigenen Kennung (Project ID) verbunden sind. Die Bindung erfolgt über die Operation ‚chattr -p‘ oder durch das Erben von Attributen. Zur Verwaltung von Projekten wurden die Befehle „zfs project“ und „zfs projectspace“ bereitgestellt, die die Erstellung von Projekten und das Festlegen von Speicherplatzgrenzen ermöglichen;
- Die Möglichkeit zur Erstellung von Lua-Skripten zur Automatisierung verschiedener Arbeiten mit ZFS wurde hinzugefügt. Die Skripte werden in speziellen isolierten Umgebungen mit dem Befehl „zpool program“ gestartet;
- Eine neue Bibliothek implementiert , die eine stabile API zur Verwaltung von ZFS aus Anwendungen in der Programmiersprache Python bereitstellt. Die Bibliothek ist ein Wrapper über libzfs_core und bietet einen identischen Satz an Funktionen, verwendet jedoch Python-nähere Typen;
- Die Kompatibilität der Werkzeuge arcstat, arcsummary und dbufstat mit Python 3 wurde sichergestellt. Die Werkzeuge arcstat.py, arc_summary.py und dbufstat.py wurden in Varianten ohne die Erweiterung „.py“ umbenannt;
- Es wurde Unterstützung für die Direct IO-Schnittstelle des Linux-Kernels (O_DIRECT) hinzugefügt, die den Zugriff auf Daten ohne Pufferung und umgehung des Caches ermöglicht;
- Die Leistungsoptimierungen wurden vorgestellt:
- Die Arbeit der Befehle „scrub“ und „resilver“ wurde durch Aufteilung in zwei Phasen beschleunigt (es wurde eine separate Phase für das Scannen von Metadaten und das Bestimmen der Position von Datenträgerblöcken verwendet, was eine weitere Überprüfung mit sequentiellem Lesen von Daten ermöglicht);
- Unterstützung für Datenplatzierungsklassen (Allocation Classes) wurde hinzugefügt,
die es ermöglichen, relativ kleine SSDs in den Pool einzubeziehen und sie zur Speicherung nur bestimmter häufig verwendeter Blocktypen zu nutzen, wie z.B. Metadaten, DDT-Daten und kleine Dateiblöcke; - Die Leistungsfähigkeit der Verwaltungsbefehle wurde erhöht, wie zum Beispiel
„zfs list“ und „zfs get“, durch das Caching der für ihre Funktionsweise erforderlichen Metadaten; - Die Unterstützung für die Parallelisierung von Blockzuweisungsoperationen wurde hinzugefügt, indem separate „Allocator“-Prozesse für jede Gruppe von Metaslab gestartet werden. Auf normalen Systemen wird eine Leistungssteigerung von 5-10% festgestellt, während auf großen Systemen (8 128 GB SSD, 24-Kern NUMA, 256 GB RAM) die Zuweisungsoperationen um bis zu 25% steigen können;
- Die Möglichkeit zur verzögerten Ausführung des Befehls „resilver“ (Neuordnung der Datenverteilung unter Berücksichtigung von Änderungen in der Speicherkonfiguration) wurde hinzugefügt – wenn bei der Ausführung einer neuen Operation die vorherige noch nicht abgeschlossen ist, startet der neue Handler erst nach Beendigung der vorherigen;
- Im ZIL (ZFS Intent Log) wurden Optimierungen vorgenommen, die es ermöglichen, Blöcke zu erstellen und zu verarbeiten, während noch Blöcke vom Speicher verarbeitet werden;
- Die Zeit zur Registrierung von Volumes (zvol) im System wurde verkürzt. Wenn der Pool eine große Anzahl von Volumes enthält, sind diese jetzt sofort nach der Ausführung von „zpool import“ verfügbar.
- Die Unterstützung für hardwarebeschleunigte Berechnungen von SHA256-Hashes und AES-GSM-Verschlüsselungsoperationen mit Chips, die die Intel-QAT-Technologie (Quick Assist Technology) unterstützen, wurde hinzugefügt. Zusätzlich wird die Hardwarebeschleunigung durch den Intel C62x-Chipsatz und die CPU Atom C3000 unterstützt.
Quelle: opennet.ru
