Opublikowano wydanie projektu OpenZFS 2.1, rozwijającego implementację systemu plików ZFS dla Linux i FreeBSD. Projekt zyskał popularność jako „ZFS na Linuxie” i wcześniej ograniczał się do opracowania modułu dla jądra Linux, jednak po przeniesieniu wsparcia dla FreeBSD został uznany za główną implementację OpenZFS i usunięto z nazwy odniesienie do Linuxa.
Praca OpenZFS została przetestowana z jądrami Linux od 3.10 do 5.13 oraz ze wszystkimi gałęziami FreeBSD, począwszy od 12.2-RELEASE. Kod jest dystrybuowany na zasadzie wolnej licencji CDDL. OpenZFS jest już używane w FreeBSD i wchodzi w skład dystrybucji Debian, Ubuntu, Gentoo, Sabayon Linux i ALT Linux. Pakiety z nową wersją wkrótce zostaną przygotowane dla głównych dystrybucji Linux, w tym Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS zapewnia implementację komponentów ZFS, które są związane zarówno z pracą systemu plików, jak i funkcjonowaniem menedżera woluminów. W szczególności zaimplementowane zostały komponenty: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) i ZPL (ZFS POSIX Layer). Dodatkowo projekt umożliwia korzystanie z ZFS jako backendu dla klastra systemu plików Lustre. Osiągnięcia projektu opierają się na oryginalnym kodzie ZFS, zaimportowanym z projektu OpenSolaris i rozszerzonym o ulepszenia i poprawki od społeczności Illumos. Projekt rozwijany jest z udziałem pracowników Narodowego Laboratorium Lawrence'a Livermore'a na mocy umowy z Departamentem Energii USA.
Kod jest rozpowszechniany na licencji CDDL, która jest niekompatybilna z GPLv2, co uniemożliwia integrację OpenZFS z główną gałęzią jądra Linux, ponieważ mieszanie kodu objętego licencjami GPLv2 i CDDL jest niedopuszczalne. Aby obejść tę niekompatybilność licencyjną, zdecydowano się na rozpowszechnianie produktu w całości na licencji CDDL w postaci oddzielnie ładowanego modułu, która jest dostarczana oddzielnie od jądra. Stabilność bazy kodu OpenZFS ocenia się jako porównywalną z innymi systemami plików dla Linux.
Główne zmiany:
- Dodano wsparcie dla technologii dRAID (Distributed Spare RAID), która jest wariantem RAIDZ z zintegrowanym rozproszonym przetwarzaniem bloków dla gorącego odzyskiwania (hot spare). dRAID odziedziczyło wszystkie zalety RAIDZ, ale pozwala na znaczne zwiększenie prędkości rekonstruowania pamięci (resilvering) oraz przywracania nadmiarowości w macierzy. Wirtualna pamięć dRAID jest tworzona z kilku wewnętrznych grup RAIDZ, w każdej z których znajdują się urządzenia do przechowywania danych oraz urządzenia do przechowywania bloków parzystości. Wskazane grupy są rozłożone na wszystkich nośnikach w celu optymalnego wykorzystania dostępnej przepustowości dysków. Zamiast osobnego dysku do gorącego odzyskiwania w dRAID stosuje się koncepcję logicznego rozkładu bloków do gorącego odzyskiwania na wszystkich dyskach w macierzy.

- Wprowadzono właściwość „compatibility” („zpool create -o compatibility=off|legacy|file[,file…] pool vdev”), umożliwiającą administratorowi wybór zestawu funkcji, które mają być aktywowane w puli, w celu tworzenia przenośnych pul oraz utrzymania kompatybilności puł z różnymi wersjami OpenZFS i różnymi platformami.
- Zapewniono możliwość przechowywania statystyk dotyczących działania puli w formacie bazy danych InfluxDB, zoptymalizowanej do przechowywania, analizy i manipulacji danymi w postaci szeregów czasowych (próbki wartości parametrów w ustalonych odstępach czasowych). Do eksportu w formacie InfluxDB zaproponowano polecenie „zpool influxdb”.
- Dodano wsparcie dla gorącego dodawania pamięci i CPU.
- Nowe polecenia i opcje:
- „zpool create -u” — zakaz automatycznego montowania.
- «zpool history -i» — zapis history operacji z czasem wykonania każdej komendy.
- «zpool status» — dodano wyświetlanie ostrzeżeń dotyczących dysków o nieoptymalnym rozmiarze bloku.
- «zfs send —skip-missing|-s» — ignorowanie brakujących zrzutów w trakcie wysyłania strumienia do replikacji.
- «zfs rename -u» — zmiana nazwy FS bez montowania na nowo.
- W arcstat dodano wsparcie dla statystyk L2ARC oraz opcje «-a» (all) i «-p» (parsable).
- Optymalizacje:
- Zwiększona wydajność interaktywnego wejścia/wyjścia.
- Przyspieszono działanie prefetch dla obciążeń związanych z równoległym dostępem do danych.
- Poprawiono skalowalność przez zmniejszenie konfliktów blokad.
- Skrócono czas importu puli.
- Skrócona fragmentacja bloków ZIL.
- Zwiększona wydajność operacji rekurencyjnych.
- Ulepszone zarządzanie pamięcią.
- Przyspieszony załadunek modułu jądra.
Źródło: opennet.ru

