Je hebt zes schijven liggen, een server die stof staat te happen en het plan om eindelijk die chaotische heap externe harde schijven te vervangen door iets degelijks. ZFS klinkt geweldig op papier — checksums, snapshots, self-healing — maar zodra je de documentatie opent dwaalt je blik af naar de badkamer. Begrijpelijk. Deze gids snijdt door het jargon en geeft je de concrete commando's die je nodig hebt om een werkende RAIDZ2-pool te draaien op Ubuntu 24.04, inclusief automatische scrubs en e-mailalerts die je wakker houden als er iets mis is.

Waarom RAIDZ2 en niet RAIDZ1

RAIDZ1 lijkt aantrekkelijk: je offert slechts één schijf op aan pariteit en hebt maximale capaciteit. Met vijf schijven van 4 TB houd je 16 TB over. Probleem is dat RAIDZ1 je slechts beschermt tegen het uitvallen van één schijf. Valt tijdens een rebuild een tweede schijf uit — en dat is precies het moment waarop schijven overlijden, want ze worden als nooit tevoren belast — dan ben je alles kwijt.

RAIDZ2 voegt een tweede pariteitsschijf toe. Je pool kan twee gelijktijdige schijfdefecten overleven. Met zes schijven van 4 TB houd je 16 TB over (4 TB × 4 data-schijven), terwijl je bij een rebuild nog een extra buffer hebt. Voor een thuisserver of kleine bedrijfsNAS met waardevolle data is RAIDZ2 de minimum verstandige keuze.

RAIDZ3 — drie pariteitsschijven — is beschikbaar maar zinvol alleen bij acht of meer schijven waar de rebuild-tijd dagenlang duurt. Voor zes tot acht schijven is RAIDZ2 de sweet spot.

"Een rebuild op een 8 TB schijf duurt bij RAIDZ1 al gauw 24 uur. In die 24 uur draait jouw array op één schijf minder, met verhoogde I/O en verhoogde kans op een tweede defect. RAIDZ2 is geen paranoia — het is statistisch verantwoord."

OpenZFS 2.3, uitgebracht in januari 2025, heeft hier bovendien iets interessants aan toegevoegd: RAIDZ Expansion. Je kunt nu een extra schijf aan een bestaande RAIDZ-vdev toevoegen zonder downtime. De data wordt herschreven over alle schijven inclusief de nieuwe. TrueNAS Scale 24.10 "Electric Eel" was de eerste grote distributie die dit feature ondersteunde.

Hardware-overwegingen voor je pool

Voordat je een enkel commando intypt, zijn er drie hardware-beslissingen die je pool voor altijd beïnvloeden.

ECC-geheugen

ZFS houdt checksums bij van alle data. Als het geheugen corrupt raakt voordat data naar schijf geschreven wordt, detecteert ZFS de corruptie niet — die komt immers uit het geheugen zelf. Voor productieservers en NAS-systemen met kritieke data is ECC-geheugen sterk aanbevolen. Voor een thuisserver met foto's en films is het optioneel maar verstandig.

ashift: stel het in op 12, altijd

ashift bepaalt de minimale I/O-blokgrootte van ZFS, uitgedrukt als macht van 2. ashift=12 correspondeert met 4096 bytes (4K), de fysieke sectorgrootte van vrijwel alle moderne HDD's en SSD's. Veel schijven rapporteren zichzelf als 512-byte sectorschijven voor legacy-compatibiliteit, terwijl ze intern 4K-sectoren gebruiken. Als je ashift=9 laat staan, schrijft ZFS 512-byte blokken terwijl de schijf intern steeds 4K overschrijft — dit kost bij elke schrijfoperatie een extra lees-schrijf-cyclus (Read-Modify-Write).

Cruciaal: ashift is immutabel. Je kunt het niet wijzigen nadat de vdev aangemaakt is. Stel het altijd expliciet in.

recordsize: pas aan op je workload

De standaard recordsize van 128K is prima voor algemeen gebruik, media-bestanden en backups. Draai je een database op ZFS, stel dan recordsize in op de blocksize van je database-engine: 8K of 16K voor PostgreSQL, 16K of 64K voor MySQL InnoDB. Voor video-opslag of archivering kun je 1M overwegen om IOPS te reduceren. Recordsize geldt alleen voor nieuwe bestanden — bestaande bestanden worden niet automatisch aangepast.

Voorbeeldpool: specs op een rij

Pool-naam:     datapool
Configuratie:  RAIDZ2
Schijven:      6× Seagate Exos 8 TB (ST8000NM000A)
ashift:        12  (4K-sector alignment)
Recordsize:    128K (algemeen gebruik)
Compressie:    lz4  (aan te raden — vrijwel gratis CPU-overhead)
Checksum:      sha256 (standaard)
Bruikbare cap: ~32 TB (4 data-schijven × 8 TB)
Pariteit:      2 schijven — overleeft 2 gelijktijdige defecten

zpool create: de commando's

Installeer eerst de benodigde pakketten op Ubuntu 24.04:

sudo apt update
sudo apt install zfsutils-linux

Controleer daarna de schijfnamen. Gebruik altijd de by-id paden zodat de pool stabiel blijft na een reboot of hotswap:

ls -l /dev/disk/by-id/ | grep -v part

Maak de pool aan met zes schijven in RAIDZ2-configuratie:

sudo zpool create \
  -o ashift=12 \
  -O compression=lz4 \
  -O atime=off \
  -O recordsize=128k \
  datapool raidz2 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_AAA111 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_BBB222 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_CCC333 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_DDD444 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_EEE555 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_FFF666

Toelichting op de opties:

  • -o ashift=12 — pool-niveau, 4K-alignment
  • -O compression=lz4 — dataset-niveau, lz4-compressie aan op het root-dataset
  • -O atime=off — schakel access-time updates uit (flinke performance-winst op HDD)
  • -O recordsize=128k — standaard voor mixed-use

Controleer de pool direct na aanmaken:

zpool status datapool
zpool list -v datapool

Datasets maak je aan met zfs create:

sudo zfs create datapool/media
sudo zfs create datapool/backups
sudo zfs create -o recordsize=8k datapool/postgresql

Met OpenZFS 2.3 kun je later een extra schijf aan je RAIDZ2 toevoegen als je meer ruimte nodig hebt:

sudo zpool attach datapool \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_AAA111 \
  /dev/disk/by-id/ata-Seagate_Exos_ST8000_GGG777

ZFS herschrijft de data dan automatisch over alle zeven schijven — online, zonder downtime.

Scrub en monitoring: zo blijf je op de hoogte

Een ZFS-scrub leest alle data op de pool, verifieert checksums en repareert stille corruptie met pariteitsdata. Sla je scrubs over, dan dekt ZFS jou niet meer in. Ubuntu 24.04 levert systemd-timers voor automatische scrubs mee met het zfsutils-linux-pakket.

Schakel maandelijkse scrubs in voor je pool:

sudo systemctl enable --now zfs-scrub-monthly@datapool.timer

Wil je wekelijks scrubben (aanbevolen bij actieve schrijflasten):

sudo systemctl enable --now zfs-scrub-weekly@datapool.timer

Een scrub handmatig starten:

sudo zpool scrub datapool

De voortgang volg je met:

watch -n 5 zpool status datapool

ZED instellen voor e-mailalerts

De ZFS Event Daemon (ZED) bewaakt je pool continu en stuurt meldingen bij scrub-resultaten, schijffouten en degraded pools. Configuratie verloopt via één bestand:

sudo nano /etc/zfs/zed.d/zed.rc

Zoek de volgende regels en pas ze aan:

ZED_EMAIL_ADDR="jouw@emailadres.be"
ZED_EMAIL_PROG="mail"
ZED_NOTIFY_VERBOSE=0

Zet ZED_NOTIFY_VERBOSE=1 tijdelijk aan tijdens het testen zodat je ook een bevestigingsmail krijgt na elke succesvolle scrub. Daarna terug naar 0 om alleen bij fouten een mail te ontvangen.

Je hebt ook een werkend mail-commando nodig. Installeer mailutils en koppel het aan een SMTP-relay (Gmail, Mailgun, of een eigen postfix-installatie):

sudo apt install mailutils

Herstart ZED na de configuratiewijziging:

sudo systemctl restart zed

Test door een scrub te triggeren en te wachten op de mail:

sudo zpool scrub datapool

Wil je alerts op je telefoon in plaats van e-mail? Koppel ZED aan een webhook-script dat een Pushover- of Telegram-notificatie stuurt. Maak een uitvoerbaar script aan in /etc/zfs/zed.d/ dat de ZED_EMAIL_ADDR-variabele als trigger gebruikt en een curl-call doet naar je notification-endpoint.

Veelgestelde vragen

Kan ik een RAIDZ2 bouwen met vier schijven?
Technisch ja, maar dan heb je nog maar twee data-schijven over. Je bent efficiënter bezig met RAIDZ1 op vier schijven of spaar je op voor zes schijven zodat RAIDZ2 zinvol is.
Kan ik schijven van verschillende fabrikanten mixen?
Ja, ZFS abstraheert de onderliggende hardware. Zorg wel dat alle schijven dezelfde of vergelijkbare capaciteit hebben — de pool-capaciteit wordt beperkt door de kleinste schijf in de vdev.
Heeft RAIDZ2 meer schrijfoverhead dan RAIDZ1?
Ja, maar minimaal. ZFS berekent twee pariteitssommen per schrijfoperatie in plaats van één. Op moderne hardware met lz4-compressie merk je dit nauwelijks terug in de praktijk.
Mijn schijf is defect. Wat nu?
Vervang de schijf fysiek en run dan: sudo zpool replace datapool /dev/disk/by-id/oud-schijf-id /dev/disk/by-id/nieuw-schijf-id. ZFS start automatisch een resilver (rebuild). Volg de voortgang met zpool status.
Is ZFS root op Ubuntu 24.04 stabiel?
Ubuntu 24.04 ondersteunt ZFS als root-filesystem via de installer (geavanceerde opties). Het werkt, maar updates van de ZFS-kernel-module vereisen soms extra aandacht bij kernel-upgrades. Voor datastores is een apart data-ZFS-pool op een traditioneel ext4 of ZFS root-systeem veelal robuuster in beheer.
Wanneer heb ik OpenZFS 2.3 op Ubuntu 24.04?
Ubuntu 24.04 LTS levert OpenZFS 2.1 mee in de standaard repositories. OpenZFS 2.3 is beschikbaar via de zfs-linux PPA of in Ubuntu 25.04. Voor TrueNAS Scale 24.10 (Electric Eel) is OpenZFS 2.3 al standaard ingebakken.