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