Overall solid but BTRFS has the advantage of being Linux native in the way it works. Right now I wouldn't use btrfs for a critical raid system but it is great for single disks.
As someone who uses btrfs mostly (sometimes ext4, but I don't really know why...), can someone explain the benefits of ZFS over the previous two I mentioned?
The two biggest benefits are that it's basically a finished implementation of btrfs (see data corruption in large pools and raid 5 and 6), as well as being able to encrypt and compress at the same time.
Plus, and I don't know if this is a ZFS-specific thing, being able to group disks into VDevs and not just into one big raid.
ZFS is more than just a filesystem, it's a fully-integrated disk management system which replaces mdadm, LVM, LUKS, nfsd, rsync, as well as the filesystem. It's great for NAS boxes and file servers, since you can give it a big pile o' disks, and it slices and dices, and offers simple commands to create whatever volumes you need.
IDK what they mean by better ssd I/O performance, btrfs was the worst FS I tested for some heavy SSD workloads (like writing thousands of little pngs in short time, file searches, merging huge weights with some paging)…
The features are fantastic, especially for HDDs, but it’s an inherently high overhead FS.
ext4 was also bad. F2FS and XFS are great, and I've stuck with F2FS for now.
I’ve seen ZFS in production use on pools with hundreds of TBs, clustered together into clusters of many PBs. The people running that don’t even think about BTRFS, and certainly won’t actively consider it for anything.
BTRFS once had data corruption bugs. ZFS also had that, but only in very specific edge cases. That case was taken very seriously, but basically, ZFS has a reputation for not fucking up your bits even close to BTRFS
ZFS was built and tested for use on large pools from the beginning, by Sun engineers from back when Sun was fucking amazing and not a pile of Oracle managed garbage. BTRFS still doesn’t have stable RAID5/6.
ZFS send/recv is amazing for remote replication of large filesystems.
DRAID is kind o the only sane thing to do with todays disk sizes, speeds and pool sizes.
But those are ancillary reasons. I’ll quote the big reason from the archwiki:
The RAID 5 and RAID 6 modes of Btrfs are fatally flawed, and should not be used for "anything but testing with throw-away data”.
For economic reasons, you need erasure coding for bigger pools, either classic RAID5/6 or DRAID. BTRFS will either melt your data in RAID5/6 or not support DRAID at all.
The main one is how it handles corruption. It has actively been designed to do the exact opposite of what a sane filesystem should do and maximises downtime.
LUKS encrypts the whole drive, native FS encryption can encrypt it partially (e.g. just the home partition). Additionally, decrypting without a keyboard is a pain or impossible (e.g. touch screen only devices).
I wish we could just get one good open, unified filesystem that all OS's support. It sucks that if I want a usb drive to function on both Android and Linux, I have to format it to FAT. That pos fs can't even store files over 4 gigs.
I normally prefer copyleft licenses, but this is one case something more permissive seems appropriate.
Weirdly enough because of the way mergerfs does writes across multiple drives, the main issue that FUSE filesystems face performance wise (namely writing a bunch of small files and their metadata) actually gets pretty well mitigated.
6 is preferable over 5 because with today's disk sizes, swapping in a new drive and resilvering it (full disk write basically in terms of amount of data) takes so long that statistically you might just encounter a second failure during that, which for raid 5 would mean complete failure of the array.
Of course, that's just an uptime issue, since raid is not backup.