Many articles with ZFS-related topics mention ZFS versions, “ZFS pool versions” and “ZFS filesystem versions”.
What are these and what do the version numbers mean?
ZFS has three main structures exposed to the user – ZFS storage pools, ZFS datasets and ZFS volumes.
A ZFS storage pool consists of one or more block devices (“vdevs”, e.g. hard drives or partitions) that operate in various modes (JBOD, mirror, RAID-Z). ZFS storage pools are operated with the “zpool” command. Each ZFS storage pool can contain ZFS volumes and ZFS datasets. ZFS volumes are virtual block devices that can be used in the operating system like any other block device. ZFS datasets are the user visible ZFS filesystems that contain files and directories and are operated with the “zfs” command.
ZFS storage pools and filesystems have received many new features. Some of these features are not backwards compatible. Each incompatible change leads to storage pool or filesystem version bump. ZFS volumes have no version numbers. ZFS is designed to be backwards compatible – systems with newer versions can operate with pools and filesystems of older versions.
Here are some general rules when working with ZFS storage pools and filesystems:
- Systems with a specific storage pool or filesystem version do work with pools or filesystems of a lower (older) version.
- Systems with a specific storage pool or filesystem verson do NOT work with pools or filesystems of a higher (newer) version.
- Pools and filesystems can be upgraded to a higher version.
- Pools and filesystems can NOT be downgraded to a lower version.
- Users can specify a custom version number when creating a new pool or filesystem or upgrading an existing one (up to the highest supported version in the system).
The following tables summarize the ZFS pool and filesystem (dataset) versions as of today (updated 18.11.2011):
|ZFS Pool Version Table|
|3||hot spares and double-parity RAIDZ|
|5||gzip compression for datasets|
|6||“bootfs” pool property|
|7||separate intent log devices|
|9||refquota and refreservation properties|
|11||improved scrub performance|
|14||passthrough-x aclinherit property|
|15||user/group space accounting|
|16||STMF property support|
|18||snapshot user holds|
|19||log device removal|
|20||compression using zle (zero-length encoding)|
|25||improved scrub stats|
|26||improved snapshot deletion performance|
|27||improved snapshot creation performance|
|28||multiple vdev replacements|
|29||RAID-Z/mirror hybrid allocator|
|31||improved ‘zfs list’ performance|
|ZFS Filesystem (Dataset) Version Table|
|2||enhanced directory entries|
|3||case insensitive and file system unique identifier (FUID)|
|4||userquota, groupquota properties|