OpenZFS 2.0.0 Released!

Lots of important changes! As always, I recommend giving it a month or three for others to finds any issues.

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

Faster clone deletion and background freeing with zfs destroy. #8416 #10000 #10034

Faster zfs send / zfs receive performance for small record sizes. #10067 #10099

Improved zfs share scalability. #10300 #10688 #10747

More efficient ARC and memory management. #9181 #9197 #10496 #10575 #10576 #10600 #10618 #10701

Improved write performance for heavily fragmented pools. #8442

Optimized AES-GCM encryption performance. #9749 #10029

SIMD optimizations. #9517 #9539

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
3 Likes

This is awesome if works.

I wish they made option for full zpool encryption like in TC.

Might want to hold off upgrading to 2.0.0 for the time being:

Always wait for the point release. Sometimes I wait for x.x.3 or x.x.4 for good measure.

nooooooooooooooooooooooooo mem