Pour les besoins de mon lab sur mon MicroServer HP ProLiant Gen8, ZFS est apparement la meilleure option par rapport à une configuration classique LVM + ext4. Je vais donc repartir de zéro et supprimer tout ce que j’avais configuré dans mon lab précédent.
Qu’est ce que c’est que ZFS?
ZFS est un système de fichiers et gestionnaire de volumes logiques combinés … publié en tant que logiciel libre sous la licence Common Development and Distribution License (CDDL) dans le cadre du projet OpenSolaris en novembre 2005.
ZFS est évolutif et offre une protection étendue contre la corruption des données, une prise en charge de très grandes capacités de stockage, une compression efficace des données, l’intégration des concepts de système de fichiers et de gestion de volumes, des instantanés (snapshots) et des clones en écriture différée (copy-on-write), une vérification continue de l’intégrité des données avec réparation automatique (…).
Pour en savoir plus, je vous recommande la page du wiki Debian sur ZFS.
Vérification de la compatibilité matérielle
Avant de reconfigurer notre stockage de données, vérifions que le matériel est adapté à ZFS.
Mémoire vive (RAM)
- Minimum recommandé : 16 Go pour un pool de plus de 512 Go.
- RAM ECC fortement conseillée
Vérification de la prise en charge ECC :
# dmidecode -t memory | grep -i "ecc"
Error Correction Type: Single-bit ECC
Disques
- Système d’exploitation : installé sur une partition LVM + ext4 (séparée du pool ZFS).
- Données : stockées sur un pool ZFS dédié.
Sur un HP ProLiant MicroServer Gen8 (BIOS/Legacy), il vaut mieux ne pas installer ZFS sur le système de fichiers racine (/) ou /boot, car GRUB ne supporte ZFS que partiellement. Par contre, sur les machines modernes qui prennent en charge de démarrage en mode UEFI, il n’y aurait pas de problème à le faire.
Ma configuration :
├── sda (SSD 128 Go) → système Proxmox (LVM+ext4)
├── sdb (SSD 256 Go) → sdb + sdc : miroir ZFS
├── sdc (SSD 256 Go) → sdb + sdc : miroir ZFS
└── sdd (HDD 320 Go) → stockage de sauvegarde
Mise-en place du système
Avant toute chose, sauvegarder toutes les données importantes.
Étape 1 : Démonter les points de montage
# umount /mnt/app
# umount /mnt/backup
Vérifie que rien ne les utilise :
# lsof /mnt/app
# lsof /mnt/backup
Après avoir lancé ces commandes, si rien ne s’affiche, c’est bon.
Étape 2 : Supprimer les stockages dans l’UI Proxmox
1. Accéder à l’interface web Proxmox, Datacenter > Storage
2. Trouve les entrées :
app (type Directory, path: /mnt/app)
backup (type Directory, path: /mnt/backup)
3. Clique sur “Remove” pour chacune de ces entrées.
Étape 3 : Nettoyer les entrées dans /etc/fstab
# vim /etc/fstab
Supprime les lignes correspondant à :
/dev/vg_ssd/lv_app
/dev/vg_hdd/lv_backup
Étape 4 : Supprimer les Logical Volumes (LV)
# lvremove /dev/vg_ssd/lv_app
# lvremove /dev/vg_hdd/lv_backup
Étape 5 : Supprimer les Thin Pools
# lvremove /dev/vg_ssd/thinpool_ssd
# lvremove /dev/vg_hdd/thinpool_hdd
Étape 6 : Supprimer les Volume Groups (VG)
# vgremove vg_ssd
# vgremove vg_hdd
Après avoir supprimé les LV (lvremove) et les VG (vgremove), ces stockages Proxmox sont maintenant « orphelins » : ils pointent vers des ressources qui n’existent plus.
1. Ouvre l’interface web Proxmox, Datacenter > Storage
2. Trouve les entrées :
hdd_thin (type LVM-Thin)
ssd_thin (type LVM-Thin)
3. Clique sur “Remove” pour chacune de ces entrées.
Étape 7 : Supprimer les Physical Volumes (PV)
# pvremove /dev/sdb
# pvremove /dev/sdc
# pvremove /dev/sdd
Étape 8 : Nettoyer les signatures disques (optionnel mais recommandé)
# wipefs -a /dev/sdb
# wipefs -a /dev/sdc
# wipefs -a /dev/sdd
Étape 9 : Vérification finale
Assurez-vous que tout est propre :
- La commande lsblk doit montrer que les disques sdb, sdc, sdd sont vides, sans partitions ni mapper
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 117.4G 0 disk
├─sda1 8:1 0 1007K 0 part
├─sda2 8:2 0 1G 0 part
└─sda3 8:3 0 116.4G 0 part
├─pve-swap 252:2 0 8G 0 lvm [SWAP]
├─pve-root 252:3 0 39.1G 0 lvm /
├─pve-data_tmeta 252:4 0 1G 0 lvm
│ └─pve-data 252:11 0 52.8G 0 lvm
└─pve-data_tdata 252:5 0 52.8G 0 lvm
└─pve-data 252:11 0 52.8G 0 lvm
sdb 8:16 0 238.5G 0 disk
sdc 8:32 0 238.5G 0 disk
sdd 8:48 0 298.1G 0 disk
- La commande pvs ne doit plus lister que /dev/sda3
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 pve lvm2 a-- <116.38g 14.50g
- La commande vgs ne doit lister que pve
# vgs
VG #PV #LV #SN Attr VSize VFree
pve 1 3 0 wz--n- <116.38g 14.50g
- La commande blkid ne doit plus montrer de TYPE= »LVM2_member » pour sdb/sdc/sdd
# blkid
/dev/mapper/pve-swap: UUID="..." TYPE="swap"
/dev/sda2: UUID="..." BLOCK_SIZE="512" TYPE="vfat" PARTUUID="..."
/dev/sda3: UUID="..." TYPE="LVM2_member" PARTUUID="..."
/dev/mapper/pve-root: UUID="..." BLOCK_SIZE="4096" TYPE="ext4"
/dev/sda1: PARTUUID="..."
Installer et configurer ZFS
Étape 1 : Installation des outils ZFS
Avec proxmox, les outils ZFS devraient déjà être installés. Si ce n’est pas le cas, installez-les :
# zpool version
# apt install -y zfsutils-linux
Étape 2 : Création de pools
Vous pouvez créer un pool ZFS directement depuis l’interface web de Proxmox (à partir de la version 8.4), ou manuellement en ligne de commande.
Pool SSD en miroir :
# zpool create -f -o ashift=12 -O compression=lz4 -O atime=off tank-ssd mirror /dev/sdb /dev/sdc
Pool HDD, disque unique non redondant :
# zpool create -f -o ashift=12 -O compression=lz4 tank-hdd /dev/sdd
Par contre, il ne faut jamais mélanger des disques SSD et HDD dans un même pool ZFS, car c’est une très mauvaise idée.
Petite note sur les différentes alternatives pour disque HDD unique, que je vais utiliser comme stockage externe. J’ai le choix entre ces deux options :
- Le formater en ext4
# mkfs.ext4 /dev/sdd1 # mkdir /mnt/backup-sdd # mount /dev/sdd1 /mnt/backup-sdd - Créer un pool ZFS sans redondance (choix retenu ici, pour bénéficier des snapshots, etc.)
Étape 3 : Intégration dans Proxmox
Vous pouvez ajouter tank-ssd comme stockage ZFS uniquement si vous souhaitez héberger directement des disques de VMs/LXC sur ZFS.
Depuis l’interface de Proxmox,
- Allez dans Datacenter > Storage > Add > ZFS
- Ajoutez :
ID : zfs-ssd (nom unique, utilisé en interne)
Pool : tank-ssd(doit apparaître dans la liste déroulante)
Content : Container, Disk image
Thin provision: Coché
Dans mon cas, je vais utiliser ZFS pour stocker des fichiers et non des images de disques. De ce fait, je n’ai pas besoin de stockage ZFS.
Si vous avez créé un stockage Proxmox de type ZFS (zfs-ssd), vous pouvez le supprimer à partir de l’interface de Proxmox si vous ne l’utilisez pas.
Étape 5 : Arborescence ZFS
Voici à quoi devrait ressembler mon pool ZFS final:
- tank-ssd (mirror SSD) :
- infra/ → services critiques (GitLab, Traefik)
- ci-cd/ → volumes Docker, builds
- apps/ → applications web persistantes
- tank-hdd (HDD seul) :
- backups/ → sauvegardes hors ligne (non critiques)
Étape 5 : Création des datasets
Un dataset dans ZFS est une unité logique de stockage, semblable à un système de fichiers ou à un répertoire, mais avec des propriétés, des quotas, des snapshots et des permissions gérables de façon indépendante.
Les datasets, je vais les utiliser comme volumes montés dans mes conteneurs LXC, éventuellement dans mes VMs.
Sur mon pool SSD (tank-ssd):
# zfs create tank-ssd/infra
# zfs create tank-ssd/ci-cd
# zfs create tank-ssd/apps
Sur mon pool HDD (tank-hdd)
# zfs create tank-hdd/backups
Options recommandées :
# zfs set compression=lz4 tank-ssd tank-hdd
# zfs set atime=off tank-ssd tank-hdd
Verification :
# zfs list -o name,mountpoint
Étape 6 : Ajout des datasets comme stockage Directory dans Proxmox
Dans l’interface Proxmox,
- Allez dans Datacenter > Storage > Add > Directory
- Créer un stockage par dataset :
- Pour les données persistantes (SSD) :
IDDirectoryContentAllow snapshotsSharedUtilisationinfra-ssd/tank-ssd/infraContainer template❌❌GitLab, Traefik configsci-cd-ssd/tank-ssd/ci-cdContainer template❌❌Volumes Docker, builds CIapps-ssd/tank-ssd/appsContainer template❌Au choixDonnées persistantes appsContainer Template est ce qu’il nous faut pour stocker des données accessibles via bind mounts dans les conteneurs LXC.
- Pour les backups (HDD) :
IDDirectoryContentAllow snapshotsShared Utilizationbackups-hdd/tank-hdd/backupsBackup❌Au choixSauvegardes hors ligne
- Pour les données persistantes (SSD) :
Dans l’onglet “Backup Retention” de l’interface Proxmox. Tu peux alors définir :
- Nombre de backups à garder
- Rotation quotidienne/hebdomadaire, etc.

