github openzfs/zfs zfs-2.0.0
OpenZFS 2.0.0

latest releases: zfs-2.2.4, zfs-2.1.15, zfs-2.2.3...
3 years ago

Supported Platforms

  • Unified code base and documentation - The ZFS on Linux project has been renamed OpenZFS! Both Linux and FreeBSD are now supported from the same repository making all of the OpenZFS features available on both platforms. #8987

    • Linux: compatible with 3.10 - 5.9 kernels
    • FreeBSD: Release 12.2, stable/12, 13.0 (HEAD)

Major New Features

  • Sequential resilver - The sequential resilver feature can rebuild a failed mirror vdev in a fraction of the time it would take a traditional healing resilver. Full redundancy is restored as quickly as possible and then the pool is automatically scrubbed to verify all of the data checksums. #10349

  • Persistent L2ARC - This feature makes the L2ARC cache device persistent across reboots thereby eliminating the usual cache warmup time normally needed after importing your pool. #9582

  • ZStandard compression - ZStandard is a modern, high performance, general compression algorithm which provides similar or better compression levels to GZIP, but with much better performance. ZStandard provides a large selection of compression levels to allow a storage administrator to select the preferred performance/compression trade-off. #10278

  • Redacted zfs send/receive - Redacted streams allow users to send subsets of their data to a target system. This allows users to save space by not replicating unimportant data within a given dataset or to selectively exclude sensitive information. #7958

Changes to the zpool/zfs Commands

  • zpool replace|attach -s - Perform a sequential resilver when replacing or attaching a new vdev. #10349

  • zfs wait, zpool wait - Wait for long running background operations to complete (resilver, scrub, trim, etc). #9707 #9162

  • zfs redact, zfs send --redact - Generate a redacted send stream. #7958

  • zfs send --saved - Allows a user to send a partially received dataset. #9007

  • zfs jail, zfs unjail - Attaches and detaches ZFS filesystems from FreeBSD jails. #10658

  • zfs rename -u - Renames a filesystem without needing to remount. #10839

  • zfs umount -u - Unloads keys for an encrypted filesystem when it is unmounted. #8952

  • zfs bookmark fs#target fs#newbookmark - Copying an existing bookmark to a new name. #9571

Notable Changes

  • Added fallocate(mode-0/2) compatibility to preallocate space. #10408

  • Reorganized the zfs and zpool man pages by splitting out each subcommand in to its own page. #9559 #9564

  • Enabled the systemd zfs-mount-generator by default on Linux. #7329 #8848

  • More relevant and useful ZED syslog entries #10967 #10861

  • Provided pam module for automatically loading zfs encryption keys for home datasets. #9903

  • Support for inheriting and setting user properties in channel programs. #9738 #9950

  • Improved bootloader support. #10009 #8627 #10937

  • Optionally colorized zpool status output. #9340

Performance

Deprecated functionality

  • Deduplicated send streams have been deprecated. The zfs send -D command will now print a warning, ignore the -D flag, and generate a regular (non-deduplicated) send stream. A zfs receive of a deduplicated send stream will print an error message and fail. Legacy deduplicated send streams can be received by first converting them to a non-deduplicated stream with the zstream redup command. #10117 #10156

  • The dedupditto pool property has been deprecated. It may still be set with zpool set dedupditto but won't have any effect. OpenZFS is still compatible with existing pools that have the dedupditto property enabled and can understand dedupditto blocks and free them when appropriate. However, OpenZFS won't write any new dedupditto blocks. #8310

  • The zfs_vdev_scheduler module option can still be set but will have no effect. Linux users who require this functionality should update their systems to set the disk scheduler using a udev rule. #9609

Additional Information

  • Documentation - Updated OpenZFS documentation for Linux and FreeBSD.

  • Change log - Complete v0.8.0 - v2.0.0 change log

  • Module options - The default values for the module options were selected to yield good performance for the majority of workloads and configurations. They should not need to be tuned for most systems but are available for performance analysis and tuning. See the module parameters documentation for the complete list of the options and what they control.

Added/removed/renamed module options
  • Added:
    • l2arc_meta_percent - Percent of ARC size allowed for L2ARC-only headers
    • l2arc_mfuonly - Cache only MFU data from ARC into L2ARC
    • l2arc_rebuild_blocks_min_l2size - Min size in bytes to write rebuild log blocks in L2ARC
    • l2arc_rebuild_enabled - Rebuild the L2ARC when importing a pool
    • l2arc_trim_ahead - TRIM ahead L2ARC write size multiplier
    • metaslab_unload_delay - Delay in txgs after metaslab was last used before unloading
    • metaslab_unload_delay_ms - Delay in milliseconds after metaslab was last used before unloading
    • vdev_file_logical_ashift - Logical ashift for file-based devices
    • vdev_file_physical_ashift - Physical ashift for file-based devices
    • zfetch_max_idistance - Max bytes to prefetch indirects for per stream
    • zfs_allow_redacted_dataset_mount - Allow mounting of redacted datasets
    • zfs_arc_evict_batch_limit - The number of headers to evict per sublist before moving to the next
    • zfs_arc_eviction_pct - When full, ARC allocation waits for eviction of this % of alloc size
    • zfs_arc_shrinker_limit - Limit on number of pages that ARC shrinker can reclaim at once
    • zfs_fallocate_reserve_percent - Percentage of length to use for the available capacity check
    • zfs_history_output_max - Maximum size in bytes of ZFS ioctl output that will be logged
    • zfs_initialize_chunk_size - Size in bytes of writes by zpool initialize
    • zfs_keep_log_spacemaps_at_export - Prevent the log spacemaps from being flushed and destroyed during pool export/destroy
    • zfs_livelist_condense_new_alloc - Whether extra ALLOC blkptrs were added to a livelist entry while it was being condensed
    • zfs_livelist_condense_sync_cancel - Whether livelist condensing was canceled in the synctask
    • zfs_livelist_condense_sync_pause - Set the livelist condense synctask to pause
    • zfs_livelist_condense_zthr_cancel - Whether livelist condensing was canceled in the zthr function
    • zfs_livelist_condense_zthr_pause - Set the livelist condense zthr to pause
    • zfs_livelist_max_entries - Size to start the next sub-livelist in a livelist
    • zfs_livelist_min_percent_shared - Threshold at which livelist is disabled
    • zfs_max_async_dedup_frees - Max number of dedup blocks freed in one txg
    • zfs_max_log_walking - The number of past TXGs that the flushing algorithm of the log spacemap feature uses to estimate incoming log blocks
    • zfs_max_logsm_summary_length - Maximum number of rows allowed in the summary of the spacemap log
    • zfs_max_nvlist_src_size - Maximum size in bytes allowed for src nvlist passed with ZFS ioctls
    • zfs_metaslab_max_size_cache_sec - How long to trust the cached max chunk size of a metaslab
    • zfs_metaslab_mem_limit - Percentage of memory that can be used to store metaslab range trees
    • zfs_min_metaslabs_to_flush - Minimum number of metaslabs to flush per dirty TXG
    • zfs_rebuild_max_segment - Max segment size in bytes of rebuild reads
    • zfs_recv_queue_ff - Receive queue fill fraction
    • zfs_recv_write_batch_size - Maximum amount of writes to batch into one transaction
    • zfs_send_no_prefetch_queue_ff - Send queue fill fraction for non-prefetch queues
    • zfs_send_no_prefetch_queue_length - Maximum send queue length for non-prefetch queues
    • zfs_send_queue_ff - Send queue fill fraction
    • zfs_unflushed_log_block_max - Hard limit (upper-bound) in the size of the space map log in terms of blocks.
    • zfs_unflushed_log_block_min - Lower-bound limit for the maximum amount of blocks allowed in log spacemap (see zfs_unflushed_log_block_max)
    • zfs_unflushed_log_block_pct - Tunable used to determine the number of blocks that can be used for the spacemap log, expressed as a percentage of the total number of metaslabs in the pool (e.g. 400 means the number of log blocks is capped at 4 times the number of metaslabs)
    • zfs_unflushed_max_mem_amt - Specific hard-limit in memory that ZFS allows to be used for unflushed changes
    • zfs_unflushed_max_mem_ppm - Percentage of the overall system memory that ZFS allows to be used for unflushed changes (value is calculated over 1000000 for finer granularity
    • zfs_vdev_default_ms_shift - Default limit for metaslab size
    • zfs_vdev_max_auto_ashift - Maximum ashift used when optimizing for logical -> physical sector size on new top-level vdevs
    • zfs_vdev_min_auto_ashift - Minimum ashift used when creating new top-level vdevs
    • zfs_vdev_rebuild_max_active - Max active rebuild I/Os per vdev
    • zfs_vdev_rebuild_min_active - Min active rebuild I/Os per vdev
    • zfs_zevent_retain_expire_secs - Expiration time for recent zevents records
    • zfs_zevent_retain_max - Maximum recent zevents records to retain for duplicate checking
  • Removed:
    • spl_kmem_cache_expire - By age (0x1) or low memory (0x2)
    • spl_kmem_cache_obj_per_slab_min - Minimal number of objects per slab
    • spl_kmem_cache_kmem_limit - Objects less than N bytes use the kmalloc
  • Renamed:
    • zfs_async_block_max_blocks to zfs_max_async_dedup_frees

Don't miss a new zfs release

NewReleases is sending notifications on new releases.