Na meer dan een jaar ontwikkeling is de release van het OpenZFS 2.3.0-project uitgekomen, dat de implementatie van het bestandssysteem ZFS voor Linux en FreeBSD verder ontwikkelt. Het project heeft bekendheid verworven als 'ZFS on Linux' en was aanvankelijk beperkt tot de ontwikkeling van een module voor de Linux-kernel, maar na de fusie met de code van FreeBSD werd het erkend als de belangrijkste implementatie van OpenZFS en hernoemd.
Het OpenZFS-werk is getest met Linux-kernels van 4.18 tot 6.12 en alle takken van FreeBSD, beginnend met 13.3. De code wordt verspreid onder de open source-licentie CDDL. OpenZFS wordt al gebruikt in FreeBSD en is opgenomen in distributies zoals Debian, Ubuntu, Gentoo, NixOS en ALT Linux. Pakketten met de nieuwe versie zullen binnenkort worden voorbereid voor de belangrijkste Linux-distributies, waaronder Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS biedt een implementatie van ZFS-componenten die zowel verband houden met de werking van het bestandssysteem als met de werking van de volumemanager. GeĆÆmplementeerde componenten zijn: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) en ZPL (ZFS POSIX Layer). Het project stelt ook in staat om ZFS te gebruiken als backend voor het clusterbestandssysteem Lustre. De ontwikkelingen van OpenZFS zijn gebaseerd op de originele ZFS-code, geĆÆmporteerd uit het OpenSolaris-project en uitgebreid met verbeteringen en correcties van de Illumos-gemeenschap. Het project wordt ontwikkeld met deelname van medewerkers van het Lawrence Livermore National Laboratory onder contract met het Amerikaanse Ministerie van Energie.
De code wordt verspreid onder de open source-licentie CDDL, die incompatibel is met GPLv2, wat integratie van OpenZFS in de hoofdbranch van de Linux-kernel belemmert, aangezien het mengen van code onder de GPLv2- en CDDL-licenties niet is toegestaan. Om deze licentie-incompatibiliteit te omzeilen, is besloten om het product voor Linux volledig onder de CDDL-licentie te verspreiden als een afzonderlijk te downloaden module, die apart van de kernel wordt geleverd. De stabiliteit van de OpenZFS-codebasis wordt beoordeeld als vergelijkbaar met andere bestandssystemen voor Linux.
Belangrijkste wijzigingen:
- Er is de mogelijkheid geĆÆmplementeerd om nieuwe schijven on-the-fly toe te voegen aan een bestaand RAIDZ-array om de opslagcapaciteit te vergroten zonder de werking te onderbreken en zonder een nieuwe opslaggroep te hoeven aanmaken. Het herschikken van redundante gegevens rekening houdend met de nieuwe schijven gebeurt automatisch. Voor het toevoegen van een schijf aan een bestaande groep kan het commando 'zpool attach POOL raidzP-N NEW_DEVICE' worden gebruikt, en om de voltooiing van het achtergrondproces van het uitbreiden van de array te volgen ā 'zpool status'.
- De uitvoering van operaties met betrekking tot de deduplicatie van datablocks is aanzienlijk versneld. Optimalisaties betroffen onder andere het formaat van de deduplicatietabellen, daarom moet de optie "fast_dedup" worden ingeschakeld om gebruik te maken van de voorgestelde optimalisaties in bestaande pools, waarna nieuwe deduplicatietabellen worden aangemaakt die parallel aan de oude tabellen zullen worden gebruikt.
- Een directe invoer-/uitvoermodus (Direct IO) is toegevoegd, waarmee lees- en schrijfoperaties buiten de ARC-cache (Adaptive Replacement Cache) om kunnen plaatsvinden. Deze modus verhoogt de efficiëntie in situaties waar caching de prestaties negatief kan beïnvloeden door extra kopieerbewerkingen in het geheugen, bijvoorbeeld bij het gebruik van NVMe-apparaten.
- De meeste commando's (zfs list|get|mount|version, zpool status|list|get|version) hebben de optie "-j" gekregen voor output in JSON-formaat.
- De toegestane grootte van bestands- en mappenamen is vergroot van 255 naar 1023 karakters (de nieuwe grootte is gekozen met het oog op de plaatsing van 255 4-byte karakters).
- Er zijn prestatieoptimalisaties doorgevoerd die verschillende onderdelen van de codebasis bestrijken.
- De volgende opties zijn aan de kernelmodule toegevoegd:
- 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
Bron: opennet.ru
