Why No longer ZFS (2021)


ZFS is a hybrid filesystem and quantity manager machine that within reason in vogue lately nonetheless has some significant and unexpected concerns.

It has many trusty aspects, that are doubtlessly why it is weak: snapshots (with ship/rep suppport), checksumming, RAID of some variety (with scrubbing increase), deduplication, compression, and encryption.

But ZFS also has moderately a pair of downsides. It is rarely the suitable system to discontinue those aspects on Linux, and there are better alternate alternate suggestions.


In this put up I could refer to the ZFS on Linux mission as ZoL. It used to be renamed to OpenZFS since ZoL purchased FreeBSD increase, and FreeBSD’s grasp in-tree ZFS driver used to be deprecated in favor of trusty periodically syncing ZoL from out-of-tree.

What is “Scrubbing”? If a disk has an unrecoverable read error (URE) when reading a sector, it’s that that it is seemingly you’ll well recall to mind to repair the sphere by rewriting its contents; the bodily disk detects the rewrite over an unreadable sector and performs remapping in firmware. The RAID layer can discontinue this mechanically by counting on its redundant copy. Scrubbing is the strategy of periodically, preemtively reading every sector to test for UREs and repair them early.

Risky things about ZFS

Out-of-tree and may possibly possibly well no longer ever be mainlined

Linux drivers are greatest maintained as soon as they’re in the Linux kernel git repository alongside with the total other filesystem drivers. Here is no longer that that it is seemingly you’ll well recall to mind because ZFS is below the CDDL license and Oracle are no longer going to relicense it, if they are even legally in a space to.

Therefore trusty admire how all proprietary instrument indirectly finds a GPL implementation after which a BSD/MIT one, ZFS will indirectly be superceded by a mainline reply, so don’t derive too weak to it.

As an out-of-tree GPL-incompatible module, it is on a usual basis damaged by upstream changes on Linux the establish ZoL used to be chanced on to be abusing GPL symbols, inflicting lengthy intervals of unavailability unless a workaround will also be chanced on.

When compiled together, loaded and runnning, the resulting kernel is a combined work of every GPL and CDDL code. It’s all originate offer, nonetheless your at ease to redistribute the work to others requires your compliance with every the CDDL and GPL license which is willing to’t be satisifed simultaneously.

It’s peaceable easy to put in on Debian. They ship greatest ZoL’s offer code with a correct script that compiles the entirety to your grasp machine (zfs-dkms), so it is technically by no system redistributed on this have which satisfies every licenses.

Ubuntu ships ZFS as a part of the kernel, no longer at the same time as a separate loadable module. This redistribution of a combined CDDL/GPLv2 work is at threat of be unlawful.

Pink Hat will no longer contact this with a bargepole.

That you just can well maybe rob into myth making an attempt the fuse ZFS in preference to the in-kernel one at the least, as a userspace program it is positively no longer a combined work.

Slack performance of encryption

ZoL did workaround the Linux symbol deliver above by disabling all exercise of SIMD for encryption, lowering the performance versus an in-tree filesystem.


To first define ZFS’s custom terminology (no longer regarded as a terribly unpleasant level because even LVM2 will seemingly be responsible of the exercise of custom terminology right here):

  • A “dataset” is a filesystem that it is seemingly you’ll well mount. It’s going to be the principle filesystem and even a snapshot.
  • A “pool” is the tip-stage block plot. It’s a union span (call it RAID-0, stripe, or JBOD if you admire) of the total vdevs in the pool.
  • A “vdev” is the 2nd-stage block plot. It’s going to also be a passthrough of a single valid block plot, or a RAID of extra than one underlying block devices. RAID occurs at the vdev layer.

This RAID-X0 (stripe of mirrors) structure is rigid, that it is seemingly you’ll well’t discontinue 0X (reflect of stripes) as an different in any respect. That you just can well maybe’t stack vdevs in every other configuration.

For argument’s sake, let’s rob most runt installations would have a pool with greatest a single RAID-Z2 vdev.

Can’t add/decide disks to a RAID

That you just can well maybe’t shrink a RAIDZ vdev by taking away disks and likewise that it is seemingly you’ll well’t grow a RAIDZ vdev in by adding disks.

All that it is seemingly you’ll well discontinue in ZFS is lengthen your pool to make a complete second RAIDZ vdev and stripe your pool across it, developing a RAID60 – that it is seemingly you’ll well’t trusty have one massive RAID6. This will badly have an price to your storage efficiency.

(Right for comparison, mdadm lets you grow a RAID quantity by adding disks since 2006 and shrink by taking away disks since 2009.)

Rising a RAIDZ vdev by adding disks is at the least coming soon. It is peaceable a WIP as of August 2021 despite a breathless Ars Technica article about it in June.

There are quite loads of Ars Technica links on this blog put up. I admire Ars loads and treasure the Linux coverage, nonetheless as an influencer why are they so bullish about ZFS? It turns out all their ZFS articles are written by this particular individual that will seemingly be a mod of /r/zfs and hangs accessible loads. No longer lower than he’s highly told on the topic.

RAIDZ is slack

For some motive ZFS’s file-stage RAIDZ IOPS greatest scale per vdev, no longer per underlying plot. A 10-disk RAIDZ2 has IOPS equivalent to a single disk.

(Right for comparison, mdadm’s block-stage RAID6 will bring extra IOPS.)

File-essentially based RAID is slack

For operations equivalent to resilvering, rebuilding, or scrubbing, a block-essentially based RAID can discontinue this sequentially, whereas a file-essentially based RAID has to assemble moderately a pair of random seeks. Sequential read/write is a far extra performant workload for every HDDs and SSDs.

File-essentially based RAID presents the promise of getting to discontinue less work and warding off RAIDing the empty arena, nonetheless in discover it is outweighed greatly by this dissimilarity.

It’s especially unpleasant while you’ve got moderately a pair of runt recordsdata.

It is even worse on SMR drives, and Ars Technica blame the drives as soon as they doubtlessly will ought to have blamed ZFS’s RAID implementation.

(Right for comparison, mdadm works perfectly dazzling with these drives.)

Real-world performance is slack

Phoronix benchmarks of ext4 vs zfs in 2019 expose that ZFS does take some synthetic benchmarks nonetheless badly loses all valid-world tests to ext4.

Performance degrades faster with low free arena

It’s recommended to defend a ZFS quantity below 80 – 85% usage and even on SSDs. This implies it be significant to spend bigger drives to derive the identical usable size when compared with other filesystems.

At excessive utilization, most filesystems will rob a bit bit longer to fragment new writes into rarer free blocks, nonetheless ZFS’s deliver is on an fully totally different stage because it would not have a free-blocks bitmap in any respect.

(Right for comparison, ext4 and even NTFS assemble highly effectively as much as extremely excessive share utilization.)

Layering violation of quantity management

ZFS is every a filesystem and a quantity manager.

However, its quantity management is contemporary to its filesystem, and its filesystem is contemporary to its quantity management.

Whereas you happen to utilize ZFS’s quantity management, that it is seemingly you’ll well’t have it arrange your other drives the exercise of ext4, xfs, UFS, ntfs filesystems. And likewise that it is seemingly you’ll well’t exercise ZFS’s filesystem with every other quantity manager.

Therefore you’ll must know every the fashioned mount/umount/fstab instructions as effectively as an fully separate situation of zfs/zpool/zdb instructions and by no system the two shall meet.

On Linux you if truth be told can’t spoil out the archaic quantity manager (e.g. mount -a to your fstab is weak for swap) and likewise on FreeBSD (the establish mount on UFS is peaceable the fashioned filesystem) the establish ZFS is supposedly “better integrated”.

Here is understandable given ZFS is making an attempt to discontinue file-stage RAID, nonetheless I’ve explained that performs badly and used to be doubtlessly a unpleasant belief.

In spite of being a duplicate on write (CoW) filesystem it doesn’t increase cp --reflink. Btrfs does. Even XFS does despite being a archaic non-CoW filesystem.

Excessive reminiscence requirements for dedupe

For all intents and functions, this online deduplication feature may possibly possibly well as effectively no longer exist.

The RAM requirements are peek-wateringly excessive (e.g. 1GB per 1TB pool size may possibly possibly well no longer be sufficient), because the deduplication table (DDT) is kept in reminiscence and with out this much RAM the performance degrades greatly.

Deduplication in total presents neglegible financial savings unless presumably you’re storing moderately a pair of VM disk pictures of the identical OS. There is a correct tool to estimate the dedupe financial savings (zdb -S) nonetheless total solutions are no longer to distress with ZFS dedupe unless it’ll place you 16x storage (!!!) owing to the intense performance impact of the feature.

(By comparison lvmvdo has similarly unpleasant performance nonetheless at the least makes exercise of greatly less RAM.)

Dedupe is synchronous in preference to asynchronous

This implies that if deduplication is enabled, every single write operation has to endure read/write IOPS amplification.

(By comparison, btrfs’s deduplication and House windows Server deduplication bustle as a background job, to reclaim arena at off-top cases.)

Excessive reminiscence requirements for ARC

Linux has a unified caching machine for file operations, block IO (bio) operations, and swap, known as the catch page cache. ZFS is no longer allowed to make exercise of the Linux net page cache in any respect, because such a deep a part of Linux’s make can greatest be accessed by GPL symbols and the CDDL offer code can’t depend on them.

Therefore ZoL implements its grasp cache, the Adaptive Alternative Cache (ARC) that continually fights with the Linux net page cache for reminiscence.

The infighting deliver is mainly unpleasant nonetheless since then the heuristics were improved to the level the establish it peaceable weak >17GB of RAM trusty for the ARC.

Whereas you happen to discontinue literally one thing else on the PC rather than be a ZFS host (e.g. exercise a net browser, browse an SMB portion…) then you definately is at threat of be arena to this infighting.

If a program makes exercise of mmap, recordsdata are double-buffered in every the ARC and the Linux net page cache.

Even on FreeBSD the establish ZFS is supposedly better integrated, ZoL peaceable pretends that every OS is Solaris by the Solaris Porting Layer (SPL) and doesn’t exercise their net page cache neither. This make decision makes it a unpleasant citizen on every OS.

Even the fuse ZFS has better net page cache properties right here (despite the fact that it has lower performance fundamentally).


At time of writing there are 387 originate points with Kind: Defect label on the ZoL Github and the majority of them seem to be if truth be told significant concerns, equivalent to logic bugs, panics, assertions, striking, machine crashes, kernel null pointer dereferences, and xfstests failures.

One trusty deliver to claim regarding the ZoL mission is the triage and categorization of those bugs is effectively organized.

No disk checking tool (fsck)


In ZFS that it is seemingly you’ll well exercise zpool sure to roll serve to the final trusty snapshot, that’s better than nothing.

One in vogue excuse for the lacking tool is that the CoW data buildings are continually fixed on disk, nonetheless so is ext4 with its journalling. ZFS can peaceable derive putrid on disk for various causes:

  • merely rolling serve to the final trusty snapshot as above would not take a look at the deduplication table (DDT) and this may possibly possibly well trigger all snapshots to be unmountable
  • coupled with the above level (“Buggy”) if ZFS writes unpleasant data to the disk or writes unpleasant metaslabs, right here’s a showstopper

and so it will possibly possibly well ought to have an fsck.zfs tool that does extra repair steps than trusty exit 0.

Past complaints that are now fastened

  • no TRIM increase (added in ZoL 0.8.0 in mid 2019)

Things to make exercise of as an different

The baseline comparison may possibly possibly well peaceable trusty be ext4. Presumably on mdadm.

Then if you desire the other aspects, that it is seemingly you’ll well with out concerns derive them from either the block layer (if I overjoyed you file-stage RAID used to be a unpleasant belief), or from a filesystem (if you weren’t overjoyed), or because it’s Linux that it is seemingly you’ll well combine-and-match aspects from every as you admire.

RAID is greatest done at the block layer with mdadm. LVM2 has its grasp wrapper for this (lvraid) which is extra properly integrated, nonetheless the exercise of mdadm straight away is extra debuggable. Btrfs has a file-stage RAID feature that is okay for 0/1 nonetheless no longer for 5/6, better stick with mdadm.

Encryption is greatest done at the block layer with LUKS (cryptsetup). Btrfs has a feature for it too. Each assemble greatly better than ZFS owing to the aforementioned SIMD symbol workaround for Linux 5.0.

Snapshots will also be done with LVM2 thin swimming pools or by swapping ext4 for btrfs or (wildcard suggestion) NILFS2. LVM2 is the extra performant technique. Give a steal to for ship/rep is built-in to btrfs, and is with out concerns available for LVM2 with a utility admire lvmsync, lvm-thin-sendrcv, or thin-ship-recv.

Scrubbing merely needs to read every file from the disk so the RAID layer notices and repairs a URE. That you just can well maybe merely establish aside cat /dev/array > /dev/null on cron as soon as a month which is passable for mdadm to thought and repair UREs.

Deduplication is fundamentally no longer priceless – for VM disk pictures, it’s better to make exercise of differencing disks to your hypervisor, and for for storing backups, it’s better to make exercise of a valid deduplicating backup retailer admire borg, restic, or kopia. But that it is seemingly you’ll well with out concerns derive this if you desire, with LVM2’s new lvmvdo / kvdo and with btrfs exercise any off-top daemon equivalent to dduper or bees.

Compression is fundamentally no longer priceless – most recordsdata (e.g. Microsoft Office’s XML.zip paperwork, JPGs, binaries, …) discontinue no longer have the advantage of compression, and the recordsdata that discontinue (e.g. sqlite databases) are fundamentally sparse for performance causes. But that it is seemingly you’ll well with out concerns derive this if you desire with lvmvdo, or it’s an option in the occasion you’re making a btrfs filesystem.

Checksumming is fundamentally no longer priceless – the bodily disk already has CRC checksums at the SATA stage, and if you is at threat of be paranoid that it is seemingly you’ll well peaceable even have ECC ram to prevent integrity points in-reminiscence (applies to ZFS too), and this needs to be passable. But that it is seemingly you’ll well with out concerns derive this if you desire, either at the block layer with dm-integrity (integritysetup) below your disk or btrfs does it mechanically.

Checksumming may possibly possibly well also be done offline at the file stage by running hashdeep / cksfv on cron to make a *.sfv file of all of your file hashes. This would also be a replacement for the scrubbing job.


Whereas you happen to utilize upstream Linux aspects equivalent to mdadm, LVM2, and/or btrfs in preference to ZFS, that it is seemingly you’ll well discontinue the total identical nice developed aspects, with the side serve that it received’t spoil with any upstream kernel replace; it’s at ease; it’s faster; it if truth be told works on SMR drives; it makes exercise of less RAM; it has a valid repair tool; and it if truth be told works better with other fashioned Linux aspects.

It’s going to look admire there are extra parts to situation up, nonetheless if truth be told all these aspects may possibly possibly well peaceable be configured and enabled on ZFS too, it’s no longer if truth be told any extra efficient. ZFS also has moderately a pair of tuning parameters to situation.

In due course we’re in a position to evaluate what stratis and bcachefs provide. For terribly nice installations that it is seemingly you’ll well peaceable also rob into myth doing the erasure-coding in userspace with Ceph or OpenStack Swift.

There are doubtlessly some instances the establish ZFS peaceable is ideal and it’s though-provoking to evaluate all alternate suggestions on this arena. But fundamentally I couldn’t counsel the exercise of it.

NOW WITH OVER +8500 USERS. of us can Join Knowasiak with out cost. Register on Knowasiak.com
Read More



“Simplicity, patience, compassion.
These three are your greatest treasures.
Simple in actions and thoughts, you return to the source of being.
Patient with both friends and enemies,
you accord with the way things are.
Compassionate toward yourself,
you reconcile all beings in the world.”
― Lao Tzu, Tao Te Ching

you're currently offline