Pour le stockage de masse — bibliothèques VOD, tampons de rattrapage, cibles de sauvegarde — ZFS RAID-Z2 est le choix idéal : il survit à deux pannes de disque simultanées, offre une excellente intégrité des données via des sommes de contrôle, et s'adapte à des petabytes. Ce guide configure un pool RAID-Z2 sur Ubuntu pour un serveur de stockage.

Prérequis

  • Ubuntu 22.04 avec accès root
  • Plusieurs disques identiques (minimum 4 pour RAID-Z2 ; 6-12 est typique)
  • Au moins 8 GB RAM (ZFS aime la RAM — 1 GB par TB est une ligne directrice approximative pour la déduplication, beaucoup moins sans)

Étape 1 — Installer ZFS

apt update
apt install -y zfsutils-linux
modprobe zfs
zfs version

Étape 2 — Identifier vos disques

N'utilisez jamais les noms `/dev/sdX` pour ZFS — ils peuvent changer au redémarrage. Utilisez /dev/disk/by-id/ qui sont stables :

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

Vous verrez des entrées comme ata-WDC_WD180EDGZ_XXXXXXX ou nvme-Samsung_SSD_.... Notez celles pour vos disques de données (pas le disque du système d'exploitation).

Étape 3 — Créer le pool RAID-Z2

RAID-Z2 utilise l'équivalent de 2 disques de capacité pour la parité, survivant à 2 pannes. Avec 8 disques de 18 TB, vous obtenez environ 108 TB utilisables (6 × 18 TB) :

zpool create -f -o ashift=12 tank raidz2 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE1 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE2 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE3 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE4 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE5 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE6 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE7 \
  /dev/disk/by-id/ata-WDC_WD180EDGZ_DRIVE8

ashift=12 force l'alignement des secteurs 4K — correct pour tous les disques modernes, et une erreur ultérieure signifie la reconstruction du pool. Vérifiez le pool :

zpool status tank
zpool list

Étape 4 — Optimiser pour une charge de travail média/stockage

Définissez une taille d'enregistrement plus grande (record size) pour les fichiers séquentiels volumineux (vidéo), activez la compression (presque gratuite, aide même sur les métadonnées vidéo), et désactivez atime (amplification d'écriture inutile) :

zfs set recordsize=1M tank
zfs set compression=lz4 tank
zfs set atime=off tank
zfs set xattr=sa tank

recordsize=1M est idéal pour le streaming de fichiers volumineux. Si ce pool doit également contenir une base de données ou de nombreux petits fichiers, créez un dataset séparé avec recordsize=16k pour cela.

Étape 5 — Créer des datasets

Les datasets sont comme des dossiers avec leurs propres propriétés. Organisez par charge de travail :

zfs create tank/vod
zfs create tank/catchup
zfs create tank/backups

# Les sauvegardes se compressent mieux avec gzip
zfs set compression=gzip-6 tank/backups

Ils se montent automatiquement à /tank/vod, /tank/catchup, etc.

Étape 6 — Ajouter un cache NVMe (L2ARC) pour les lectures fréquentes

Si votre charge de travail contient du contenu fréquemment accédé (chaînes populaires en rattrapage, VOD populaires), un cache de lecture NVMe réduit considérablement la charge sur les HDD. Ajoutez un NVMe de rechange comme L2ARC :

zpool add tank cache /dev/disk/by-id/nvme-Samsung_SSD_980_CACHE
zpool status tank

Dimensionnez L2ARC à environ 5-10% de la taille du pool. Pour les charges de travail intensives en écriture, un périphérique SLOG séparé (miroir de deux petits SSD rapides) aide à synchroniser les écritures, mais le service de médias pur en a rarement besoin.

Étape 7 — Configurer les scrubs automatiques

Les scrubs lisent chaque bloc et vérifient les sommes de contrôle, détectant la corruption silencieuse avant qu'elle ne se propage. Planifiez-les mensuellement :

# ZFS sur Ubuntu inclut un timer systemd — activez-le
systemctl enable zfs-scrub-monthly@tank.timer
systemctl start zfs-scrub-monthly@tank.timer

# Exécutez-en un maintenant pour établir une base de référence
zpool scrub tank
zpool status tank   # surveiller la progression

Étape 8 — Surveiller la santé des disques

Configurez des alertes par e-mail pour la dégradation du pool. Modifiez /etc/zfs/zed.d/zed.rc :

ZED_EMAIL_ADDR="you@yourdomain.com"
ZED_NOTIFY_INTERVAL_SECS=3600
ZED_NOTIFY_VERBOSE=1
systemctl restart zfs-zed

Maintenant, si un disque tombe en panne, ZED vous envoie un e-mail immédiatement. Avec RAID-Z2, vous disposez d'une marge de 2 pannes, mais il est préférable de remplacer le premier disque défaillant avant qu'un second ne tombe en panne.

Étape 9 — Remplacer un disque défaillant

Lorsqu'un disque tombe en panne, zpool status l'affiche comme DEGRADED. Remplacez-le :

# Mettre le disque défectueux hors ligne
zpool offline tank ata-WDC_WD180EDGZ_DEADDRIVE

# Échangez physiquement le disque, puis remplacez-le dans le pool
zpool replace tank ata-WDC_WD180EDGZ_DEADDRIVE /dev/disk/by-id/ata-WDC_WD180EDGZ_NEWDRIVE

# Surveiller la progression du resilver
zpool status tank

Le resilver sur un disque de 18 TB prend 24 à 48 heures. Le pool reste en ligne et lisible tout au long — RAID-Z2 signifie que vous pouvez même perdre un autre disque pendant le resilver et survivre.

Référence de planification de capacité

ConfigBrutUtilisable (RAID-Z2)Survit à
6× 18 TB108 TB72 TB2 pannes
8× 18 TB144 TB108 TB2 pannes
12× 18 TB216 TB180 TB2 pannes

Au-delà de 12 disques dans un seul vdev, divisez en plusieurs vdevs ou utilisez RAID-Z3 — les fenêtres de resilver sur des vdevs très larges deviennent un risque en soi. Consultez notre guide complet de dimensionnement du stockage.

Prochaines étapes

Associez cela à un tier chaud NVMe pour les données actives, ou dimensionnez un serveur de stockage dédié avec nous. Pour les calculs complets de stockage — croissance du rattrapage, budgets de lecture, taux d'accès au cache — lisez notre article sur le dimensionnement du stockage.