Aller au contenu

Agrandir un pool, extension RAIDZ

Day 2 · ExploiterNiveau 3 · MaîtriserProcédureRédigé · à valider en lab

Objectif : augmenter la capacité du pool tank sans le recréer, avec la méthode adaptée à sa topologie. Pour un pool de mirrors, on ajoute un mirror ; pour un vdev RAIDZ, on peut depuis PVE 9 (OpenZFS 2.3) y ajouter un disque : c'est l'extension RAIDZ.

Choisir la méthode

Méthode Commande Topologie Réversible Effet
Ajouter un vdev zpool add tank mirror <d1> <d2> Pool de mirrors (ou nouveau vdev RAIDZ identique) Seulement si aucun vdev RAIDZ dans le pool Capacité et IOPS en plus ; données existantes non rééquilibrées
Extension RAIDZ zpool attach tank raidz2-0 <d> vdev RAIDZ1/2/3 Non Un disque de plus dans le vdev, même parité
Remplacer par des disques plus gros zpool replace disque par disque + autoexpand Toutes Oui, tant que l'ancien disque est conservé Capacité accrue quand tous les disques d'un vdev sont remplacés
flowchart TB
    S{"Topologie de tank ?"} -- "Mirrors" --> M["Ajouter un mirror<br/>zpool add tank mirror d1 d2"]
    S -- "RAIDZ" --> R{"Baies libres ?"}
    R -- "Oui, 1 à 3 disques" --> E["Extension RAIDZ<br/>zpool attach tank raidz2-0 d"]
    R -- "Oui, 4 disques et plus" --> V["Ajouter un vdev RAIDZ<br/>de même largeur et parité"]
    R -- "Non" --> G["Remplacer les disques un par un<br/>par des plus gros (RB-05)"]

Ce qu'il faut savoir sur l'extension RAIDZ

  • Disponible à partir de Proxmox VE 9 (OpenZFS 2.3.3) ; elle requiert la fonctionnalité de pool raidz_expansion (activée par zpool upgrade, voir pièges).
  • Le nouveau disque doit être au moins aussi grand que le plus petit disque du vdev.
  • La parité ne change pas : un RAIDZ2 de 6 disques devient un RAIDZ2 de 7 disques.
  • Les blocs existants gardent leur ancien ratio données/parité ; seules les nouvelles écritures profitent du nouveau ratio. L'espace gagné est donc inférieur au calcul théorique, et zfs list peut annoncer un peu moins d'espace libre qu'attendu. Réécrire les données (déplacer un disque de VM vers un autre stockage puis le ramener) leur applique le nouveau ratio.
  • Un vdev peut être étendu plusieurs fois, un disque à la fois.
  • Si un disque tombe pendant l'expansion, celle-ci se met en pause jusqu'au retour à l'état sain du vdev.
  • L'opération relit et redistribue tout le vdev : comptez des heures à plus d'une journée, avec un impact sur les performances.
  • Ne s'applique pas à dRAID.

Avant de toucher la prod

  • Sauvegarde PBS récente et vérifiée de toutes les VM du pool (pbs-local, synchronisée vers le MSP).
  • Pool sain : zpool status -x répond all pools are healthy, dernier scrub sans erreur.
  • Nouveau disque de même modèle (ou équivalent), taille égale ou supérieure, non SMR, identifié par son numéro de série.
  • Pour l'extension : version vérifiée (zfs version ≥ 2.3.3) et fonctionnalité raidz_expansion disponible.
  • Commande relue par une seconde personne : add et attach ne font pas du tout la même chose.
  • Contrat N2/N3 : opération réalisée par le MSP ; N1 : ticket P3 de validation avant intervention.

Étapes

La GUI Proxmox VE sert ici à préparer et contrôler ; l'ajout de disque à un pool existant se fait en CLI.

  1. Nœud pve01 → Disks : le nouveau disque apparaît, colonne Usage vide. Sinon : Wipe Disk après vérification du numéro de série.
  2. Disks → ZFS → double-clic sur tank : noter le nom du vdev à étendre (raidz2-0, mirror-1…).
  3. Après l'opération CLI, revenir sur cet écran : le nouveau disque apparaît dans le vdev, et Datacenter → Storage (ou le résumé du stockage tank) affiche la nouvelle capacité.
# 0. État et nom des vdevs
zfs version
zpool status tank
zpool get feature@raidz_expansion tank      # enabled ou active attendu

# A. Extension RAIDZ : ajouter un disque au vdev raidz2-0
zpool attach tank raidz2-0 /dev/disk/by-id/ata-WDC_WD80..._VK7NEW01
zpool status tank                           # ligne "expand:" avec l'avancement
# option -w : la commande ne rend la main qu'à la fin de l'expansion

# B. Pool de mirrors : ajouter un mirror (simulation avec -n d'abord)
zpool add -n tank mirror /dev/disk/by-id/<d1> /dev/disk/by-id/<d2>
zpool add tank mirror /dev/disk/by-id/<d1> /dev/disk/by-id/<d2>

# C. Disques plus gros : autoexpand puis remplacement un par un (RB-05)
zpool set autoexpand=on tank
zpool replace tank <ancien> /dev/disk/by-id/<nouveau-plus-gros>
# attendre la fin du resilver avant le disque suivant ; si la taille ne bouge pas à la fin :
# zpool online -e tank <disque>

Vérifications

zpool status tank
#   state: ONLINE ; raidz2-0 compte désormais 7 disques ; la ligne "expand:" indique une expansion terminée
zpool list -v tank        # SIZE et taille du vdev augmentées
zfs list tank             # AVAIL augmenté
Lancer ensuite un scrub (zpool scrub tank) et vérifier 0 errors.

Rollback

Il n'y en a pas pour l'extension RAIDZ ni pour un zpool add sur un pool contenant du RAIDZ : le seul retour arrière est la recréation du pool et la restauration depuis PBS (RB-12). Sur un pool composé uniquement de mirrors, un vdev ajouté par erreur se retire avec zpool remove tank mirror-2 (les données sont recopiées sur les autres vdevs). Pour la méthode C, tant que le resilver n'est pas fini, zpool detach tank <nouveau> annule le remplacement.

Pièges vus en support

  • zpool add tank <disque> au lieu de zpool attach tank raidz2-0 <disque> : le disque devient un vdev seul, sans redondance, impossible à retirer d'un pool RAIDZ. La perte de ce disque détruit le pool. Toujours simuler avec zpool add -n.
  • zpool attach sur un disque d'un mirror (et non sur le vdev RAIDZ) : on obtient un mirror 3 voies, pas plus de capacité.
  • Extension attendue de +1/6 de capacité et gain constaté plus faible : les anciens blocs gardent l'ancien ratio.
  • Fonctionnalité raidz_expansion désactivée sur un pool créé avant PVE 9 : zpool upgrade tank l'active, mais rend le pool illisible par des versions plus anciennes d'OpenZFS (ISO de secours, ancien nœud). À décider avec le MSP.
  • Nouveau mirror ajouté à un pool presque plein : les nouvelles écritures se concentrent sur ce vdev, les performances ne s'améliorent pas tout de suite.
  • Disque rpool étendu sans recréer les partitions de boot : voir RB-06.

Quand ouvrir un ticket iTop

Toute extension sur un pool de production, zpool upgrade, expansion qui stagne ou disque en défaut pendant l'expansion : avec le MSP (P3 planifié, P2 si le pool est dégradé). Pool au-delà de 85 % : P2, voir aussi le plan de capacité. Joindre zpool status -v, zpool list -v, zfs list, zfs version.

Ouvrir un ticket iTop

Pour aller plus loin