zfs
Un fork d’OpenZFS. Sa branche par défaut reflète master en amont ; le travail propre au projet se trouve dans des branches séparées : un prototype de remodelage de RAIDZ sur place et les éléments pour le proposer en amont.
- OpenZFS
- RAIDZ
- C
- Statut
- Un prototype validé et non une fonctionnalité finie, selon les termes du dépôt : pas prêt pour la production, format sur disque non définitif. Testé avec des matrices de pertes de disques, des points de plantage, KASAN et des essais d’endurance ; le passage à l’échelle sur de grands pools et une exécution complète de ZTS restent à faire.
- Licence
- CDDL, comme OpenZFS en amont ; les exceptions sont indiquées dans certains fichiers source.
- Plateformes
- Linux ; testé dans une VM de laboratoire Ubuntu sous QEMU/KVM, sur des builds basés sur zfs-2.4.4 et sur le master actuel.
Le problème résolu
Sur un pool qui héberge des machines virtuelles et des conteneurs en fonctionnement, changer la redondance RAIDZ ou retirer un disque impose aujourd’hui une fenêtre de maintenance : déplacer les invités, exporter le pool, reconstruire, tout remettre en place. L’extension RAIDZ d’OpenZFS 2.3 n’a ajouté que l’élargissement en ligne. Le but de ce travail est de modifier sur place la géométrie d’un pool actif, avec le seul espace libre du pool, en conservant snapshots et clones.
Fonctionnalités principales
zpool reparityaugmente ou réduit la parité RAIDZ sur place (raidz1 ↔ raidz2 ↔ raidz3) ; avec--online, les datasets restent montés, et avec--async,--statuset--cancel, l’opération tourne en arrière-plan.- Une table d’époques de disposition par vdev, derrière un seul nouveau feature flag (nom de travail
com.openzfs:raidz_parity_epochs) : chaque bloc est lu et reconstruit dans la géométrie avec laquelle il a été écrit. - Validation fail-closed : la nouvelle parité ne prend effet qu’une fois qu’un recensement ne trouve plus aucun bloc à l’ancienne ; sinon le balayage reprend, y compris après un plantage.
- Outils hors ligne dans
zhack: retirer un disque d’un vdev RAIDZ (N → N−1), remodeler avec snapshots et clones, recalculer les sommes de contrôle et recompresser les données existantes ; ces deux derniers sont expérimentaux. - Tests fonctionnels ZTS et pages de manuel pour les nouvelles commandes ; un RFC et une série empilée de branches préparés pour la revue en amont.
Fonctionnement
Chaque vdev RAIDZ de premier niveau reçoit une petite table, en ajout seul, d’enregistrements {start_txg, width, parity}, de même forme que les enregistrements existants de l’extension RAIDZ. La géométrie d’un bloc est choisie d’après sa txg de naissance, si bien qu’anciens et nouveaux blocs coexistent. Un balayage borné, qui reprend après un plantage, réécrit les blocs existants par un copy-on-write ordinaire. Le codage des lignes RAIDZ, le format des pointeurs de bloc et ashift ne changent pas.
zpool reparity [--online | --async | --status | --cancel] [--target N] pool
Prérequis
- Un pool avec des vdevs RAIDZ. Le feature flag est incompatible et devient actif au premier remodelage.
- Se compile depuis les sources comme OpenZFS. Les branches
ozfs-pr/1-parity-epochs-recon,ozfs-pr/2-reparity-commandetozfs-pr/3-reshape-toolkitsont basées sur master,feat/raidz-*sur zfs-2.4.4. - Le retrait d’un disque et les outils hors ligne de
zhackexigent que le pool soit exporté.
Cette page résume le README et la documentation du dépôt à la date d’octobre 2026. La référence reste le dépôt lui-même.