Chapitre 415 minIntermédiaire
Le stockage dans Proxmox : local, LVM-thin, ZFS, NFS et iSCSI
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- distinguer les formats de disques virtuels et l'allocation fixe ou dynamique ;
- choisir un type de stockage selon les snapshots et le partage entre nœuds ;
- créer un pool ZFS et lire son état ;
- déclarer un partage NFS ou un volume iSCSI d'un NAS TrueNAS.
4 exercices corrigés1 schéma
Dans Proxmox VE, un stockage est un emplacement déclaré au niveau du centre de données où l'hyperviseur range les disques des VM, les images ISO, les modèles de conteneurs ou les sauvegardes : un dossier local, un pool LVM ou ZFS, un partage NFS, un volume iSCSI. Le choix du stockage décide de ce que tu pourras faire ensuite : snapshots, migration à chaud, haute disponibilité. Ce chapitre explique les formats de disques virtuels, les stockages locaux, puis le stockage partagé sur un NAS TrueNAS, et donne une méthode pour choisir.
Ce qu'est un disque virtuel
Le disque d'une VM est, côté hôte, un fichier ou un volume :
| Format | Nature | Points clés |
|---|---|---|
raw | Fichier ou volume brut, octet pour octet | Le plus rapide et le plus simple ; pas de snapshot sur un stockage de type fichier |
qcow2 | Fichier au format de QEMU | Snapshots, allocation à la demande, sur un stockage de type fichier (dossier, NFS) |
vmdk | Format de VMware | Lisible par Proxmox pour importer une VM, déconseillé en usage courant |
| Volume (LVM, zvol ZFS, RBD Ceph) | Bloc géré par le stockage | Le stockage gère lui-même l'allocation et les snapshots |
Deux façons d'allouer l'espace coexistent :
- l'allocation fixe (thick provisioning) réserve tout l'espace à la création : un disque de 100 Go occupe 100 Go, même vide ;
- l'allocation dynamique (thin provisioning) n'occupe que ce qui est écrit : le même disque, avec 12 Go de données, occupe 12 Go.
L'allocation dynamique permet de surallouer : promettre aux VM plus d'espace que le stockage n'en a réellement, en pariant qu'elles ne se rempliront pas toutes. C'est pratique et courant, mais dangereux : si le stockage se remplit vraiment, les VM qui écrivent se figent ou corrompent leurs données. Un stockage suralloué se surveille (chapitre 12).
Les types de contenu
Un stockage déclare ce qu'il accepte. Les types de contenu de Proxmox VE :
| Contenu | Nom dans l'interface | Ce que c'est |
|---|---|---|
images | Disk image | Les disques des VM |
rootdir | Container | Les disques des conteneurs |
iso | ISO image | Les images d'installation |
vztmpl | Container template | Les modèles de conteneurs |
backup | VZDump backup file | Les sauvegardes faites par vzdump |
snippets | Snippets | Fichiers annexes : scripts d'accroche, configurations cloud-init personnalisées |
import | Import | Fichiers OVA ou disques à importer dans une VM |
Les types de stockage
Proxmox VE gère une quinzaine de types de stockage. Ceux que tu croiseras :
| Type | Niveau | Partagé entre nœuds | Snapshots | Usage typique |
|---|---|---|---|---|
| Dossier (Directory) | Fichier | Non | Avec qcow2 | ISO, modèles, sauvegardes locales |
| LVM | Bloc | Possible, sur un LUN iSCSI ou Fibre Channel | Depuis Proxmox VE 9, en chaîne de volumes (aperçu technologique) | Stockage partagé en mode bloc |
| LVM-thin | Bloc | Non | Oui | Disques des VM sur un hôte isolé |
| ZFS (local) | Fichier et bloc | Non | Oui | Disques des VM, avec réplication possible entre nœuds |
| NFS, CIFS (SMB) | Fichier | Oui | Avec qcow2 | Stockage partagé sur un NAS |
| iSCSI | Bloc | Oui | Non par lui-même | Un LUN d'une baie ou d'un NAS, sur lequel on pose LVM |
| Ceph RBD | Bloc | Oui | Oui | Stockage distribué hyperconvergé |
| ZFS over iSCSI | Bloc | Oui | Oui | Un pool ZFS distant piloté par Proxmox |
| Proxmox Backup Server | Les deux | Oui | Sans objet | Les sauvegardes (chapitre 9) |
Les stockages créés à l'installation
Après une installation en ext4 sur un disque, l'hôte a deux stockages :
local: le dossier/var/lib/vz, pour les ISO, les modèles de conteneurs et les sauvegardes ;local-lvm: le pool LVM-thindatadu groupe de volumespve, pour les disques des VM et des conteneurs.
Après une installation en ZFS, local-lvm est remplacé par local-zfs, le jeu de données rpool/data. Tous les stockages sont décrits dans un seul fichier, /etc/pve/storage.cfg, commun à tout le cluster :
dir: local
path /var/lib/vz
content iso,vztmpl,backup
lvmthin: local-lvm
thinpool data
vgname pve
content rootdir,images
Pour voir l'état de tous les stockages, leur taille et leur remplissage :
pvesm status
Sur LVM-thin, regarde aussi le remplissage du pool et de ses métadonnées : lvs affiche les colonnes Data% et Meta% du volume data. Si l'une approche 100 %, les VM vont souffrir.
ZFS : le stockage local avec intégrité et snapshots
ZFS est à la fois un gestionnaire de volumes et un système de fichiers. Il assemble des disques en pool, organisé en groupes redondants (vdev) : un miroir (deux disques ou plus, comme un RAID 1), un RAIDZ-1 (une parité, comme un RAID 5), un RAIDZ-2 (deux parités, comme un RAID 6). Ce qu'il apporte en plus d'un RAID classique :
- une somme de contrôle sur chaque bloc : ZFS détecte une donnée corrompue et la répare depuis la copie saine du miroir. Une vérification complète, le scrub, est planifiée chaque mois par Proxmox ;
- la compression à la volée (
lz4par défaut sur Proxmox), qui fait souvent gagner de la place et du temps ; - des snapshots instantanés, et la réplication d'une VM vers un autre nœud par envoi des seuls blocs modifiés (chapitre 10).
ZFS a un coût : il utilise la mémoire comme cache de lecture, l'ARC. Sur une installation récente, Proxmox limite l'ARC à 10 % de la mémoire de l'hôte, au plus 16 Gio ; la règle de dimensionnement de l'éditeur est d'environ 1 Go de mémoire par To de stockage ZFS.
Pour créer un pool sur des disques vides : sélectionne le nœud, Disks > ZFS > Create: ZFS, donne un nom, choisis le niveau de RAID (Mirror, RAIDZ…), coche les disques, laisse cochée l'option Add Storage. Puis vérifie en ligne de commande :
zpool status # état du pool et de chaque disque, erreurs, dernier scrub
zpool list # taille, espace occupé, fragmentation
zfs list # jeux de données et volumes (un zvol par disque de VM)
Le stockage partagé sur un NAS TrueNAS
Pour que les VM puissent passer d'un hôte à l'autre sans copier leurs disques, et redémarrer ailleurs si leur hôte tombe, leurs disques doivent être sur un stockage partagé, vu par tous les nœuds. Chez Sorbier, c'est un NAS TrueNAS Community Edition (version 25.10, la gamme autrefois appelée TrueNAS SCALE), nommé truenas, branché sur un réseau réservé au stockage : le VLAN 80, 192.168.10.240/28, non routé. TrueNAS a l'adresse 192.168.10.241 ; les trois hôtes .242, .243 et .244. La configuration de TrueNAS lui-même (pools, jeux de données, partages, instantanés) relève du cours Stockage et NAS avec TrueNAS, qui prépare le partage NFS pour Proxmox VE et la cible iSCSI ; on regarde ici le côté Proxmox.
Deux protocoles sont possibles :
| NFS (partage de fichiers) | iSCSI (disque en mode bloc) | |
|---|---|---|
| Ce que voit Proxmox | Un dossier réseau, où chaque disque de VM est un fichier | Un disque brut (un LUN), sur lequel on pose LVM |
| Format des disques | qcow2 (ou raw) | Volumes LVM |
| Snapshots de VM | Oui, avec qcow2 | Seulement avec l'option des chaînes de volumes de Proxmox VE 9 (aperçu technologique) |
| Mise en place | Simple | Plus technique (cible, initiateur, LVM, éventuellement multipath) |
| Côté TrueNAS | Un jeu de données et un partage NFS | Un zvol, une cible et une extension iSCSI |
| Pour qui | La plupart des PME et des laboratoires | Les besoins de performances en bloc, les habitués des baies SAN |
Déclarer le partage NFS. Côté TrueNAS, le jeu de données tank/proxmox est partagé en NFS, avec l'accès limité au réseau 192.168.10.240/28 et l'option Maproot User réglée sur root (Proxmox écrit les fichiers des VM en tant que root : c'est l'équivalent de l'option no_root_squash d'un serveur NFS Linux). Côté Proxmox, dans Datacenter > Storage > Add > NFS :
| Champ | Valeur |
|---|---|
| ID | truenas-nfs |
| Server | 192.168.10.241 |
| Export | /mnt/tank/proxmox (la liste se remplit si le serveur répond) |
| Content | Disk image, ISO image, Container |
| Nodes | All |
La même opération en ligne de commande :
pvesm add nfs truenas-nfs --server 192.168.10.241 --export /mnt/tank/proxmox \
--content images,iso,rootdir
pvesm status
Proxmox monte le partage sur chaque nœud dans /mnt/pve/truenas-nfs.
Déclarer un volume iSCSI. Côté TrueNAS, un zvol est présenté par une cible iSCSI. Côté Proxmox :
- Datacenter > Storage > Add > iSCSI : ID
truenas-iscsi, Portal192.168.10.241, Target choisie dans la liste. Décoche Use LUNs directly : on ne met pas les VM directement sur le LUN. - Datacenter > Storage > Add > LVM : ID
truenas-lvm, Base storagetruenas-iscsi, Base volume le LUN, Volume groupvg_truenas, coche Shared : tous les nœuds verront le même groupe de volumes, et Proxmox se charge qu'un seul nœud utilise un volume à la fois.
Ceph, le stockage distribué
Ceph répartit les données sur les disques de tous les nœuds du cluster, avec trois copies de chaque bloc par défaut : il n'y a plus de NAS central, chaque nœud est à la fois serveur de calcul et de stockage. C'est l'hyperconvergence. Proxmox VE installe et administre Ceph depuis son interface (Node > Ceph). Il faut au moins trois nœuds, plusieurs disques par nœud, un réseau dédié rapide (10 Gbit/s au minimum, 25 Gbit/s recommandés) et de la mémoire. Pour une PME de la taille de Sorbier, un NAS bien protégé et des sauvegardes solides suffisent souvent ; Ceph se justifie quand la disponibilité du stockage doit être aussi élevée que celle des hôtes.
Choisir et déplacer un stockage
| Besoin | Stockage conseillé |
|---|---|
| Un hôte isolé, un laboratoire | local-lvm ou local-zfs |
| Un hôte isolé dont les données comptent | ZFS en miroir |
| Deux ou trois nœuds, migration à chaud, haute disponibilité | NFS sur un NAS (ou iSCSI), ou réplication ZFS si on accepte de perdre quelques minutes de données |
| Trois nœuds ou plus, sans point unique de défaillance | Ceph |
| Les ISO et les modèles | Un stockage partagé (NFS) pour ne pas les copier sur chaque nœud |
| Les sauvegardes | Proxmox Backup Server, sur une autre machine que les VM |
Un disque se déplace d'un stockage à l'autre sans arrêter la VM : sélectionne la VM, Hardware, le disque, puis Disk Action > Move Storage. En ligne de commande : qm disk move 179 scsi0 truenas-nfs. C'est ainsi qu'on vide un stockage avant une maintenance.
Exercices
Exercice 1 sur 4 Surallocation Réussi À revoir
Le pool LVM-thin data de pve1 fait 800 Go. On y a créé six VM avec des disques de 200 Go chacun, qui contiennent en tout 380 Go de données.
- Quel espace a été promis aux VM ? Quel est le taux de surallocation ?
- Quel est le taux de remplissage réel du pool ?
- Que se passe-t-il si les VM écrivent encore 450 Go ?
Voir la réponseMasquer la réponse de l'exercice 1
- 6 × 200 = 1 200 Go promis, pour 800 Go réels : taux de surallocation 1 200 / 800 = 1,5 (150 %).
- 380 / 800 = 47,5 %.
- 380 + 450 = 830 Go, plus que les 800 Go du pool : le pool est plein avant la fin des écritures. Les VM reçoivent des erreurs d'écriture, se figent ou abîment leurs systèmes de fichiers. Il fallait une alerte (à 80 %, soit 640 Go) et agrandir le pool ou déplacer des disques avant.
Tu avais trouvé ?
Exercice 2 sur 4 Lire storage.cfg Réussi À revoir
Voici un extrait du fichier /etc/pve/storage.cfg du cluster de Sorbier.
dir: local
path /var/lib/vz
content iso,vztmpl,backup
zfspool: local-zfs
pool rpool/data
sparse
content images,rootdir
nfs: truenas-nfs
export /mnt/tank/proxmox
path /mnt/pve/truenas-nfs
server 192.168.10.241
content images,iso,rootdir
- Sur quel stockage faut-il mettre le disque de
srv-gestionpour pouvoir la migrer à chaud sans copier son disque ? - Où ranger l'ISO de Windows Server 2025 pour qu'elle soit disponible sur les trois nœuds sans la copier trois fois ?
- Que signifie la ligne
sparse?
Voir la réponseMasquer la réponse de l'exercice 2
- Sur
truenas-nfs, le seul stockage partagé : les trois nœuds voient le même fichier de disque. - Sur
truenas-nfsaussi, qui accepte le contenuiso. Surlocal, il faudrait la copier sur chaque nœud. - Les volumes ZFS sont créés en allocation dynamique : un disque de 100 Go n'occupe que ce qui est réellement écrit.
Tu avais trouvé ?
Exercice 3 sur 4 Quel stockage pour quel besoin ? Réussi À revoir
Pour chaque situation, choisis le stockage et justifie.
- Un TP sur un seul vieux PC, avec un seul disque.
- Le cluster de Sorbier : les VM doivent redémarrer automatiquement sur un autre nœud si le leur tombe.
- Une agence avec deux nœuds et pas de NAS, qui accepte de perdre au plus 15 minutes de données en cas de panne d'un nœud.
Voir la réponseMasquer la réponse de l'exercice 3
local-lvm(oulocal-zfs) : rien à partager, un seul hôte.- Un stockage partagé, ici le NFS de TrueNAS (
truenas-nfs), ou Ceph : la haute disponibilité exige que le nœud qui reprend la VM trouve son disque. - ZFS local sur chaque nœud, avec réplication toutes les 15 minutes vers l'autre nœud : en cas de panne, la VM redémarre sur la dernière copie répliquée, avec au plus 15 minutes de données perdues. Il faudra aussi un troisième vote pour le quorum (QDevice, chapitre 10).
Tu avais trouvé ?
Exercice 4 sur 4 Snapshot impossible Réussi À revoir
Un technicien veut prendre un snapshot de la VM 225 avant une mise à jour. Le bouton Take Snapshot est grisé. La VM a un seul disque, local:225/vm-225-disk-0.raw. Explique pourquoi et propose deux solutions.
Voir la réponseMasquer la réponse de l'exercice 4
Le disque est un fichier raw sur un stockage de type dossier (local) : ce couple ne gère pas les snapshots. Solutions, avec Disk Action > Move Storage, éventuellement VM allumée : déplacer le disque vers un stockage en mode bloc qui gère les snapshots (local-lvm ou local-zfs) ; ou le déplacer vers le stockage NFS en choisissant le format qcow2 dans la fenêtre Move Storage. En attendant, une sauvegarde avec vzdump reste possible avant la mise à jour.
Tu avais trouvé ?