Dopo oltre un anno di sviluppo, è stato pubblicato il rilascio del progetto OpenZFS 2.3.0, che sviluppa l'implementazione del file system ZFS per Linux e FreeBSD. Il progetto è diventato noto come 'ZFS su Linux' e in precedenza si concentrava esclusivamente sullo sviluppo di un modulo per il kernel Linux, ma dopo la fusione con il codice FreeBSD è stato riconosciuto come l'implementazione principale di OpenZFS e rinominato.
Il funzionamento di OpenZFS è stato verificato con i kernel Linux dalla versione 4.18 alla 6.12 e con tutte le versioni di FreeBSD a partire dalla 13.3. Il codice è distribuito sotto la licenza libera CDDL. OpenZFS è già utilizzato in FreeBSD e fa parte delle distribuzioni Debian, Ubuntu, Gentoo, NixOS e ALT Linux. I pacchetti con la nuova versione saranno presto preparati per le principali distribuzioni Linux, incluse Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS offre un'implementazione dei componenti ZFS sia per il funzionamento del file system che per il funzionamento del gestore di volumi. Sono stati implementati componenti come: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (Volume Emulato ZFS) e ZPL (ZFS POSIX Layer). Il progetto consente anche di utilizzare ZFS come backend per il file system cluster Lustre. I lavori di OpenZFS si basano sul codice originale di ZFS, importato dal progetto OpenSolaris e ampliato con miglioramenti e correzioni della comunità Illumos. Il progetto si sviluppa con la partecipazione dei dipendenti del Lawrence Livermore National Laboratory sotto contratto con il Dipartimento dell'Energia degli Stati Uniti.
Il codice è distribuito con licenza open source CDDL, che non è compatibile con GPLv2, il che impedisce l'integrazione di OpenZFS nel ramo principale del kernel Linux, poiché la mescolanza di codice sotto GPLv2 e CDDL non è consentita. Per ovviare a questa incompatibilità di licenza, è stata decisa la distribuzione del prodotto per Linux interamente sotto licenza CDDL, come modulo caricabile separatamente, fornito separatamente dal kernel. La stabilità della base di codice di OpenZFS è valutata come comparabile ad altri file system per Linux.
Principali modifiche:
- È stata implementata la possibilità di aggiungere dischi nuovi a un array RAIDZ esistente per aumentare la capacità di archiviazione senza interrompere il funzionamento e senza la necessità di creare un nuovo gruppo di dischi. La ridistribuzione dei dati ridondanti tenendo conto dei nuovi dischi avviene automaticamente. Per aggiungere un disco a un gruppo esistente, è possibile utilizzare il comando "zpool attach POOL raidzP-N NEW_DEVICE", mentre per monitorare la fine del processo in background di espansione dell'array si utilizza "zpool status".
- È stato notevolmente accelerato l'esecuzione delle operazioni relative alla deduplicazione dei blocchi di dati. Le ottimizzazioni, tra le altre cose, hanno riguardato il formato delle tabelle di deduplicazione; pertanto, per attivare le ottimizzazioni proposte nei pool esistenti, è necessario abilitare l'opzione "fast_dedup", a seguito della quale verranno create nuove tabelle di deduplicazione che saranno utilizzate parallelamente a quelle esistenti.
- È stata aggiunta la modalità di input/output diretto (Direct IO), che consente di eseguire operazioni di lettura e scrittura bypassando la cache ARC (Adaptive Replacement Cache). Questa modalità migliora l'efficienza in scenari in cui la caching può influire negativamente sulle prestazioni a causa delle operazioni di copia in memoria, ad esempio quando si utilizzano dispositivi NVMe.
- La maggior parte dei comandi (zfs list|get|mount|version, zpool status|list|get|version) ha ora l'opzione «-j» per l'output in formato JSON.
- La dimensione consentita per i nomi di file e directory è aumentata da 255 a 1023 caratteri (la nuova dimensione è stata scelta considerando l'allocazione di 255 caratteri 4-byte).
- Sono state effettuate ottimizzazioni delle prestazioni che riguardano diverse parti della base di codice.
- Sono state aggiunte al modulo del kernel le seguenti opzioni:
- 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
Fonte: opennet.ru
