• That power situation looks suspicious. You better know what you’re doing so you don’t run into undercurrent events under load.
  • Use ZFS RAIDz1 instead of RAID 5.

Ultimately I would love to use ZFS but I read that it’s difficult to expand/upgrade. Not familiar with ZFS RAIDz1 though, I’ll look into it. Thanks!

I build robots for a living, the power is fine, at least for a rough draft. I’ll clean everything up once the enclosure is set up.

Easier to expand than a typical raid 5 array
This. Also it’s not difficult to expand at all. There are multiple ways. Just ask here. You could also ask for hypothetical scenarios now if you like.
Could also google it lol

Z1 is just single parity.

Sweet build! I have all these parts laying around so this would be a fun project. Please share your enclosure design if you’d like!

Basically the equivalent of RAID 5 in terms of redundancy.

You don’t even need to do RAIDz expansion, although that feature could save some space. You can just add another redundant set of disks to the existing one. E.g. have a 5-disk RAIDz1 which gives you the space of 4 disks. Then maybe slap on a 2-disk mirror which gives you the space of 1 additional disk. Or another RAIDz1 with however many disks you like. Or a RAIDz2, etc. As long as the newly added space has adequate redundancy of its own, it can be seamlessly added to the existing one, “magically” increasing the available storage space. No fuss.

Awesome. It’s my understanding that ZFS can help prevent bit rot, so would ZFS RAIDz1 also do this?

I found this, it seems to show all the steps I would need to take to install RAIDz1: jeffgeerling.com/…/htgwa-create-zfs-raidz1-zpool-…

HTGWA: Create a ZFS RAIDZ1 zpool on a Raspberry Pi | Jeff Geerling

Yes, it prevents bit rot. It’s why I switched to it from the standard mdraid/LVM/Ext4 setup I used before.

The instructions seem correct but there’s some room for improvement.

Instead of using logical device names like this:

sudo zpool create zfspool raidz1 sda sdb sdc sdd sde -f

You want to use hardware IDs like this:

sudo zpool create zfspool raidz1 /dev/disk/by-id/ata-ST8000VN0022-2EL112_ZA2FERAP /dev/disk/by-id/wwn-0x5000cca27dc48885 ...

You can discover the mapping of your disks to their logical names like this:

ls -la /dev/disk/by-id/*

Then you also want to add these options to the command:

sudo zpool create -o ashift=12 -o autotrim=on -O acltype=posixacl -O compression=lz4 -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa zfspool ...

These do useful things like setting optimal block size, compression (basically free performance), a bunch of settings that make ZFS behave like a typical Linux filesystem (its defaults come from Solaris).

Your final create command should look like:

sudo zpool create -o ashift=12 -o autotrim=on -O acltype=posixacl -O compression=lz4 -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa zfspool raidz1 /dev/disk/by-id/ata-ST8000VN0022-2EL112_ZA2FERAP /dev/disk/by-id/wwn-0x5000cca27dc48885 ...

You can experiment till you get your final creation command since creation/destruction is nearly instant. Don’t hesitate to create/destroy multiple times till you got it right.

Updated ☝️ 👇
Doesn’t losing a vdev cause the entire pool to be lost? I guess to your point with sufficient redundancy for new vdev 1 drive redundancy whether 3 disks or 5 is essentially the same risk. If a vdev is added without redundancy that would increase risk of losing the entire pool.
ZFS, specifically RaidZx, can be expanded like and raid 5/6 these days, assuming support from the distro (works with TrueNAS for example). The patches for this have been merged years ago now. Expanding any other array (like a striped mirror) is even simpler and is done by adding VDevs.

ZRAID expansion is now better than ever before!

In the beginning of this year (with ZFS 2.3.0) they added zero-downtime expansion along with some other things like enhanced deduplication.

openzfs/zfs zfs-2.3.0 on GitHub

New release openzfs/zfs version zfs-2.3.0 on GitHub.

ZFS is so… So much better. In every single way. Change now before it’s too pate, learn and use the features as you go.