Nach mehr als zwei Jahren Entwicklung wurde die Version des Projekts OpenZFS 2.2 veröffentlicht, das die Implementierung des Dateisystems ZFS für Linux und FreeBSD weiterentwickelt. Das Projekt ist bekannt als „ZFS on Linux“ und war früher auf die Entwicklung eines Kernmoduls für Linux beschränkt, wurde jedoch nach der Aufnahme der Unterstützung für FreeBSD als die Hauptimplementierung von OpenZFS anerkannt und umbenannt.
Die Funktionsweise von OpenZFS wurde mit Kernel-Versionen von Linux zwischen 3.10 und 6.5 sowie allen Versionen von FreeBSD getestet, beginnend mit 12.2-RELEASE. Der Code wird unter der freien Lizenz CDDL verteilt. OpenZFS wird bereits in FreeBSD verwendet und ist in den Distributionen Debian, Ubuntu, Gentoo, Sabayon Linux und ALT Linux enthalten. Pakete mit der neuen Version werden in Kürze für die wichtigsten Linux-Distributionen vorbereitet, darunter Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS bietet eine Implementierung der ZFS-Komponenten, die sowohl die Funktionsweise des Dateisystems als auch das Management von Volumes betreffen. Insbesondere sind die Komponenten SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) und ZPL (ZFS POSIX Layer) implementiert. Darüber hinaus ermöglicht das Projekt die Nutzung von ZFS als Backend für das Cluster-Dateisystem Lustre. Die Entwicklungen des Projekts basieren auf dem ursprünglichen Code von ZFS, der aus dem OpenSolaris-Projekt importiert und durch Verbesserungen und Korrekturen 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 veröffentlicht, die nicht mit der GPLv2 kompatibel ist. Dies verhindert die Integration von OpenZFS in den Hauptzweig des Linux-Kernels, da eine Mischung von Code unter den Lizenzen GPLv2 und CDDL unzulässig ist. Um diese Lizenzinkompatibilität zu umgehen, wurde beschlossen, das Produkt vollständig unter der CDDL-Lizenz als eigenständig ladbares Modul zu vertreiben, das unabhängig vom Kernel bereitgestellt wird. Die Stabilität der OpenZFS-Codebasis wird als vergleichbar mit anderen Dateisystemen für Linux eingeschätzt.
Wesentliche Änderungen:
- Ein Klonmechanismus wurde hinzugefügt, der es ermöglicht, eine Kopie einer Datei oder eines Teils davon zu erstellen, ohne Daten zu duplizieren. Stattdessen verwendet die zweite Kopie Verweise auf bereits vorhandene Datenblöcke der ursprünglichen Datei, ohne diese tatsächlich zu kopieren. Wenn Änderungen an der ursprünglichen Datei oder ihrer Kopie vorgenommen werden, werden die Blöcke kopiert und die Änderungen in den erstellten Kopien vorgenommen (Copy-on-Write-Modus auf Dateiebene). Auf Basis des Klonmechanismus wurde die Operation reflink implementiert, die zur automatischen Erstellung von Klonen in verschiedenen Kopierwerkzeugen verwendet werden kann, beispielsweise in den neuen Versionen von /bin/cp unter Linux.
- Es wurde Unterstützung für Technologien zur Container-Isolierung in Linux hinzugefügt, wie zum Beispiel den Systemaufruf renameat, das Overlay-Dateisystem (overlayfs), die Benutzer-ID-Zuordnung beim Mounten und die Delegierung von Namensräumen für Container.
- Ein Fehlerprotokoll wurde implementiert, das während der Überprüfung von Prüfziffern (scrub) aufgetretene Fehler dokumentiert. Bei Ausführung des Befehls „zpool status“ werden Informationen über alle Dateisysteme, Snapshots und Klone angezeigt, die vom beschädigten Block betroffen sind. Zur schnellen Wiederherstellung bekannter beschädigter Blöcke kann der Befehl „zpool scrub -e“ verwendet werden.
- Die Verwendung der kryptografischen Hash-Funktion BLAKE3 für Prüfziffern wurde hinzugefügt, die sich durch eine sehr hohe Berechnungsleistung (drei Mal schneller als Edon-R und erheblich schneller als sha256 und sha512) auszeichnet und gleichzeitig die Zuverlässigkeit auf dem Niveau von SHA-3 gewährleistet.
- Der Befehl „zfs receive -c“ wurde implementiert, der zur Wiederherstellung beschädigter Daten (nicht Metadaten) in Dateisystemen, Snapshots und Klonen verwendet werden kann, wenn ein repliziertes Backup vorhanden ist, das zuvor mit dem Befehl „zfs send“ gespeichert wurde.
- Unterstützung für die Programmierung und das Auslesen von Eigenschaften für einzelne virtuelle Festplatten vdev hinzugefügt.
- Die Möglichkeit zur Bindung beliebiger benutzerdefinierter Eigenschaften an vdev und zpool ähnlich der benutzerdefinierten Eigenschaften für zfs-Datensätze wurde hinzugefügt.
- Die Implementierung des adaptiven Caches ARC (Adaptive Replacement Cache) wurde verbessert, was die Leistung bei Leseoperationen steigert. ARC passt sich nun besser an hohe Lasten an und minimiert die Notwendigkeit einer manuellen Optimierung der Einstellungen.
- Unterstützung für Hardware-Beschleunigungsmechanismen zur Berechnung von SHA2-Prüfziffern hinzugefügt.
- Die Implementierung von Edon-R-Prüfziffern wurde neu geschrieben und optimiert.
- Die Bestimmung von Situationen, in denen die Verwendung des zstd-Algorithmus zur Datenkompression sinnlos ist (Daten sind nicht komprimierbar), wurde beschleunigt.
- Verbesserungen im Vorab-Lade-Mechanismus (Prefetch) wurden vorgenommen, die die Leistung bei intensivem Ein-/Ausgabeverhalten erhöhen.
- Eine Reihe allgemeiner Optimierungen wurde durchgeführt, die die Leistung steigern.
Quelle: opennet.ru
