Feature Flags
ZFS on-disk formats were originally versioned with a single number, which increased whenever the format changed. The numbered approach was suitable when development of ZFS was driven by a single organisation.
For distributed development of OpenZFS, version numbering was unsuitable. Any change to the number would have required agreement, across all implementations, of each change to the on-disk format.
OpenZFS feature flags – an alternative to traditional version numbering – allow a uniquely named pool property for each change to the on-disk format. This approach supports:
format changes that are independent
format changes that depend on each other.
Compatibility
Where all features that are used by a pool are supported by multiple implementations of OpenZFS, the on-disk format is portable across those implementations.
Features that are exclusive when enabled should be periodically ported to all distributions.
Reference materials
ZFS Feature Flags (Christopher Siden, 2012-01, in the Internet Archive Wayback Machine) in particular: “… Legacy version numbers still exist for pool versions 1-28 …”.
zpool-features(7) man page - OpenZFS
zpool-features (5) – illumos
Feature flags implementation per OS
Feature Flag | Read-Only Compatible | OpenZFS (Linux, FreeBSD 13+) | FreeBSD pre OpenZFS | Illumos | Joyent | NetBSD | Nexenta | OmniOS CE | OpenZFS on OS X | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.6.5.11 | 0.7.13 | 0.8.6 | 2.0.7 | 2.1.15 | 2.2.6 | master | 12.1.0 | 12.2.0 | master | master | 10.0 | 9.4 | main | 4.0.5-FP | master | r151048 | r151050 | master | 2.2.0 | 2.2.2 | 2.2.3rc5 | main | ||
org.zfsonlinux:allocation_classes | yes | no | no | yes | yes | yes | yes | yes | no | yes | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
com.delphix:async_destroy | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
org.openzfs:blake3 | no | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.fudosecurity:block_cloning | yes | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.datto:bookmark_v2 | no | no | no | yes | yes | yes | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
com.delphix:bookmark_written | no | no | no | no | yes | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.delphix:bookmarks | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.nexenta:class_of_storage | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no |
org.openzfs:device_rebuild | yes | no | no | no | yes | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.delphix:device_removal | no | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | no | no | no | yes | yes | yes | yes | yes | yes | yes | yes |
org.openzfs:draid | no | no | no | no | no | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
org.illumos:edonr | no | yes1 | yes1 | yes1 | yes1 | yes1 | yes1 | yes | no | no | yes | yes | no | no | no | no | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:embedded_data | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:empty_bpobj | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:enabled_txg | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.datto:encryption | no | no | no | yes | yes | yes | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
com.delphix:extensible_dataset | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.klarasystems:fast_dedup | yes | no | no | no | no | no | no | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no |
com.joyent:filesystem_limits | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:head_errlog | no | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.delphix:hole_birth | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
org.open-zfs:large_blocks | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes |
org.zfsonlinux:large_dnode | no | no | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
com.delphix:livelist | yes | no | no | no | yes | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.delphix:log_spacemap | yes | no | no | no | yes | yes | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
org.illumos:lz4_compress | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.nexenta:meta_devices | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no |
com.joyent:multi_vdev_crash_dump | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:obsolete_counts | yes | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | no | no | no | yes | yes | yes | yes | yes | yes | yes | yes |
org.zfsonlinux:project_quota | yes | no | no | yes | yes | yes | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
org.openzfs:raidz_expansion | no | no | no | no | no | no | no | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes |
com.delphix:redacted_datasets | no | no | no | no | yes | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.delphix:redaction_bookmarks | no | no | no | no | yes | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.delphix:redaction_list_spill | no | no | no | no | no | no | no | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.datto:resilver_defer | yes | no | no | yes | yes | yes | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
org.illumos:sha512 | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes |
org.illumos:skein | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:spacemap_histogram | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
com.delphix:spacemap_v2 | yes | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
org.zfsonlinux:userobj_accounting | yes | no | yes | yes | yes | yes | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
com.nexenta:vdev_properties | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no |
com.klarasystems:vdev_zaps_v2 | no | no | no | no | no | no | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
com.nexenta:wbc | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | no | no | no | no | no | no | no |
org.openzfs:zilsaxattr | yes | no | no | no | no | no | yes | yes | no | no | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
com.delphix:zpool_checkpoint | yes | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | no | no | no | no | yes | yes | yes | yes | yes | yes | yes |
org.freebsd:zstd_compress | no | no | no | no | yes | yes | yes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
Table generates by parsing manpages for feature flags, and is entirely dependent on good, accurate documentation.
Last updated on 2024-09-29T10:53:15.901808Z using compatibility_matrix.py.