Since OpenSolaris got discontinued, the development of open source ZFS continues at the illumos project. The main contributors are the companies Delphix, Nexenta and Joyent. In this post I am going to sum up the main user-visible changes in ZFS since the start of illumos.
This is an updated version of the article originally posted on July 9, 2012.
Major changes:
- New SPA versioning concept with zfs feature flags (issue #2747)
- First feature flag: async_destroy – asynchronous destruction of ZFS datasets (issue #2619)
- Feature flag: empty_bpobj – eliminate empty bpobjs, reduces space used by snapshots (issue #3104)
- Feature flag: lz4_compress – allow lz4 compression of datasets (issue #3035)
- Introduction of libzfs_core, a thin thread-safe library that wraps around ioctl’s (issue #2882)
- Synctask code restructuring – addresses several deadlocks, race conditions and speeds up “zfs receive” (issue #3464)
- ZFS write throttle and I/O scheduler performance improvements (issue #4045)
Minor changes:
- single-copy arc – do not cache data twice if the same block is accessed from snapshots or clones (issue #3145)
- zio nop-write – when overwriting a compressed block checksummed with sha256 with the same data, reference it (issue #3236)
- speedup in frees – parallel processing, better caching (issues #3329, #3330, #3331, #3578)
- speedup in spacemap condensing, improving write speed on heavily fragmented pools (issues #3552, #3564)
- ZFS I/O deadman thread – (optional) kernel panic on hanging I/O for better debugging (issue #3246)
- improved DTrace support in ZFS (issues #3584, #3598)
- improved ZFS send and receive performance (issue #3740)
- L2ARC compresson (issue #3137)
Changes to the “zfs” command:
- zfs does not depend on Python anymore (issue #278)
- “zfs destroy” is now capable of destroying multiple snapshots in one command (issue #1647)
- “zfs destroy -nv” now displays the estimate of space to be reclaimed (issue #1647)
- “zfs get” now accepts mountpoint as an argument (issue #510)
- “zfs get” now accepts “-t [datatype]” as an argument (issue #1936)
- “zfs rename -f” now forcibly umounts a dataset during rename (issue #2635)
- “zfs send -nv” now displays the estimate of stream size to be sent (issue #1646)
- “zfs send -v” now reports live send progress (issue #2703)
- “zfs snapshot” is now capable of creating multiple snapshots at once (issue #2900)
Changes to the “zpool” command:
- “zpool list -v” now displays the expandable space of a pool and details about its vdevs (issue #1948)
- “zpool reguid” (new) generates a new unique identifier for a pool (issue #1748)
New ZFS dataset properties:
- “aclmode” property (reintroduced) (issue #742, aclmode=restricted #3254)
- “clones” property – lists the clones of a snapshot (issue #1644)
- “refratio” property – compression ratio based on referenced data (issue #1092)
- “written” property – displays referenced space since the previous snapshot (issue #1645)
- “written@[snapshot]” property – displays referenced space since the specified snapshot (issue #1645)
- “logicalused” and “logicalreferenced” properties (issue #3588)
New ZFS pool properties:
- “comment” property – it is possible to store a comment that is displayed on zpool import (issue #1693)
All of these features but improved dtrace support been ported to FreeBSD.
Feature flags support will be available in 9.2-RELEASE and 8.4-RELEASE.