I am planning on creating a home server with either 2 (RAID1) or 3 (RAID5) HDDs as bulk storage and 1 SSD as bcache.
The question is, what file system should I use for the HDDs? I am thinking of ext4 or xfs, as I heard btrfs is not recommended for my use case for some reason.
Do you all have some advice to give on what file system to use, as well as some other tips?
Personally I would go for ZFS with the SSD as a L2ARC. But among the options you listed I would do BTRFS RAID1 if you're only gonna use two HDDs, and mdadm RAID5 with BTRFS on top if using three.
BTRFS has RAID built into the file system - instead of using MD you use BTRFS profiles which tell the system how to handle data.
For instance
file system data (critical for the file system to function): raid1c3 which means 3 copies of core P file system data on 3 different devices
user data: raid1 (so duplicating all your data on two different devices)
With this set up you could lose one device (of n, the total doesn’t matter), and not lose any data, and still be able to boot to recover with too much hassle.
BTRFS does block checksums, can scan for bit rot and recover from it, and generally tries to make your data safe. It technically supports raid5/6 for user data, the issue is around unclean shutdowns and a potential write hole where you could lose data, but if your system has a UPS backup and is on a relatively recent kernel it’s not any more dangerous than MD raid5/6 as I understand it.
I use BTRFS for snapshots, and auto compression. Maybe it can be done with raids with LVM? AFAIK BTRFS redundancy is basically the same as traditional RAID, similar to using mdadm. Still, you would want a backup strat instead relying on the disk redundancy. I learn that the hardway.
I would absolutely recommend a file system with snapshot capabilities for a home server. One of btrfs mirror, dm-raid (raid5) with btrfs, or zfs would work. The practical differences would be negligible at this scale and you can just pick whatever you fancy.
The BTRFS thing is cutting the power or losing the disks in the middle of a write which corrupts your data. If you don't think that will be a problem then BTRFS is fine. I recommend ZFS personally, but it sounds like you want to use mdadm instead so basically anything will work.
If you might need to shrink your filesystem later then avoid XFS. EXT4 is relatively featureless but ol' reliable. ZFS is good for long term data integrity and protection. BTRFS is similar to ZFS. BcacheFS is new but like a swirl of EXT4 and BTRFS. Just pick the one with the features you want.
ZFS doesn't require a lot of RAM, but it will use more RAM if it's available. 32G would be plenty for a home setup. I think my home file server has 24 or 32G of RAM and ZFS. If it's important data then stick to what you know; there's nothing wrong with mdadm.
ZFS doesn't require lots of RAM, more RAM just improves the caching (ARC) it can do.
You can set ZFS to use all unused RAM as ARC, so it doesn't interfere with other services running on the same PC.
I ran ZFS with lots of VMs on an old office PC with 16GB RAM and it was still able to max out a 10gig nic.