Comment installer et utiliser ZFS sur Debian
- Mise à jour le 01 mai 2026
Introduction
ZFS est un système de fichiers open source combiné à un gestionnaire de volumes logiques, conçu pour offrir une haute intégrité des données, une grande évolutivité et des fonctionnalités avancées de stockage. Il est distribué sous licence Common Development and Distribution License (CDDL).
Initialement développé par Sun Microsystems sous la direction de Jeff Bonwick, ZFS est aujourd’hui maintenu par la communauté OpenZFS.
Fonctionnalités principales
- Grande capacité de stockage : prend en charge des pools et systèmes de fichiers de très grande taille.
- Gestion intégrée des volumes : combine système de fichiers et gestionnaire de volumes en une seule solution.
- Intégrité des données : vérification de bout en bout avec détection automatique des erreurs et auto-réparation.
- Instantanés et clones : sauvegardes rapides et peu gourmandes en espace, avec duplication simplifiée des données.
- Déduplication : élimine les blocs de données dupliqués pour économiser de l’espace (à utiliser avec précaution).
- Compression : compression transparente (lz4, zstd) améliorant l’efficacité du stockage et parfois les performances.
Installation
Sur Debian, ZFS peut être installé depuis les dépôts officiels. Assurez-vous que le dépôt contrib est activé, puis installez le paquet nécessaire :
root@host:~# apt update && apt install zfsutils-linux
Pour des instructions détaillées et à jour, consultez la documentation officielle OpenZFS : https://openzfs.github.io/openzfs-docs
Commandes ZFS
Cette section présente les principales commandes ZFS pour créer, gérer et surveiller des pools de stockage.
Créer un pool ZFS
- Lister les identifiants des disques disponibles :
root@host:~# ls -lah /dev/disk/by-id/
- Créer un point de montage :
root@host:~# mkdir /zfs
- Créer un pool de stockage (RAID 0 / stripe) :
root@host:~# zpool create -f -o ashift=12 -m /zfs pool01 stripe \
scsi-SATA_WDC_WD20EARS-07_WD-WCAZA796741 \
scsi-SATA_WDC_WD20EARS-07_WD-WCAZB7569258 \
scsi-SATA_WDC_WD20EARS-07_WD-WCPZB7464217
zpool create: crée un nouveau pool de stockage-f: force la création (à utiliser avec précaution)-o ashift=12: optimise l’alignement pour les disques modernes (secteurs 4K)-m: définit le point de montage (par défaut/)pool01: nom du poolstripe: RAID 0 (sans redondance)disk IDs: périphériques listés dans/dev/disk/by-id/
- Ajouter un disque de secours (hot spare) :
root@host:~# zpool add pool01 spare /dev/sdX
- Lister les pools disponibles :
root@host:~# zpool list
- Afficher l’historique du pool :
root@host:~# zpool history pool01
- Modifier le point de montage :
root@host:~# zfs set mountpoint=/zfs pool01
- Si le pool ne se monte pas sur un nouveau système :
root@host:~# zpool export pool01
root@host:~# zpool import -a
- Ou forcer l’import :
root@host:~# zpool import -f pool01
- Désactiver atime (recommandé pour les performances) :
root@host:~# zfs set atime=off pool01
- Activer la compression lz4 (recommandée) :
root@host:~# zfs set compression=lz4 <pool>
- Activer la compression zstd (meilleur taux de compression, plus gourmande en CPU) :
root@host:~# zfs set compression=zstd <pool>
- Détruire un pool de stockage :
root@host:~# zpool destroy <pool>
Maintenance
Vérification du système de fichiers (scrubbing)
Remarque : ZFS n’utilise pas de vérification classique du système de fichiers comme fsck. Il utilise à la place un processus appelé scrubbing pour vérifier et réparer l’intégrité des données.
- Lancer un scrub (vérification de l’intégrité des données) :
root@host:~# zpool scrub pool01
- Vérifier l’état du scrub et la santé du pool :
root@host:~# zpool status
- Effacer les erreurs du statut du pool :
root@host:~# zpool clear pool01
Afficher les propriétés
- Lister toutes les propriétés ZFS :
root@host:~# zfs get all <pool>
Remplacer un disque défaillant
- Remplacer un disque dans un pool :
root@host:~# zpool replace pool01 <old_disk> <new_disk>
Supervision
- Afficher toutes les propriétés du pool :
root@host:~# zpool get all pool01
- Vérifier l’état du pool et la santé des périphériques :
root@host:~# zpool status -v pool01
- Surveiller les statistiques d’entrées/sorties (I/O) :
root@host:~# zpool iostat <interval> <count>
root@host:~# zpool iostat 5 10
Chiffrement ZFS
Chiffrement avec dm-crypt (LUKS)
Chiffrer les disques
root@host:~# cryptsetup luksFormat /dev/sdb1
root@host:~# cryptsetup luksFormat /dev/sdc1
root@host:~# cryptsetup luksFormat /dev/sdd1
Ouvrir les disques chiffrés
root@host:~# cryptsetup luksOpen /dev/sdb1 zfs01
root@host:~# cryptsetup luksOpen /dev/sdc1 zfs02
root@host:~# cryptsetup luksOpen /dev/sdd1 zfs03
Créer un pool ZFS sur les périphériques chiffrés
root@host:~# zpool create -f -m /zfs pool01 mirror \
/dev/mapper/zfs01 \
/dev/mapper/zfs02
Chiffrement natif ZFS
Créer un pool ZFS
Commencez par créer un pool ZFS qui accueillera le dataset chiffré.
root@host:~# zpool create -f -m /zfs pool01 /dev/sdX
Créer un dataset chiffré
Il existe plusieurs façons de protéger un dataset chiffré. Les plus courantes sont la phrase de passe et le fichier de clé (keyfile).
Phrase de passe
- Créer un dataset chiffré avec une phrase de passe :
root@host:~# zfs create -o encryption=on -o keyformat=passphrase pool01/dataset01
Fichier de clé (keyfile)
- Générer un fichier de clé sécurisé :
root@host:~# head -c 32 /dev/urandom > /root/keyfile
root@host:~# chmod 600 /root/keyfile
- Créer un dataset chiffré en utilisant le fichier de clé :
root@host:~# zfs create -o encryption=on -o keyformat=raw -o keylocation=file:///root/keyfile pool01/dataset01
Charger la clé et monter un dataset chiffré
Après un redémarrage, ou lors de l’accès au pool depuis un autre système, il est nécessaire de charger la clé de chiffrement puis de monter le dataset. L’exemple suivant montre comment monter un dataset protégé par un fichier de clé.
- Vérifier l’emplacement de la clé configurée :
root@host:~# zfs get keylocation pool01/dataset01
NAME PROPERTY VALUE SOURCE
pool01/dataset01 keylocation file:///root/keyfile local
- Charger la clé de chiffrement :
root@host:~# zfs load-key pool01/dataset01
- Monter le dataset :
root@host:~# zfs mount pool01/dataset01