Po ponad roku prac opublikowano wersję projektu OpenZFS 2.3.0, rozwijającego implementację systemu plików ZFS dla Linux i FreeBSD. Projekt zdobył popularność jako „ZFS na Linuxie” i wcześniej ograniczał się do opracowania modułu dla jądra Linux, jednak po połączeniu z kodem z FreeBSD został uznany za podstawową implementację OpenZFS i przemianowany.
OpenZFS działa z jądrami Linux od 4.18 do 6.12 oraz ze wszystkimi gałęziami FreeBSD, począwszy od 13.3. Kod jest rozpowszechniany na podstawie wolnej licencji CDDL. OpenZFS jest już używane w FreeBSD i wchodzi w skład dystrybucji Debian, Ubuntu, Gentoo, NixOS i ALT Linux. Pakiety z nową wersją zostaną wkrótce przygotowane dla głównych dystrybucji Linux, w tym Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS zapewnia implementację komponentów ZFS, związanych zarówno z działaniem systemu plików, jak i z funkcjonowaniem menedżera woluminów. Zaimplementowane komponenty to: 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 klastra systemu plików Lustre. Osiągnięcia OpenZFS opierają się na oryginalnym kodzie ZFS, zaimportowanym z projektu OpenSolaris i rozszerzonym o ulepszenia i poprawki od społeczności Illumos. Projekt rozwija się we współpracy z pracownikami Laboratorium Narodowego w Livermore w ramach kontraktu z Departamentem Energii USA.
Kod jest rozpowszechniany na podstawie wolnej 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ść problemy z licencjami, zdecydowano się na rozprowadzanie produktu dla Linuxa całkowicie na licencji CDDL jako osobnego modułu do pobrania, dostarczanego oddzielnie od jądra. Stabilność bazy kodu OpenZFS ocenia się jako porównywalną z innymi systemami plików dla Linux.
Główne zmiany:
- Zrealizowano możliwość dodawania nowych dysków do istniejącego zestawu RAIDZ w czasie rzeczywistym, aby zwiększyć pojemność magazynu bez przerywania pracy i bez konieczności tworzenia nowej grupy pamięci. Przenoszenie nadmiarowych danych uwzględniające nowe dyski odbywa się automatycznie. Aby dodać dysk do istniejącej grupy, można użyć polecenia „zpool attach POOL raidzP-N NEW_DEVICE”, a do monitorowania zakończenia procesów w tle rozszerzania zestawu — „zpool status”.
- Zdecydowanie przyspieszono operacje związane z deduplikacją bloków danych. Optymalizacje dotyczyły między innymi formatu tabel deduplikacji, dlatego aby wykorzystać proponowane optymalizacje w już istniejących pulach, konieczne jest włączenie opcji „fast_dedup”, po czym zostaną utworzone nowe tabele deduplikacji, które będą używane równolegle ze starymi tabelami.
- Dodano tryb bezpośredniego dostępu do danych (Direct IO), który pozwala na operacje odczytu i zapisu z pominięciem pamięci podręcznej ARC (Adaptive Replacement Cache). Tryb ten zwiększa efektywność pracy w sytuacjach, gdy buforowanie może negatywnie wpłynąć na wydajność z powodu dodatkowych operacji kopiowania w pamięci, na przykład przy użyciu urządzeń NVMe.
- Do większości poleceń (zfs list|get|mount|version, zpool status|list|get|version) dodano opcję „-j” do wyjścia w formacie JSON.
- Dopuszczalny rozmiar nazw plików i katalogów zwiększono z 255 do 1023 znaków (nowy rozmiar wybrano z uwzględnieniem umieszczania 255 4-bajtowych znaków).
- Wprowadzono optymalizacje wydajności, obejmujące różne części kodu źródłowego.
- Do modułu jądra dodano opcje:
- dmu_ddt_copies
- raidz_expand_max_copy_bytes
- raidz_expand_max_reflow_bytes
- raidz_io_aggregate_rows
- spa_cpus_per_allocator
- spa_num_allocators
- zap_shrink_enabled
- zfetch_max_idistance
- zfs_active_allocator
- zfs_arc_shrinker_seeks
- zfs_dedup_log_flush_entries_min
- .zfs_dedup_log_flush_flow_rate_txgs
- zfs_dedup_log_flush_min_time_ms
- zfs_dedup_log_flush_passes_max
- zfs_dedup_log_mem_max
- zfs_dedup_log_mem_max_percent
- zfs_dedup_log_txg_max
- zfs_dio_enabled
- zfs_dio_write_verify_events_per_second
- zfs_resilver_defer_percent
- zfs_scrub_after_expand
- zfs_snapshot_no_setuid
- zfs_vdev_direct_write_verify
- zio_taskq_write_tpq
Źródło: opennet.ru
