After more than a year of development, the OpenZFS 2.3.0 release has been published, advancing the ZFS file system implementation for Linux and FreeBSD. The project gained recognition as 'ZFS on Linux' and was initially limited to developing a module for the Linux kernel, but after merging with code from FreeBSD, it has been acknowledged as the main implementation of OpenZFS and renamed.
OpenZFS has been tested with Linux kernels from 4.18 to 6.12 and all FreeBSD branches starting from 13.3. The code is distributed under the open CDDL license. OpenZFS is already used in FreeBSD and is included in the distributions of Debian, Ubuntu, Gentoo, NixOS, and ALT Linux. Packages with the new version will soon be prepared for the main Linux distributions, including Debian, Ubuntu, Fedora, and RHEL/CentOS.
OpenZFS provides an implementation of ZFS components related to both file system operation and volume manager functioning. The components implemented include: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume), and ZPL (ZFS POSIX Layer). The project also allows using ZFS as a backend for the Lustre clustered file system. OpenZFS developments are based on the original ZFS code imported from the OpenSolaris project and enhanced with improvements and fixes from the Illumos community. The project is being developed with the participation of staff from the Lawrence Livermore National Laboratory under contract with the U.S. Department of Energy.
The code is distributed under the open CDDL license, which is incompatible with GPLv2, preventing the integration of OpenZFS into the main branch of the Linux kernel, as mixing code under GPLv2 and CDDL licenses is impermissible. To bypass the licensing incompatibility, it was decided to distribute the Linux product entirely under the CDDL license as a separately downloadable module, provided separately from the kernel. The stability of the OpenZFS codebase is considered comparable to other file systems for Linux.
Key Changes:
- It is now possible to add new disks to an existing RAIDZ array on the fly, increasing storage size without downtime and without the need to create a new pool of devices. The redistribution of redundant data considering the new disks is done automatically. To add a disk to an existing pool, you can use the command āzpool attach POOL raidzP-N NEW_DEVICEā, and to track the completion of the background expansion process, use āzpool statusā.
- The execution of operations related to data block deduplication has been significantly accelerated. Optimizations have affected, among other things, the deduplication table format, so to leverage the proposed optimizations in already existing pools, the āfast_dedupā option must be enabled, after which new deduplication tables will be created that will be used alongside the old tables.
- A Direct IO mode has been added, allowing read and write operations to bypass the ARC (Adaptive Replacement Cache). This mode increases efficiency in situations where caching can negatively affect performance due to additional memory copy operations, such as when using NVMe devices.
- Most commands (zfs list|get|mount|version, zpool status|list|get|version) have been enhanced with the ā-jā option to output in JSON format.
- The allowable size for file and directory names has been increased from 255 to 1023 characters (the new size has been selected based on accommodating 255 4-byte characters).
- Performance optimizations have been implemented that cover various parts of the codebase.
- Options have been added to the kernel module:
- 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
Source: opennet.ru
