Tom Daluzeau
← Parcours Linux · ressources
Linux · ressources · leçon 4 / 6Ch. 3 · Stockage11 minTerminée

LVM : des volumes qu'on agrandit sans tout casser

Tu sais expliquer les trois étages PV, VG et LV, créer un volume logique, l'agrandir avec son système de fichiers, ajouter un disque au groupe et dire à quoi sert un instantané.

Mis à jour le

À recouper avec le cours. Cette leçon a été écrite à partir du plan du chapitre, avant relecture avec les supports. En cas de doute, le cours fait foi.

Pourquoi on voit ça

Avec des partitions classiques, la taille est figée. Tu donnes 10 Go à /var, et six mois plus tard /var est plein alors que /home est à moitié vide. Déplacer la limite entre deux partitions est risqué, et souvent impossible sans arrêter le serveur.

LVM (Logical Volume Manager) ajoute une couche souple entre les disques et les systèmes de fichiers. Avec lui, tu agrandis un volume à chaud, tu ajoutes un disque sans rien réinstaller, et tu prends une photo d’un volume avant une opération risquée. C’est pour ça qu’on le trouve sur presque tous les serveurs : « le disque est plein » se règle en deux commandes.

Les trois étages

Pense à un réservoir d’eau.

  • Chaque disque est un bidon. Pour pouvoir le verser, tu le prépares : c’est un PV (Physical Volume, volume physique).
  • Tu verses tous les bidons dans un seul réservoir : c’est le VG (Volume Group, groupe de volumes). On ne sait plus quelle goutte vient de quel bidon, on voit juste une quantité totale.
  • Tu remplis des bouteilles à partir du réservoir, de la taille que tu veux : ce sont les LV (Logical Volumes, volumes logiques). C’est sur un LV que tu poses un système de fichiers.
Disques le matériel PV pvcreate VG vgcreate LV lvcreate Système de fichiers mkfs.ext4, mount /dev/sdb · 20 Go /dev/sdc · 20 Go PV /dev/sdb PV /dev/sdc VG vg_data : 40 Go mis en commun lv_web · 10 Go lv_logs · 5 Go libre VFree ext4 · /srv/web ext4 · /var/log
Les bidons, le réservoir, les bouteilles. On ne sait plus quel disque porte quel volume : on voit une réserve commune.
Étage Ce que c’est Créer Afficher Agrandir
PV un disque (ou une partition) préparé pour LVM pvcreate pvs
VG le réservoir qui réunit les PV vgcreate vgs vgextend
LV un volume découpé dans le VG lvcreate lvs lvextend

Les commandes se devinent : les deux premières lettres disent l’étage (pv, vg, lv), la suite dit l’action.

Créer un volume, du disque au montage

Tu as un disque vide /dev/sdb. On monte les étages un par un.

pvcreate /dev/sdb
vgcreate vg_data /dev/sdb
lvcreate -L 10G -n lv_web vg_data
  • pvcreate prépare le disque.
  • vgcreate crée le groupe vg_data et y met ce disque.
  • lvcreate découpe un volume : -L donne la taille, -n le nom, et le dernier mot est le groupe où prendre la place.

Le volume apparaît sous le chemin /dev/vg_data/lv_web (toujours /dev/ + groupe + volume). Tu le trouveras aussi sous le nom /dev/mapper/vg_data-lv_web dans certaines sorties : c’est le même volume. Il se formate et se monte comme une partition :

mkfs.ext4 /dev/vg_data/lv_web
mount /dev/vg_data/lv_web /srv/web

Regarder où on en est

Trois commandes courtes, une par étage :

pvs
vgs
lvs
  PV         VG      Fmt  Attr PSize   PFree
  /dev/sdb   vg_data lvm2 a--  <20.00g <10.00g

  VG      #PV #LV #SN Attr   VSize   VFree
  vg_data   1   1   0 wz--n- <20.00g <10.00g

  LV     VG      Attr       LSize
  lv_web vg_data -wi-ao---- 10.00g

La colonne à regarder avant d’agrandir quoi que ce soit, c’est VFree dans vgs : la place encore libre dans le réservoir. Ici, il reste un peu moins de 10 Go.

Agrandir un volume

C’est le geste le plus courant. Il se fait en deux temps, parce qu’il y a deux boîtes l’une dans l’autre : le volume logique, et le système de fichiers posé dessus.

lvextend -L +5G /dev/vg_data/lv_web
resize2fs /dev/vg_data/lv_web
  1. lvextend agrandit le volume. Avec +5G, tu ajoutes 5 Go à la taille actuelle. Sans le +, -L 15G veut dire « taille finale : 15 Go ».
  2. resize2fs agrandit le système de fichiers ext4 pour qu’il occupe tout le volume. Pour ext4, ça marche même volume monté.

Si tu oublies la deuxième commande, lvs affiche bien 15 Go, mais df -h montre toujours 10 Go : le système de fichiers ne sait pas que sa boîte a grandi.

cadre = le LV · plein = le système de fichiers ext4 Au départ 1. le volume lvextend -L +5G 2. ext4 resize2fs lvs : 10G · df -h : 10G lvs : 15G · df -h : toujours 10G lvs : 15G · df -h : 15G ext4 · 10 Go ext4 · 10 Go 5 Go inutilisés ext4 · 15 Go
La boîte grandit d'abord, son contenu ensuite. lvextend -r enchaîne les deux.

Pour ne pas l’oublier, l’option -r fait les deux d’un coup :

lvextend -r -L +5G /dev/vg_data/lv_web

Ajouter un disque au groupe

Si VFree est à 0, lvextend refuse : le réservoir est vide. Tu ajoutes alors un bidon.

pvcreate /dev/sdc
vgextend vg_data /dev/sdc

vgextend ajoute le nouveau PV au groupe existant. VFree remonte, et tu peux relancer lvextend. Le serveur n’a pas été arrêté, les volumes sont restés montés.

Les instantanés

Un instantané (snapshot) est une photo d’un volume à un instant précis.

lvcreate -s -L 1G -n snap_web /dev/vg_data/lv_web

-s veut dire snapshot. Le dernier argument est le volume à photographier. La taille (-L 1G) n’est pas celle du volume : c’est la place réservée pour noter les changements.

Car l’instantané ne copie rien au départ. À chaque fois qu’un bloc de l’original est modifié, LVM met d’abord l’ancienne version de ce bloc de côté, dans l’instantané. Il ne stocke donc que les différences. C’est pour ça qu’il est créé en une seconde et qu’il prend peu de place.

lv_web : l'original snap_web : 1G réservé 1. l'ancien B est d'abord copié A B' C D B ancien place libre pour la suite 2. puis la nouvelle version B' est écrite dans l'original Lire snap_web : A, C, D dans l'original, l'ancien B dans l'instantané
Rien n'est copié à la création. Seuls les blocs modifiés ensuite laissent leur ancienne version dans l'instantané.

À quoi ça sert

  • Avant une opération risquée (mise à jour, migration) : si ça tourne mal, l’état d’avant existe encore.
  • Pour faire une sauvegarde cohérente : tu copies le contenu figé de l’instantané pendant que l’original continue de changer.

Pourquoi ce n’est pas une sauvegarde

  • Il est dans le même groupe de volumes, donc sur les mêmes disques. Si le disque meurt, l’original et l’instantané partent ensemble.
  • Il ne contient que des différences : sans le volume d’origine, il ne vaut rien.
  • S’il se remplit (plus de changements que la place réservée), il devient inutilisable.

Un instantané est un outil temporaire : on le crée, on s’en sert, on le supprime.

Contexte, pas à apprendre. Pour supprimer un instantané devenu inutile, on utilise lvremove /dev/vg_data/snap_web. Pour revenir à l’état photographié, lvconvert --merge /dev/vg_data/snap_web.

À retenir

  • Trois étages : PV (disque préparé) → VG (réservoir) → LV (volume qu’on formate et qu’on monte).
  • Créer : pvcreate, vgcreate, lvcreate -L taille -n nom groupe. Afficher : pvs, vgs, lvs.
  • Agrandir, c’est deux temps : lvextend -L +5G puis resize2fs (ext4). Ou tout d’un coup avec lvextend -r.
  • Plus de place dans le groupe (VFree à 0) : pvcreate sur un nouveau disque, puis vgextend.
  • lvcreate -s crée un instantané : une photo qui ne stocke que les différences.
  • Un instantané n’est pas une sauvegarde : il est sur les mêmes disques et dépend de l’original.

Entraînement

12 questions, dont 3 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.

Cartes · 8

Réviser les cartes ici

Espace : retourner