Dawan Proxmox VE — TSSR

Chapitre 3 — Réseau et stockage

5. Le stockage réseau : NFS et iSCSI

ZFS et LVM-thin couvrent le stockage local d'un nœud. Dès que plusieurs nœuds doivent accéder aux mêmes données, ou que vous voulez centraliser ISOs et sauvegardes, il faut du stockage réseau. Deux protocoles classiques structurent ce sujet.

NFS (Network File System) expose un répertoire d'un serveur comme un dossier réseau. C'est la solution la plus simple pour partager des ISOs, des templates ou des sauvegardes entre nœuds. NFS fonctionne bien pour du stockage de fichiers, moins bien pour des disques de VMs en production à cause de la latence et des problèmes de verrouillage en accès concurrent.

Un serveur NFS exporte un répertoire monté par deux nœuds Proxmox pour les ISO, templates et sauvegardes

iSCSI expose des blocs de disque (LUNs) à travers le réseau IP, comme si c'était un disque local. C'est plus performant que NFS pour les disques de VMs car il n'y a aucune couche de système de fichiers entre Proxmox et le stockage.

L'initiateur Proxmox se connecte à une cible iSCSI sur TCP/IP port 3260 ; le LUN apparaît comme un disque local

Le serveur NFS ou la baie iSCSI sont fournis par l'infrastructure de stockage de l'entreprise : on ne les construit pas sur Proxmox. Côté Proxmox, le travail consiste à déclarer ces stockages.

5.1 Ajouter un partage NFS à Proxmox

Dans l'interface :

Datacenter → Storage → Add → NFS

Fenêtre Add: NFS, devant la liste des stockages

(nœud pxe211 du lab d'exemple, devant un serveur NFS de test). Quatre points méritent l'attention.

  • Le champ Export est une liste déroulante, pas un champ libre. Dès l'adresse du serveur saisie, Proxmox l'interroge et affiche ce qu'il partage réellement.

    Si la liste reste vide, inutile de remplir le reste : soit le serveur ne répond pas, soit il n'exporte pas vers ce nœud. C'est le test de connectivité le plus rapide dont vous disposiez.

  • Le champ Content décide de ce que le stockage acceptera : sauvegardes, ISO, disques de machines, modèles de conteneurs. Un contenu non coché ne pourra pas y être écrit.

  • Nodes : All (No restrictions) déclare le stockage pour tous les nœuds du cluster. Chacun devra pouvoir joindre le serveur, sans quoi le stockage remontera en erreur sur ceux qui n'y arrivent pas.
  • La colonne Shared, dans la liste derrière la fenêtre. local et local-lvm affichent No.

    Le partage NFS affichera Yes : la distinction entre stockage local et stockage partagé, rendue visible en une colonne. C'est elle qui conditionne la migration à chaud et la haute disponibilité.

Laissez NFS Version sur Default : client et serveur négocient seuls. Ne cochez pas Allow Snapshots as Volume-Chain, signalé comme fonction en avant-première.

Champ Valeur
ID nfs-partage
Server l'adresse du serveur NFS
Export /srv/partage (saisir ou sélectionner dans le menu déroulant)
Content ISO Image, Container template, Disk image

En CLI :

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Côté Proxmox — ajouter le stockage NFS
pvesm add nfs nfs-partage \
  --server <adresse-du-serveur-nfs> \
  --export /srv/partage \
  --content iso,vztmpl,images

# Vérifier l'ajout
pvesm status

Résultat attendu d'exemple, où le partage portait l'ID nfs-tp :

nfs-tp            nfs     active         4046848          720896         3099648   17.81%

La colonne Status doit indiquer active. Un inactive signale un serveur injoignable ou un export refusé.

▶ À pratiquer maintenant — Atelier 5

L'autre côté du partage : monter vous-même le serveur NFS dans un conteneur, l'exporter, constater root_squash et le passage brut des UID, puis y écrire une sauvegarde de Proxmox.

Le stockage NFS apparaît immédiatement dans Datacenter → Storage avec son point de montage local /mnt/pve/nfs-partage, que Proxmox choisit lui-même d'après l'identifiant du stockage.

5.2 Ajouter une cible iSCSI, puis LVM par-dessus

Une cible iSCSI expose un disque (un LUN) sur le réseau. On la déclare à Proxmox en deux temps : la cible elle-même, puis un groupe LVM posé sur son LUN. C'est le montage « LVM sur iSCSI » des clusters qui disposent déjà d'un SAN.

Datacenter → Storage → Add → iSCSI

Champ Valeur Ce qu'il décide
ID iscsi-lab Le nom du stockage dans Proxmox
Portal l'adresse de la cible Proxmox l'interroge dès la saisie
Target (liste déroulante) Elle se remplit toute seule — c'est le signe que la découverte fonctionne
Use LUNs directly ✓ ou ✗ Voir l'encadré ci-dessous

Fenetre Add: iSCSI de Proxmox, liste deroulante Target remplie apres saisie du portail

La fenêtre Add: iSCSI, au moment précis où la découverte a réussi.

  • Le champ Target est une liste déroulante, pas un champ libre. Dès que le portail est saisi, Proxmox interroge la cible et affiche les IQN (iSCSI Qualified Name, nom unique d'une cible) qu'elle propose — ici iqn.2026-09.fr.dawan:lab.

    Si cette liste reste vide, inutile de continuer : soit la cible ne répond pas sur le port 3260, soit elle refuse votre nœud. C'est votre meilleur test de connectivité, et il ne coûte rien.

  • Use LUNs directly est cochée par défaut. C'est le réglage à interroger : coché, le LUN entier ira à une seule VM ; décoché, il servira de socle à un groupe LVM. Voir l'encadré plus bas.

  • Il n'y a pas de champ Content, contrairement au dialogue NFS : un LUN iSCSI n'accepte que des images disque, la question ne se pose pas.
  • Regardez la liste derrière la fenêtre. local et local-lvm affichent Shared: No. Une fois ajouté, iscsi-lab y apparaîtra en Shared: Yes — la nature du protocole, pas un réglage.

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# déclarer la cible iSCSI comme stockage
pvesm add iscsi iscsi-lab \
  --portal <ip-de-la-cible-iscsi> \
  --target iqn.2026-09.fr.dawan:lab \
  --content images

pvesm status   # le nouveau stockage doit être actif

Résultat attendu :

root@pxe211:~# pvesm add iscsi iscsi-lab --portal 10.44.1.98 --target iqn.2026-09.fr.dawan:lab --content images
root@pxe211:~# pvesm status
Name             Type     Status           Total            Used       Available        %
iscsi-lab       iscsi     active               0               0               0    0.00%
local             dir     active        98559220        22417684        71095996   22.75%

root@pxe211:~# lsblk | grep sde
sde    8:64   0    10G  0 disk

Les trois zéros ne sont pas une erreur. Un stockage iSCSI brut n'a aucun système de fichiers : Proxmox ne peut donc en calculer ni la taille ni l'occupation. active suffit à confirmer que la session est établie.

La vraie vérification est lsblk : un nouveau disque /dev/sde de la taille du LUN apparaît sur le nœud.

En l'état, ce stockage est peu utilisable : Proxmox y placerait les disques de VM en accès direct au LUN, sans gestion de l'espace ni snapshots. C'est la raison d'être de l'étape suivante — poser LVM par-dessus, ce qui rend le LUN partageable entre nœuds et lui donne une vraie gestion des volumes.

Liste des stockages de Proxmox : iscsi-lab en type iSCSI, colonne Shared a Yes

Le stockage apparaît avec Shared: Yes, alors que local et local-lvm sont à No. Ce n'est pas un réglage : c'est la nature du protocole. Un LUN iSCSI est joignable par tous les nœuds qui connaissent son portail.

C'est ce qui en fait un stockage de cluster. C'est aussi ce qui le rend dangereux sans une couche de coordination au-dessus.

« Use LUNs directly », la case qui décide de tout.

Cochée, le LUN entier devient le disque d'une seule machine virtuelle. C'est simple, mais un LUN de 2 To consacré à une VM de 20 Go est un gâchis, et aucune seconde VM ne pourra y tenir.

Décochée, le LUN reste brut et sert de socle à un groupe de volumes LVM. Proxmox y découpe alors autant de volumes logiques que de disques de VM — un LUN, N machines. C'est le montage de production, et c'est celui que décrit la suite.

L'empilement LVM :

Datacenter → Storage → Add → LVM

Champ Valeur Le piège
ID lvm-sur-iscsi —
Base storage iscsi-lab (iSCSI) Le champ est sur « Existing volume groups » par défaut : c'est lui qu'il faut changer en premier, sinon la liste des volumes reste vide
Base volume le LUN proposé Ne se remplit qu'après avoir choisi le bon Base storage
Volume group vgiscsi Nom du VG à créer
Shared ✓ Indispensable en cluster

Fenetre Add: LVM de Proxmox, champ Base storage sur Existing volume groups

La fenêtre Add: LVM, telle qu'elle s'ouvre — et telle qu'il ne faut pas la laisser.

  • Base storage vaut Existing volume groups par défaut. C'est le piège : tant que ce champ n'est pas changé, Volume group ne propose que les VG déjà présents sur le disque local (ici pve), et le LUN iSCSI reste invisible. Changez ce champ en premier, avant tout le reste.
  • Content vaut Disk image, Container. Sur un LUN partagé de cluster, on laisse les deux : les disques de VM comme les rootfs de conteneurs pourront y vivre.
  • Shared n'est pas cochée par défaut. Sur un stockage bâti sur iSCSI, il faut la cocher. C'est elle qui dit à Proxmox que tous les nœuds voient le même espace, et qui autorise la migration à chaud sans copier les disques.
  • Wipe Removed Volumes reste décochée. Cochée, elle écrase chaque volume supprimé — sécurisant, mais chaque suppression de VM prend alors plusieurs minutes.

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Le meme resultat en ligne de commande, en trois temps :
# le LUN devient un volume physique, puis un groupe de volumes,
# et c'est ce groupe qu'on declare comme stockage Proxmox.
pvcreate /dev/sde
vgcreate vgiscsi /dev/sde   # puis un groupe de volumes
pvesm add lvm lvm-sur-iscsi --vgname vgiscsi --content images --shared 1   # déclaré comme stockage partagé

Résultat attendu :

root@pxe211:~# pvcreate /dev/sde
  Physical volume "/dev/sde" successfully created.
root@pxe211:~# vgcreate vgiscsi /dev/sde
  Volume group "vgiscsi" successfully created
root@pxe211:~# pvesm add lvm lvm-sur-iscsi --vgname vgiscsi --content images --shared 1
root@pxe211:~# pvesm status | grep lvm-sur-iscsi
lvm-sur-iscsi     lvm     active        10481664               0        10481664    0.00%

Cette fois, les tailles sont renseignées : LVM apporte la couche qui manquait au LUN brut, et Proxmox sait enfin compter l'espace disponible.

--shared 1 est indispensable dès que plusieurs nœuds voient le même LUN, et son oubli est coûteux. Ce drapeau indique à Proxmox que le groupe de volumes est visible de tous. Le cluster coordonne alors les accès, et interdit qu'un même volume logique soit activé sur deux nœuds à la fois.

Sans lui, chaque nœud croit le stockage local, et rien n'empêche deux VM d'écrire simultanément sur le même volume — la corruption est alors certaine.

En contrepartie, LVM sur iSCSI ne gère pas les snapshots : les instantanés LVM classiques ne fonctionnent pas sur un groupe de volumes partagé. Pour des snapshots sur stockage partagé, il faut Ceph ou ZFS over iSCSI.

Proxmox VE 9 propose, en avant-première, une alternative : Allow Snapshots as Volume-Chain, avec des disques au format qcow2. À tester, pas à mettre en production tant qu'elle n'est pas déclarée stable.

Ces commandes ne s'exécutent qu'une fois, depuis un seul nœud. pvcreate et vgcreate écrivent sur le LUN lui-même : les autres nœuds voient le groupe de volumes sans rien refaire. Et pvesm add écrit dans /etc/pve/storage.cfg, commun à tout le cluster : le stockage est déclaré pour tous les nœuds d'un coup.

pvcreate détruit ce que porte le périphérique visé. Vérifiez lsblk -S juste avant : le disque iSCSI n'est pas forcément /dev/sde sur votre machine, et l'ordre des lettres peut changer d'un démarrage à l'autre.

Repérez-le par sa taille et sa colonne TRAN=iscsi — jamais par la lettre seule. Cette prudence n'est pas rhétorique : pvcreate sur le mauvais disque efface un système en une seconde.

Le piège du LUN partagé sans verrou. Rien, dans le protocole iSCSI, n'empêche deux nœuds d'écrire simultanément au même endroit du même LUN. Deux systèmes de fichiers concurrents sur un même LUN, c'est une corruption certaine — pas probable, certaine.

C'est exactement le rôle de la couche LVM déclarée shared. Proxmox y tient le registre des volumes logiques, et garantit qu'un même disque de VM n'est ouvert que par un nœud à la fois.

Ne formatez jamais un LUN partagé directement en ext4 ou XFS : ces systèmes de fichiers supposent un accès exclusif. Si vous avez réellement besoin d'un système de fichiers partagé, il faut un système conçu pour cela — OCFS2, GFS2 — ou, dans l'univers Proxmox, Ceph.

À retenir : un partage NFS se déclare par Datacenter → Storage → Add → NFS : il accepte ISO, modèles, sauvegardes et disques. Une cible iSCSI se déclare par Add → iSCSI, puis on pose LVM sur son LUN ; --shared 1 est indispensable dès que plusieurs nœuds le voient.

5.3 La conférence : Ceph, le stockage du futur

NFS et iSCSI supposent un serveur ou une baie de stockage, extérieurs aux nœuds. Ceph, le stockage distribué, s'en passe : cette conférence en explique le fonctionnement.

C'est une bonne introduction à la mise en cluster : elle fait comprendre comment plusieurs nœuds partagent un même stockage.