Veröffentlichung von ZFS unter Linux 0.8.0, Implementierungen von ZFS für den Linux-Kernel

Nach fast zwei Jahren Entwicklungszeit eingereicht freigeben ZFS unter Linux 0.8.0, eine Implementierung des ZFS-Dateisystems, verpackt als Modul für den Linux-Kernel. Das Modul wurde mit Linux-Kerneln von 2.6.32 bis 5.1 getestet. Fertige Installationspakete folgen in Kürze wird vorbereitet für die wichtigsten Linux-Distributionen, einschließlich Debian, Ubuntu, Fedora, RHEL/CentOS. Das ZFS-on-Linux-Modul ist bereits in den Distributionen Debian, Ubuntu, Gentoo, Sabayon Linux und ALT Linux enthalten.

Als Teil von ZFS unter Linux wurde eine Implementierung von ZFS-Komponenten vorbereitet, die sich sowohl auf den Betrieb des Dateisystems als auch auf die Funktionsweise des Volume-Managers beziehen. Insbesondere sind folgende Komponenten implementiert: 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 Lustre-Cluster-Dateisystem zu verwenden. Die Arbeit des Projekts basiert auf originalem ZFS-Code, der aus dem OpenSolaris-Projekt importiert und durch Verbesserungen und Korrekturen der Illumos-Community erweitert wurde. Das Projekt wird unter Beteiligung von Mitarbeitern des Livermore National Laboratory im Rahmen eines Vertrags mit dem US-Energieministerium entwickelt.

Der Code wird unter einer kostenlosen CDDL-Lizenz verteilt, die nicht mit GPLv2 kompatibel ist, was die Integration von ZFS unter Linux in den Hauptzweig des Linux-Kernels nicht zulässt, da das Mischen von Code unter GPLv2- und CDDL-Lizenzen nicht erlaubt ist. Um diese Lizenzinkompatibilität zu umgehen, wurde beschlossen, das gesamte Produkt unter der CDDL-Lizenz als separat ladbares Modul zu vertreiben, das separat vom Kern geliefert wird. Die Stabilität der ZFS-on-Linux-Codebasis wird als vergleichbar mit anderen Dateisystemen für Linux bewertet.

Wichtigste Änderungen:

  • Integrierte Unterstützung für die Verschlüsselung gespeicherter Daten auf der Ebene des Dateisystems und der Partitionen hinzugefügt. Der Standardverschlüsselungsalgorithmus ist aes-256-ccm. Zum Laden von Verschlüsselungsschlüsseln wurde der Befehl „zfs Load-Key“ vorgeschlagen;
  • Die Möglichkeit zur Übertragung verschlüsselter Daten beim Ausführen der Befehle „zfs send“ und „zfs take“ wurde implementiert. Bei Angabe der Option „-w“ werden bereits im Pool verschlüsselte Daten unverändert und ohne Zwischenentschlüsselung in einen anderen Pool übertragen. Bei einem solchen Kopieren bleiben die Daten durch den Schlüssel des Absenders geschützt, was die Verwendung dieses Modus für die Sicherung auf nicht vertrauenswürdigen Systemen ermöglicht (im Falle einer Kompromittierung des Empfängers kann der Angreifer ohne den Schlüssel nicht auf die Daten zugreifen);
  • Unterstützung für das Entfernen primärer Laufwerke aus einem Speicherpool hinzugefügt, die sowohl einzeln als auch als Teil einer Spiegelung verbunden sind. Die Entfernung erfolgt mit dem Befehl „zpool remove“. Der Löschvorgang kopiert die Daten vom ausgeschlossenen Laufwerk auf die verbleibenden primären Laufwerke im Pool;
  • Der Befehl „zpool checkpoint“ wurde hinzugefügt, um den aktuellen Status des Pools zu speichern, mit der Möglichkeit, weitere Änderungen am gespeicherten Zeitpunkt rückgängig zu machen (es wird ein Snapshot des gesamten Pools erstellt). Diese Funktion kann bei der Durchführung potenziell gefährlicher komplexer Verwaltungsarbeiten nützlich sein, die unter normalen Bedingungen zu irreversiblen Änderungen führen (z. B. das Aktivieren von Flags für neue ZFS-Funktionen oder das Löschen von Daten).
  • Der Befehl „zpool trim“ wurde hinzugefügt, um die im Pool verwendeten Laufwerke über Sektoren zu informieren, die nicht mehr verwendet werden. Der Einsatz der TRIM-Operation ermöglicht es, die Effizienz von SSDs zu steigern und eine Verschlechterung ihrer Leistung zu verhindern. Es wurde eine neue „Autotrim“-Eigenschaft vorgeschlagen, um den kontinuierlichen Hintergrundprozess der Übertragung von TRIM-Befehlen zu ermöglichen;
  • Befehl „zpool initialize“ hinzugefügt, um den gesamten nicht zugewiesenen Speicherplatz zu initialisieren, sodass er sofort einsatzbereit ist, ohne dass es beim ersten Zugriff zu Leistungseinbußen kommt (z. B. beim Hosten virtualisierter Speicher wie VMware VMDK);
  • Unterstützung für Abrechnung und Kontingente auf Projektebene hinzugefügt, zusätzlich zu den zuvor verfügbaren Kontingenten auf Benutzer- und Gruppenebene. Im Wesentlichen handelt es sich bei Projekten um einen separaten Bereich von Objekten, die mit einer separaten Kennung (Projekt-ID) verknüpft sind. Die Bindung wird über die Operation „chattr -p“ oder über die Attributvererbung definiert. Für die Projektverwaltung werden die Befehle „zfs project“ und „zfs projectspace“ vorgestellt, mit denen Sie die Erstellung von Projekten verwalten und Speicherplatzbeschränkungen für diese festlegen können;
  • Es wurde die Möglichkeit hinzugefügt, Lua-Skripte zu erstellen, um verschiedene Arbeiten mit ZFS zu automatisieren. Skripte werden in speziellen isolierten Umgebungen mit dem Befehl „zpool program“ ausgeführt;
  • Neue Bibliothek implementiert pyzfs, das eine stabile API für die Verwaltung von ZFS aus Python-Anwendungen bereitstellt. Die Bibliothek ist ein Wrapper um libzfs_core und stellt einen identischen Funktionssatz bereit, verwendet jedoch nähere Python-Typen;
  • Die Dienstprogramme arcstat, arcsummary und dbufstat wurden mit Python 3 kompatibel gemacht. Die Dienstprogramme arcstat.py, arc_summary.py und dbufstat.py wurden in Versionen ohne die Erweiterung „.py“ umbenannt;
  • Unterstützung für die Kernelschnittstelle Linux Direct IO (O_DIRECT) hinzugefügt, die den Zugriff auf Daten ohne Pufferung und Umgehung des Caches ermöglicht;
  • Leistungsoptimierungen eingeführt:
    • Die Arbeit der Befehle „scrubb“ und „resilver“ wurde durch die Aufteilung in zwei Phasen beschleunigt (eine separate Phase wurde dem Scannen von Metadaten und der Bestimmung der Position von Blöcken mit Daten auf der Festplatte zugewiesen, was eine weitere Überprüfung mithilfe sequenzieller Daten ermöglicht). Lektüre);
    • Unterstützung für Zuordnungsklassen hinzugefügt,
      Ermöglichen, dass relativ kleine SSDs gebündelt und nur zum Speichern bestimmter Arten häufig verwendeter Blöcke verwendet werden, z. B. Metadaten, DDT-Daten und kleine Dateiblöcke.

    • Verbesserte Leistung von Admin-Befehlen wie z
      „zfs list“ und „zfs get“, indem die für ihren Betrieb erforderlichen Metadaten zwischengespeichert werden;

    • Unterstützung für die Parallelisierung von Blockzuweisungsvorgängen durch die Ausführung separater Zuweisungsprozesse für jede Metaslab-Gruppe hinzugefügt. Auf herkömmlichen Systemen gibt es eine Leistungssteigerung von 5-10 %, aber auf großen Systemen (8 SSD mit 128 GB, 24-Kern-NUMA, 256 GB RAM) kann die Steigerung der Blockzuweisungsvorgänge 25 % erreichen;
    • Möglichkeit der verzögerten Ausführung des Befehls „resilver“ hinzugefügt (Neuaufbau der Datenverteilung unter Berücksichtigung von Änderungen in der Konfiguration der Laufwerke) – wenn der vorherige Befehl beim Starten eines neuen Vorgangs noch nicht abgeschlossen ist, beginnt der neue Handler erst danach mit der Ausführung das Ende des vorherigen;
    • Dem ZIL (ZFS Intent Log) wurden Optimierungen hinzugefügt, um das Erstellen und Verarbeiten von Blöcken zu ermöglichen, wenn Blöcke vorhanden sind, die noch vom Speicher verarbeitet werden.
    • Reduzierte Registrierungszeit für Partitionen (zvol) im System. Wenn ein Pool eine große Anzahl an Partitionen enthält, sind diese jetzt sofort nach dem „zpool import“ verfügbar;
    • Unterstützung für die hardwarebeschleunigte Berechnung von SHA256-Hashes und AES-GSM-Verschlüsselungsvorgängen mithilfe von Intel QAT-Chips (Quick Assist Technology) hinzugefügt. Unterstützung für Hardwarebeschleunigung des Intel C62x-Chipsatzes und der CPU Atom C3000 hinzugefügt.

Source: opennet.ru

Kommentar hinzufügen