- Using parity rather than mirroring. I'm happy to deal with some loss of IOPS in exchange for extra usable storage.
- That deals with bitrot.
- That I can migrate to without somehow moving all of my files somewhere first (i.e. supports addition/removal of disks).
- Is stable (doesn't frequently crash or lose data)
- Is free or has transparent pricing (not "Contact Sales").
- Ideally, supports arbitrary stripe width (i.e. 2 blocks data + 1 block parity on a 6 disk array)
Unfortunately it doesn't appear that a solution for this exists:
- ZFS doesn't support addition of disks unless you're happy to put a RAID0 on top of your RAID5/6 and it doesn't support removal of disks at all when parity is involved. It is possible to migrate by putting giant sparse files on the existing storage, filling the filesystem, removing a sparse file, removing a disk from the original FS and "replacing" the sparse file with the actual disk but this is somewhat risky.
- BTRFS has critical bugs and has been unstable even with my RAID1 filesystem.
- Ceph mostly works but I always seem to run into bugs that nobody else sees.
- I couldn't even figure out how to get GlusterFS to create a volume.
- MDADM/hardware RAID don't deal with bitrot.
- Minio has hard coded N/2 data N/2 parity erasure coding, which destroys IOPS and drastically reduces capacity in exchange for an obscene level of resiliency I don't need.
- FlexRAID either isn't realtime or doesn't deal with bitrot depending which version you choose.
- Windows storage spaces are slow as a dog (4 disks = 25MB/s write).
- QuoByte, the successor to XtreemFS has erasure coding but has "Contact Us" pricing and trial.
- Openstack Swift is complex as hell.
- BcacheFS seems extremely promising but it's still in development and EC isn't available yet.
I'm currently down to fixing bugs in Ceph, modifying Minio, evaluating Tahoe-LAFS and EMC ScaleIO or building my own solution.