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 Oracle alone.
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(5) – illumos
zpool-features(7) – FreeBSD
Feature flags implementation
Feature flag | FreeBSD | ZFS on Linux | OpenZFS OSX | OmniOS | |||
---|---|---|---|---|---|---|---|
8.4 | 9.3 | 10.2 | r283009 | 0.6.5 | 1.4.5 | r151014 | |
async_destroy | yes | yes | yes | yes | yes | yes | yes |
empty_bpobj | yes | yes | yes | yes | yes | yes | yes |
lz4_compress | yes | yes | yes | yes | yes | yes | yes |
multi_vdev_crash_dump | no | yes | yes | yes | no | no | yes |
spacemap_histogram | no | yes | yes | yes | yes | yes | yes |
enabled_txg | no | yes | yes | yes | yes | yes | yes |
hole_birth | no | yes | yes | yes | yes | yes | yes |
extensible_dataset | no | yes | yes | yes | yes | yes | yes |
embedded_data | no | no | yes | yes | yes | yes | yes |
bookmarks | no | yes | yes | yes | yes | yes | yes |
filesystem_limits | no | yes | yes | yes | yes | yes | yes |
large_blocks | no | no | yes | yes | yes | yes | yes |
Table legend
- no = not implemented
- yes = implemented
Source: OpenZFS Feature Flags Compatibility Matrix - VX weblog