Po prawie dwóch latach prac rozwojowych wydanie , implementacja systemu plików ZFS, zrealizowana jako moduł jądra Linux. Działanie modułu zostało sprawdzone z jądrami Linux od wersji 2.6.32 do 5.1. Gotowe pakiety instalacyjne będą dostępne wkrótce dla głównych dystrybucji Linuxa, w tym Debian, Ubuntu, Fedora, RHEL/CentOS. Moduł ZFS na Linuxa jest już częścią dystrybucji Debian, Ubuntu, Gentoo, Sabayon Linux oraz ALT Linux.
W ramach ZFS na Linuxa przygotowano realizację komponentów ZFS, związanych zarówno z działaniem systemu plików, jak i funkcjonowaniem menedżera woluminów. W szczególności zrealizowano komponenty: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) oraz ZPL (ZFS POSIX Layer). Dodatkowo projekt umożliwia korzystanie z ZFS jako backendu dla klastra systemu plików Lustre. Prace nad projektem opierają się na oryginalnym kodzie ZFS zaimportowanym z projektu OpenSolaris oraz rozszerzonym o poprawki i ulepszenia od społeczności Illumos. Projekt rozwija się przy współpracy pracowników Narodowego Laboratorium Lawrence'a Livermore'a w ramach kontraktu z Departamentem Energetyki USA.
Kod jest udostępniany na licencji CDDL, która jest niezgodna z GPLv2, co uniemożliwia integrację ZFS na Linuxie z główną gałęzią jądra Linux, ponieważ mieszanie kodu objętego licencjami GPLv2 i CDDL jest niedopuszczalne. Aby obejść tę niezgodność licencyjną, zdecydowano się udostępnić produkt w całości na licencji CDDL w formie oddzielnie pobieranego modułu, który jest dostarczany oddzielnie od jądra. Stabilność bazy kodu ZFS na Linuxie jest oceniana jako porównywalna z innymi systemami plików dla Linux.
Główne zmiany:
- Dodano wbudowane wsparcie dla szyfrowania danych przechowywanych na poziomie systemu plików i partycji. Domyślnie do szyfrowania używany jest algorytm aes-256-ccm. Do załadowania kluczy szyfrowania zaproponowano polecenie „zfs load-key”;
- Zrealizowano możliwość przesyłania zaszyfrowanych danych przy wykonywaniu poleceń „zfs send” i „zfs receive”. Przy podaniu opcji „-w” już zaszyfrowane dane w puli są przesyłane do innej puli w niezmienionej formie, bez pośredniego odszyfrowania. Podczas takiego kopiowania dane pozostają zabezpieczone kluczem strony wysyłającej, co pozwala na użycie tego trybu do tworzenia kopii zapasowych na systemach, którym nie można zaufać (w przypadku kompromitacji odbiorcy, bez klucza atakujący nie będzie miał dostępu do danych);
- Dodano wsparcie dla usuwania głównych dysków z puli pamięci, podłączonych zarówno pojedynczo, jak i w ramach lustra. Usuwanie odbywa się za pomocą polecenia „zpool remove”. W trakcie usuwania dane z dysku wyłączanego są kopiowane na pozostałe w puli główne dyski;
- Dodano polecenie „zpool checkpoint” do zapisywania bieżącego stanu puli z możliwością przywrócenia dalszych zmian do zapisanego momentu (tworzy zrzut całej puli). Ta funkcjonalność może być przydatna podczas wykonywania potencjalnie niebezpiecznych skomplikowanych prac administracyjnych, które zazwyczaj prowadzą do nieodwracalnych zmian (np. aktywacja flag nowej funkcjonalności ZFS lub czyszczenie danych);
- Dodano polecenie „zpool trim”, które umożliwia informowanie używanych w puli dysków o sektorach, które nie są już wykorzystywane. Zastosowanie operacji TRIM pozwala zwiększyć wydajność dysków SSD i zapobiegać degradacji ich wydajności. Aby włączyć ciągły proces tła przesyłania poleceń TRIM, zaproponowano nową właściwość „autotrim”;
- Dodano polecenie „zpool initialize” do inicjalizacji całej nieprzydzielonej przestrzeni dyskowej, co pozwala zapewnić jej natychmiastową gotowość do użycia, bez obniżania wydajności przy pierwszym dostępie (np. przy umieszczaniu zirtualizowanych pamięci, takich jak VMware VMDK);
- Dodano wsparcie dla księgowości i limitów na poziomie projektu, uzupełniających wcześniej dostępne limity na poziomie użytkownika i grupy. Projekty to w istocie oddzielna przestrzeń obiektów, związana z oddzielnym identyfikatorem (project ID). Związanie jest określane przez operację „chattr -p” lub przez dziedziczenie atrybutów. Do zarządzania projektami wprowadzono polecenia „zfs project” i „zfs projectspace”, które pozwalają na zarządzanie tworzeniem projektów i ustalanie dla nich limitów przestrzeni dyskowej;
- Dodano możliwość tworzenia skryptów Lua do automatyzacji różnych prac z ZFS. Skrypty są uruchamiane w specjalnych izolowanych środowiskach za pomocą polecenia „zpool program”;
- Wdrożono nową bibliotekę , zapewniającej stabilne API do zarządzania ZFS z aplikacji napisanych w Pythonie. Biblioteka jest powłoką nad libzfs_core i oferuje identyczny zestaw funkcji, ale używa typów bardziej zbliżonych do Pythona;
- Zapewnia kompatybilność narzędzi arcstat, arcsummary i dbufstat z Pythonem 3. Narzędzia arcstat.py, arc_summary.py i dbufstat.py zostały przemianowane na wersje bez rozszerzenia „.py”;
- Dodano wsparcie dla interfejsu jądra Linux Direct IO (O_DIRECT), umożliwiającego dostęp do danych bez buforowania i z pominięciem pamięci podręcznej;
- Wprowadzono optymalizacje wydajności:
- Przyspieszono działanie poleceń „scrub” i „resilver” dzięki podziałowi na dwie fazy (wydzielono osobną fazę na skanowanie metadanych i określenie lokalizacji bloków danych na dysku, co pozwala na przeprowadzenie dalszej weryfikacji z wykorzystaniem sekwencyjnego odczytu danych);
- Dodano wsparcie dla klas alokacji danych (Allocation classes),
, które umożliwiają włączenie do puli stosunkowo niewielkich dysków SSD i wykorzystanie ich do przechowywania tylko wybranych typów często używanych bloków, takich jak metadane, dane DDT i małe bloki z plikami; - Zwiększono wydajność poleceń do zarządzania, takich jak
„zfs list” i „zfs get”, dzięki buforowaniu wymaganych do ich działania metadanych; - Dodano wsparcie dla równoległego wykonywania operacji alokacji bloków poprzez uruchomienie osobnych procesów „allocator” dla każdej grupy metaslab. Na zwykłych systemach zaobserwowano wzrost wydajności na poziomie 5-10%, ale na dużych systemach (8 128 GB SSD, 24 rdzenie NUMA, 256 GB RAM) przyrost operacji alokacji bloków może wynosić 25%;
- Dodano możliwość opóźnionego wykonania polecenia „resilver” (rekonstrukcja dystrybucji danych z uwzględnieniem zmiany konfiguracji dysków) — jeśli podczas uruchamiania nowej operacji poprzednia jeszcze się nie zakończyła, nowy procesor zacznie działać dopiero po zakończeniu pracy poprzedniego;
- W dzienniku ZIL (ZFS Intent Log) wprowadzono optymalizacje, które umożliwiają tworzenie i przetwarzanie bloków w obecności bloków, które są jeszcze przetwarzane przez przechowalnię;
- Skrócono czas rejestracji podziałów (zvol) w systemie. Gdy pula zawiera dużą liczbę podziałów, stają się one teraz dostępne natychmiast po wykonaniu „zpool import”;
- Dodano wsparcie dla sprzętowego przyspieszenia obliczeń hash SHA256 oraz operacji szyfrowania AES-GSM z wykorzystaniem chipów obsługujących technologię Intel QAT (Quick Assist Technology). Dodano wsparcie dla sprzętowego przyspieszenia chipów Intel C62x oraz procesora Atom C3000.
Źródło: opennet.ru
