Aller au contenu
Infrastructure as Code medium

LVM avec Ansible : pipeline pv → vg → lv → filesystem → mount

11 min de lecture

Logo Ansible

LVM (Logical Volume Manager) abstrait les disques physiques en volumes logiques redimensionnables. Sur RHEL 2026, c’est l’outil standard pour gérer le stockage des serveurs. Pipeline classique :

  1. PV (Physical Volume) — disque ou partition initialisée pour LVM.
  2. VG (Volume Group) — pool de PVs combinés.
  3. LV (Logical Volume) — volume découpé dans le VG (le “disque virtuel” utilisable).

4 modules Ansible forment le pipeline storage complet :

  • community.general.lvg: — gérer les Volume Groups (PVs inclus).
  • community.general.lvol: — gérer les Logical Volumes.
  • community.general.filesystem: — formater un LV ou un disque.
  • ansible.posix.mount: — monter et persister dans fstab.
  • Construire un PV → VG → LV en chaîne avec les modules dédiés.
  • Formater un LV en xfs ou ext4 avec idempotence.
  • Monter le LV via /dev/<vg>/<lv> dans fstab.
  • Étendre un LV à chaud avec lvol: resizefs: true.
  • Comprendre l’ordre du teardown (inverse de la création).
  • community.general et ansible.posix installés.
  • Sur le managed node : lvm2, parted, xfsprogs (généralement installés par défaut sur RHEL).
- name: Pipeline LVM complet
hosts: db1.lab
become: true
tasks:
- name: 1. Creer le VG sur un disque (ou loop device)
community.general.lvg:
vg: lab_vg
pvs: /dev/loop10
state: present
- name: 2. Creer le LV (300M)
community.general.lvol:
vg: lab_vg
lv: lab_lv
size: 300M
state: present
- name: 3. Formater en xfs
community.general.filesystem:
fstype: xfs
dev: /dev/lab_vg/lab_lv
- name: 4. Creer le point de montage
ansible.builtin.file:
path: /mnt/lvm-data
state: directory
mode: "0755"
- name: 5. Monter le LV (fstab + maintenant)
ansible.posix.mount:
path: /mnt/lvm-data
src: /dev/lab_vg/lab_lv
fstype: xfs
opts: defaults,noatime
state: mounted

5 tâches dans l’ordre strict. Chaque module est idempotent — 2e run → changed=0.

- community.general.lvg:
vg: lab_vg
pvs: /dev/loop10
state: present

Le module fait 2 choses :

  1. pvcreate /dev/loop10 — initialise le PV.
  2. vgcreate lab_vg /dev/loop10 — crée le VG sur ce PV.

Étendre le VG ultérieurement avec un nouveau disque :

- community.general.lvg:
vg: lab_vg
pvs: /dev/loop10,/dev/loop11 # Ajout du 2e disque
state: present
- community.general.lvol:
vg: lab_vg
lv: lab_lv
size: 100%FREE
state: present

Format de size: :

  • 100M — taille fixe (en MB).
  • 50%FREE — 50% de l’espace libre du VG.
  • +10G — extension de 10Go (relatif).
  • 100%VG — tout l’espace du VG.

Le LV est créé à /dev/lab_vg/lab_lv (ou /dev/mapper/lab_vg-lab_lv).

Note RHCE : LVM arrondit à des multiples du PE size (4Mo par défaut). Demander 100M peut donner 100M ou 104M selon les cas.

- community.general.filesystem:
fstype: xfs
dev: /dev/lab_vg/lab_lv

Idempotent : si le filesystem est déjà du bon type, changed=0. force: true force le reformatage si un autre filesystem existe (DANGER — perte de données).

Filesystems supportés : ext2, ext3, ext4, xfs, btrfs, f2fs, etc.

Convention RHCE 2026 :

  • xfs est le défaut RHEL 7+ (performant, snapshots, quotas).
  • ext4 reste utilisé pour /boot ou besoin de réduction (xfs ne sait pas réduire).

Limitation xfs : taille minimale ~300Mo. En dessous, mkfs.xfs échoue.

- ansible.posix.mount:
path: /mnt/lvm-data
src: /dev/lab_vg/lab_lv
fstype: xfs
opts: defaults,noatime
state: mounted

Le LV monté via /dev/<vg>/<lv> est plus stable que /dev/sdaX — LVM gère l’alias logique même si le disque change de position physique.

Pattern préféré pour fstab : utiliser UUID=... plutôt que /dev/... :

Fenêtre de terminal
ssh ansible@db1.lab 'sudo blkid /dev/lab_vg/lab_lv'
# /dev/lab_vg/lab_lv: UUID="abc-123" TYPE="xfs"

Cas réel : votre /var/log/ est plein. Vous étendez le LV sans démonter :

- community.general.lvol:
vg: lab_vg
lv: lab_lv
size: +500M
resizefs: true # Etend le filesystem aussi
state: present
  • lvextend étend le LV de 500Mo.
  • resizefs: true lance xfs_growfs (ou resize2fs pour ext4) pour étendre le filesystem sans démonter.

Limitation XFS : xfs_growfs peut étendre mais pas réduire. Pour réduire, il faut ext4 ou démonter + reformater.

# ❌ DANGER : vgremove echoue si des LVs existent encore
- community.general.lvg:
vg: lab_vg
state: absent

Ordre correct pour le teardown (inverse de la création) :

- name: 1. Demonter et retirer fstab
ansible.posix.mount:
path: /mnt/lvm-data
state: absent
- name: 2. Supprimer le LV
community.general.lvol:
vg: lab_vg
lv: lab_lv
state: absent
- name: 3. Supprimer le VG
community.general.lvg:
vg: lab_vg
state: absent

Sauter une étape = échec ou orphelins LVM qui hantent ensuite vos déploiements.

SymptômeCauseFix
mkfs.xfs failed sur LV 100Mxfs minimum ~300MAugmenter le LV ou utiliser ext4
LV taille différente du size: demandéArrondi PE sizeVérifier avec lvs --units M
Teardown VG bloqueLVs encore présentsSupprimer LVs d’abord
xfs_growfs réduit failedxfs ne sait pas réduireBackup + reformater + restore
  • Pipeline LVM : lvg: (PV+VG) → lvol: (LV) → filesystem: (FS) → mount:.
  • size: accepte : 100M, 50%FREE, +10G, 100%VG.
  • xfs est le défaut RHEL 7+ (limitation : ne réduit pas, minimum ~300M).
  • resizefs: true étend filesystem à chaud.
  • Teardown = inverse de la création (mount → lvol → lvg).
  • PE size (4Mo défaut) cause des arrondis légers sur la taille du LV.

Cette page a un lab d’accompagnement : labs/modules-rhel/lvm-storage/ dans stephrobert/ansible-training.

Challenge — sur db1.lab :

  1. Loop device 500M sur /dev/loop10.
  2. VG lab_vg, LV lab_lv (300M).
  3. xfs + mount sur /mnt/lvm-data.

Validation pytest+testinfra :

Fenêtre de terminal
ansible-playbook solution.yml
pytest -v labs/modules-rhel/lvm-storage/challenge/tests/

7 tests vérifient le pipeline complet : image, loop, VG, LV taille (~300M), xfs, mount actif avec noatime, fstab.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn