That is hard to enumerate, but the following comes to mind:
The current btrfs code in Linus' tree has known data corruption bugs
that Chris Mason has yet to fix. The current ZFS code has a solid track
record for data integrity.
On Linux, the ZFS code can be updated independently of the kernel to
obtain the latest fixes. btrfs is exclusive to Linux and you need to
build the latest kernel sources to get the latest fixes.
ZFS is supported on multiple platforms. The platforms with the best
support are Solaris, FreeBSD and Linux. Other platforms with varying
degrees of support are NetBSD, Mac OS X and Windows. btrfs is exclusive
to Linux.
ZFS has the Adaptive Replacement Cache replacement algorithm while btrfs
uses the linux kernel's Last Recently Used replacement algorithm. The
former often has an overwhelmingly superior hit rate, which means fewer
disk accesses.
ZFS has the ZFS Intent Log and SLOG devices, which accelerates small
synchronous write performance.
ZFS handles internal fragmentation gracefully, such that you can fill it
until 100%. Internal fragmentation in btrfs can make btrfs think it is
full at 10%. Btrfs has no automatic rebalancing code, so it requires a
manual rebalance to correct it.
ZFS has raidz, which is like RAID 5/6 (or a hypothetical RAID 7 that
supports 3 parity disks), except it does not suffer from the RAID write
hole issue thanks to its use of CoW and a variable stripe size. btrfs
has no equivalent.
ZFS send/receive implementation supports incremental update when doing
backups. btrfs' send/receive implementation requires sending the entire
snapshot.
ZFS supports data deduplication, which is a memory hog and only works
well for specialized workloads. btrfs has no equivalent.
ZFS datasets have a hierarchical namespace while btrfs subvolumes have a
flat namespace.
ZFS has the ability to create virtual block devices called zvols in its
namespace. btrfs has no equivalent and must rely on the loop device for
this functionality, which is cumbersome.
The only area where btrfs is ahead of ZFS is in the area of small file
efficiency. btrfs supports a feature called block suballocation, which
enables it to store small files far more efficiently than ZFS. It is
possible to use another filesystem (e.g. reiserfs) on top of a ZFS zvol
to obtain similar benefits (with arguably better data integrity) when
dealing with many small files (e.g. the portage tree).
On 01/31/2013 09:08 AM, Bartosz Nitkiewicz wrote:
> What's it advantage compared to btrfs?
> Bartosz Nitkiewicz
>