Po prawie dwóch latach rozwoju wydanie , implementacja systemu plików ZFS, zaprojektowana jako moduł jądra LinuxDziałanie modułu zostało przetestowane z kernelami Linux Od wersji 2.6.32 do 5.1. Gotowe pakiety instalacyjne wkrótce. dla głównych dystrybucji Linuxw tym Debian, Ubuntu, Fedora, RHEL/CentOSModuł ZFS włączony Linux jest już uwzględniony w dystrybucjach Debian, Ubuntu, Gentoo, Sabayon Linux i ALT Linux.
W ramach ZFS na Linux Przygotowano implementację komponentów ZFS związanych zarówno z obsługą systemu plików, jak i funkcjonalnością menedżera woluminów. W szczególności zaimplementowano następujące komponenty: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) oraz ZPL (ZFS POSIX Layer). Projekt umożliwia również wykorzystanie ZFS jako zaplecza dla systemu plików klastra Lustre. Prace w ramach projektu opierają się na oryginalnym kodzie ZFS zaimportowanym z projektu OpenSolaris i rozszerzonym o ulepszenia i poprawki wprowadzone przez społeczność Illumos. Projekt jest rozwijany przy udziale pracowników Lawrence Livermore National Laboratory na podstawie umowy z Departamentem Energii Stanów Zjednoczonych.
Kod jest rozpowszechniany na podstawie bezpłatnej licencji CDDL, która jest niezgodna z licencją GPLv2, uniemożliwiając integrację z systemem ZFS Linux do głównej gałęzi jądra Linux, ponieważ mieszanie kodu objętego licencją GPLv2 i CDDL jest niedopuszczalne. Aby obejść tę niezgodność licencyjną, zdecydowano się na dystrybucję całego produktu na licencji CDDL jako oddzielnie ładowalnego modułu, dystrybuowanego niezależnie od jądra. Stabilność bazy kodu ZFS Linux ocenia się jako porównywalny z innymi FS Linux.
Główne zmiany:
- Dodano wbudowaną obsługę szyfrowania przechowywanych danych na poziomie systemu plików i partycji. Domyślnym algorytmem szyfrowania jest aes-256-ccm. Zaproponowano polecenie „zfs load-key” do ładowania kluczy szyfrujących;
- Zaimplementowano możliwość przesyłania zaszyfrowanych danych podczas wykonywania poleceń „zfs send” i „zfs receiver”. W przypadku określenia opcji „-w” dane już zaszyfrowane w puli są przesyłane do innej puli w niezmienionej postaci, bez pośredniego odszyfrowywania. Przy takim kopiowaniu dane pozostają chronione kluczem nadawcy, co pozwala na wykorzystanie tego trybu do tworzenia kopii zapasowych w niewiarygodnych systemach (w przypadku włamania się odbiorcy atakujący nie będzie mógł uzyskać dostępu do danych bez klucza);
- Dodano obsługę usuwania dysków głównych z puli pamięci, podłączonych zarówno pojedynczo, jak i jako część kopii lustrzanej. Usuwanie odbywa się za pomocą polecenia „zpool remove”. Proces usuwania kopiuje dane z wykluczonego dysku na pozostałe dyski podstawowe w puli;
- Dodano polecenie „zpool checkpoint”, aby zapisać aktualny stan puli z możliwością cofnięcia dalszych zmian do zapisanego punktu w czasie (tworzona jest migawka całej puli). Ta funkcja może być przydatna w procesie wykonywania potencjalnie niebezpiecznych skomplikowanych prac administracyjnych, które w normalnych warunkach prowadzą do nieodwracalnych zmian (np. aktywacja flag dla nowej funkcjonalności ZFS lub wyczyszczenie danych);
- Dodano polecenie „zpool trim”, aby informować dyski używane w puli o sektorach, które nie są już używane. Zastosowanie operacji TRIM umożliwia zwiększenie wydajności dysków SSD i zapobieganie degradacji ich wydajności. Zaproponowano nową właściwość „autotrim”, aby umożliwić ciągły proces przesyłania poleceń TRIM w tle;
- Dodano polecenie „zpool initialize” do inicjalizacji całego nieprzydzielonego miejsca na dysku, co pozwala na natychmiastową gotowość do użycia, bez pogorszenia wydajności przy pierwszym dostępie (na przykład podczas hostowania zwirtualizowanych pamięci masowych, takich jak VMware VMDK);
- Dodano obsługę limitów rozliczania i na poziomie projektu, oprócz wcześniej dostępnych limitów na poziomie użytkownika i grupy. W istocie projekty to wydzielona przestrzeń obiektów powiązana z odrębnym identyfikatorem (identyfikatorem projektu). Wiązanie jest definiowane za pomocą operacji „chattr -p” lub poprzez dziedziczenie atrybutów. Do zarządzania projektami prezentowane są polecenia „zfs project” i „zfs projectspace”, które pozwalają zarządzać tworzeniem projektów i ustawiać dla nich limity miejsca na dysku;
- Dodano możliwość tworzenia skryptów Lua w celu automatyzacji różnych prac z ZFS. Skrypty są uruchamiane w specjalnych izolowanych środowiskach za pomocą polecenia „zpool program”;
- Wdrożono nową bibliotekę , który zapewnia stabilne API do administrowania ZFS z poziomu aplikacji Pythona. Biblioteka jest opakowaniem wokół libzfs_core i zapewnia identyczny zestaw funkcji, ale używa bliższych typów Pythona;
- Narzędzia arcstat, arcsummary i dbufstat zostały dostosowane do języka Python 3. Nazwy narzędzi arcstat.py, arc_summary.py i dbufstat.py zostały zmienione na wersje bez rozszerzenia „.py”;
- Dodano obsługę interfejsu jądra Linux Bezpośrednie wejście/wyjście (O_DIRECT) umożliwiające dostęp do danych bez buforowania i z pominięciem pamięci podręcznej;
- Wprowadzono optymalizacje wydajności:
- Działanie komend „scrub” i „resilver” zostało przyspieszone dzięki podziale na dwie fazy (osobna faza została przeznaczona na skanowanie metadanych i określanie lokalizacji bloków z danymi na dysku, co umożliwia dalszą weryfikację z wykorzystaniem danych sekwencyjnych czytanie);
- Dodano obsługę klas alokacji,
umożliwienie łączenia stosunkowo małych dysków SSD i używania ich do przechowywania tylko niektórych typów powszechnie używanych bloków, takich jak metadane, dane DDT i małe bloki plików; - Poprawiona wydajność poleceń administratora, takich jak
„zfs list” i „zfs get”, buforując metadane niezbędne do ich działania; - Dodano obsługę równoległości operacji alokacji bloków poprzez uruchamianie oddzielnych procesów alokacji dla każdej grupy metaslab. Na konwencjonalnych systemach następuje wzrost wydajności o 5-10%, ale na dużych (8 128 GB SSD, 24 rdzenie NUMA, 256 GB RAM) wzrost operacji alokacji bloków może osiągnąć 25%;
- Dodano możliwość odroczenia wykonania komendy „resilver” (przebudowy dystrybucji danych z uwzględnieniem zmian w konfiguracji dysków) - jeżeli poprzednia jeszcze się nie zakończyła przy uruchamianiu nowej operacji, to nowy handler rozpocznie wykonywanie dopiero po koniec poprzedniego;
- Do ZIL (ZFS Intent Log) dodano optymalizacje, aby umożliwić tworzenie i przetwarzanie bloków w obecności bloków, które są nadal przetwarzane przez magazyn;
- Skrócono czas rejestracji partycji (zvol) w systemie. Kiedy pula zawiera dużą liczbę partycji, są one teraz dostępne natychmiast po wykonaniu „importu zpool”;
- Dodano obsługę przyspieszanego sprzętowo obliczania skrótów SHA256 i operacji szyfrowania AES-GSM przy użyciu chipów Intel QAT (Quick Assist Technology). Dodano obsługę akceleracji sprzętowej chipsetu Intel C62x i procesora Atom C3000.
Źródło: opennet.ru
