Difference between revisions of "Feature Flags"
(→Feature Flags Implementation: Add FreeBSD -CURRENT, and fix link to mm@'s site) |
|||
(10 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
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 == | |||
[http://web.archive.org/web/20160419064650/http://blog.delphix.com/csiden/files/2012/01/ZFS_Feature_Flags.pdf ''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 …". | |||
[http://illumos.org/man/5/zpool-features <tt>zpool-features</tt>](5) – illumos | |||
[https://www.freebsd.org/cgi/man.cgi?query=zpool-features&sektion=7&manpath=FreeBSD <tt>zpool-features</tt>](7) – FreeBSD | |||
== Feature flags implementation == | |||
{| class="wikitable" | {| class="wikitable" | ||
!Feature | !rowspan=2|Feature Flag | ||
!colspan= | !rowspan=2|Read-Only<br />Compatible | ||
! | !colspan=1|DragonFlyBSD | ||
!OpenZFS OSX | !colspan=3|FreeBSD | ||
! | !colspan=1|Joyent | ||
!colspan=1|NetBSD | |||
!colspan=3|OmniOSCE | |||
!colspan=1|OpenZFS | |||
!colspan=3|OpenZFS on OSX | |||
!colspan=3|ZFS on Linux | |||
|- | |- | ||
| | | zfsport | ||
| | | 11.2.0 | ||
| | | 12.0.0 | ||
| | | head | ||
| | | master | ||
| 0.6. | | main | ||
| | | r151026 | ||
| | | r151028 | ||
| master | |||
| master | |||
| 1.8.0 | |||
| 1.8.1 | |||
| master | |||
| 0.6.5.11 | |||
| 0.7.12 | |||
| master | |||
|- | |- | ||
!async_destroy | !style="text-align:left"|encryption | ||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|resilver_defer | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|async_destroy | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 35: | Line 111: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|bookmarks | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 44: | Line 130: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|device_removal | ||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 51: | Line 145: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|embedded_data | ||
|no | |style="background-color:yellow"|no | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|empty_bpobj | ||
| | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 71: | Line 187: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
!enabled_txg | !style="text-align:left"|enabled_txg | ||
| | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 80: | Line 206: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|extensible_dataset | ||
|no | |style="background-color:yellow"|no | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 89: | Line 225: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|hole_birth | ||
|no | |style="background-color:yellow"|no | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 98: | Line 244: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|obsolete_counts | ||
|no | |style="background-color:lightgreen"|yes | ||
|no | |style="background-color:lightsalmon"|no | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|spacemap_histogram | ||
| | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
Line 116: | Line 282: | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|spacemap_v2 | ||
|no | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|no | |style="background-color:lightsalmon"|no | ||
|no | |style="background-color:lightsalmon"|no | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|- | |- | ||
! | !style="text-align:left"|zpool_checkpoint | ||
|no | |style="background-color:lightgreen"|yes | ||
|no | |style="background-color:lightsalmon"|no | ||
| | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |style="background-color:lightgreen"|yes | ||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|filesystem_limits | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|multi_vdev_crash_dump | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|edonr | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|lz4_compress | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|sha512 | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|skein | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|large_block | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|allocation_classes | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|large_dnode | |||
|style="background-color:yellow"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|project_quota | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
!style="text-align:left"|userobj_accounting | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightsalmon"|no | |||
|style="background-color:lightgreen"|yes | |||
|style="background-color:lightgreen"|yes | |||
|- | |||
|} | |} | ||
Line 139: | Line 535: | ||
* yes = implemented | * yes = implemented | ||
Source: [https://zgrep.org/zfs.html] as of 20190121 |
Revision as of 05:41, 19 March 2019
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(5) – illumos
zpool-features(7) – FreeBSD
Feature flags implementation
Feature Flag | Read-Only Compatible |
DragonFlyBSD | FreeBSD | Joyent | NetBSD | OmniOSCE | OpenZFS | OpenZFS on OSX | ZFS on Linux | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
zfsport | 11.2.0 | 12.0.0 | head | master | main | r151026 | r151028 | master | master | 1.8.0 | 1.8.1 | master | 0.6.5.11 | 0.7.12 | master | ||
encryption | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | no | no | yes |
resilver_defer | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
async_destroy | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
bookmarks | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
device_removal | no | no | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | no | no | yes |
embedded_data | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
empty_bpobj | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
enabled_txg | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
extensible_dataset | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
hole_birth | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
obsolete_counts | yes | no | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | no | no | yes |
spacemap_histogram | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
spacemap_v2 | yes | no | no | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | no | no | yes |
zpool_checkpoint | yes | no | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | no | no | yes |
filesystem_limits | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
multi_vdev_crash_dump | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
edonr | no | no | no | no | no | yes | no | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
lz4_compress | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
sha512 | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
skein | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
large_block | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
allocation_classes | yes | no | no | no | no | no | no | no | no | no | no | no | no | yes | no | no | yes |
large_dnode | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | no | yes | yes |
project_quota | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
userobj_accounting | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes |
Table legend
- no = not implemented
- yes = implemented
Source: [1] as of 20190121