Server
Difficulte: Intermediate
13 min de lecture

LVM : Gestion des volumes logiques sous Linux

Maîtrisez LVM pour gérer vos espaces de stockage Linux avec flexibilité : redimensionnement à chaud, snapshots, thin provisioning et migration de données.

Retour aux tutoriels
À propos de LVM
LVM (Logical Volume Manager) est un système de gestion de volumes logiques pour Linux qui offre une couche d'abstraction entre les disques physiques et les systèmes de fichiers. Il permet de redimensionner, déplacer et administrer vos espaces de stockage avec une flexibilité impossible à obtenir avec un partitionnement classique.

Prérequis

  • Système d'exploitation : Distribution Linux (Debian 10+, Ubuntu 18.04+, CentOS 7+, RHEL 7+)
  • Privilèges : Accès root ou privilèges sudo
  • Disques : Un ou plusieurs disques ou partitions disponibles (non montés)
  • Connaissances : Notions de base en administration Linux et gestion des disques

Concepts LVM

LVM repose sur trois niveaux d'abstraction empilés. Comprendre cette architecture est essentiel avant de manipuler les commandes.

Les trois couches LVM

  • Physical Volumes (PV) : Les disques ou partitions physiques initialisés pour LVM. C'est la couche la plus basse, directement liée au matériel.
  • Volume Groups (VG) : Des pools de stockage qui regroupent un ou plusieurs PV. Ils constituent le réservoir d'espace dans lequel on découpe les volumes logiques.
  • Logical Volumes (LV) : Les volumes visibles par le système de fichiers. Ils sont découpés depuis un VG et peuvent être redimensionnés dynamiquement.

Diagramme de l'architecture LVM

┌─────────────────────────────────────────────────────────┐
│                    Systèmes de fichiers                  │
│              /home        /var        /data              │
├─────────────────────────────────────────────────────────┤
│                   Logical Volumes (LV)                   │
│              lv_home      lv_var      lv_data            │
├─────────────────────────────────────────────────────────┤
│                    Volume Group (VG)                      │
│                       vg_data                            │
├──────────────────┬──────────────────┬───────────────────┤
│  Physical Volume │  Physical Volume │  Physical Volume  │
│    /dev/sda1     │    /dev/sdb1     │    /dev/sdc1      │
├──────────────────┼──────────────────┼───────────────────┤
│   Disque sda     │   Disque sdb     │   Disque sdc      │
└──────────────────┴──────────────────┴───────────────────┘

La donnée est découpée en Physical Extents (PE), des blocs de taille fixe (4 Mo par défaut) qui sont l'unité d'allocation de base de LVM.

Installation

Le paquet lvm2 est nécessaire pour utiliser LVM. Il est souvent pré-installé sur les distributions serveur.

# Debian / Ubuntu
sudo apt update && sudo apt install -y lvm2

# CentOS / RHEL / Fedora
sudo dnf install -y lvm2

# Vérifier l'installation
lvm version
Vérification
Si la commande lvm version affiche les informations de version, LVM est correctement installé et prêt à l'emploi.

Création de l'infrastructure LVM

La mise en place de LVM suit un ordre précis : on initialise d'abord les PV, puis on crée un VG, et enfin on découpe les LV.

Étape 1 : Créer les Physical Volumes

Initialisez les disques ou partitions qui seront gérés par LVM :

# Initialiser des disques entiers comme PV
sudo pvcreate /dev/sdb /dev/sdc

# Ou initialiser des partitions spécifiques
sudo pvcreate /dev/sdb1 /dev/sdc1

# Vérifier les PV créés
sudo pvs
sudo pvdisplay
Attention
La commande pvcreate détruit toutes les données présentes sur le disque ou la partition ciblée. Vérifiez deux fois le nom du périphérique avant d'exécuter cette commande.

Étape 2 : Créer le Volume Group

Regroupez les PV dans un Volume Group :

# Créer un VG nommé "vg_data" avec deux PV
sudo vgcreate vg_data /dev/sdb /dev/sdc

# Vérifier le VG créé
sudo vgs
sudo vgdisplay vg_data

Étape 3 : Créer les Logical Volumes

Découpez des LV depuis le VG selon vos besoins :

# Créer un LV de 50 Go
sudo lvcreate -L 50G -n lv_home vg_data

# Créer un LV de 20 Go
sudo lvcreate -L 20G -n lv_var vg_data

# Créer un LV utilisant tout l'espace restant
sudo lvcreate -l 100%FREE -n lv_data vg_data

# Vérifier les LV créés
sudo lvs
sudo lvdisplay

Les volumes logiques sont accessibles via le chemin /dev/vg_data/lv_home ou /dev/mapper/vg_data-lv_home.

Formatage et montage

Les volumes logiques se comportent comme des partitions classiques. Il faut les formater puis les monter.

Formater les volumes

# Formater en ext4
sudo mkfs.ext4 /dev/vg_data/lv_home
sudo mkfs.ext4 /dev/vg_data/lv_var

# Formater en XFS (recommandé pour les gros volumes)
sudo mkfs.xfs /dev/vg_data/lv_data

Montage temporaire

# Créer les points de montage
sudo mkdir -p /mnt/home /mnt/var /mnt/data

# Monter les volumes
sudo mount /dev/vg_data/lv_home /mnt/home
sudo mount /dev/vg_data/lv_var /mnt/var
sudo mount /dev/vg_data/lv_data /mnt/data

# Vérifier le montage
df -hT | grep vg_data

Montage permanent via fstab

Pour un montage automatique au démarrage, ajoutez les entrées dans /etc/fstab :

# Récupérer les UUID des volumes
sudo blkid /dev/vg_data/lv_home
sudo blkid /dev/vg_data/lv_var
sudo blkid /dev/vg_data/lv_data

# Ajouter dans /etc/fstab (remplacer les UUID)
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /home ext4 defaults 0 2
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var  ext4 defaults 0 2
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs  defaults 0 2

# Tester la configuration fstab sans redémarrer
sudo mount -a
Vérification critique
Testez toujours avec mount -a après modification de /etc/fstab. Une erreur dans ce fichier peut empêcher le système de démarrer.

Redimensionnement des volumes

Le redimensionnement est l'un des principaux avantages de LVM. L'extension est une opération sûre, la réduction demande des précautions.

Extension d'un volume logique

# Ajouter 10 Go au volume
sudo lvextend -L +10G /dev/vg_data/lv_home

# Ou étendre à une taille totale de 80 Go
sudo lvextend -L 80G /dev/vg_data/lv_home

# Redimensionner le système de fichiers ext4
sudo resize2fs /dev/vg_data/lv_home

# Pour XFS (extension uniquement, pas de réduction)
sudo xfs_growfs /mnt/data

# Raccourci : étendre LV et filesystem en une seule commande
sudo lvextend -L +10G --resizefs /dev/vg_data/lv_home
Opération en ligne
L'extension d'un volume logique et le redimensionnement du système de fichiers ext4 ou XFS peuvent se faire à chaud, sans démonter le volume. C'est l'opération LVM la plus courante en production.

Ajout d'un nouveau disque au VG

# Initialiser le nouveau disque
sudo pvcreate /dev/sdd

# Étendre le VG avec le nouveau PV
sudo vgextend vg_data /dev/sdd

# L'espace est maintenant disponible pour les LV
sudo vgs

Réduction d'un volume logique

Opération dangereuse
La réduction d'un volume logique peut entraîner une perte de données. Effectuez une sauvegarde complète avant toute réduction. XFS ne supporte pas la réduction.
# 1. Démonter le volume
sudo umount /mnt/home

# 2. Vérifier l'intégrité du système de fichiers
sudo e2fsck -f /dev/vg_data/lv_home

# 3. Réduire le système de fichiers à 30 Go
sudo resize2fs /dev/vg_data/lv_home 30G

# 4. Réduire le volume logique à 30 Go
sudo lvreduce -L 30G /dev/vg_data/lv_home

# 5. Remonter le volume
sudo mount /dev/vg_data/lv_home /mnt/home

Snapshots LVM

Les snapshots permettent de capturer l'état d'un volume à un instant précis, en utilisant le mécanisme copy-on-write.

Création d'un snapshot

# Créer un snapshot de 5 Go du volume lv_home
sudo lvcreate -L 5G -s -n snap_home /dev/vg_data/lv_home

# Vérifier le snapshot
sudo lvs

# Monter le snapshot en lecture seule pour vérification
sudo mkdir -p /mnt/snapshot
sudo mount -o ro /dev/vg_data/snap_home /mnt/snapshot
Dimensionnement du snapshot
La taille du snapshot détermine combien de modifications il peut absorber. Si le snapshot se remplit à 100%, il devient inutilisable. Surveillez son utilisation avec lvs et dimensionnez-le en fonction du taux de modification attendu.

Restauration depuis un snapshot

# Démonter le volume original et le snapshot
sudo umount /mnt/home
sudo umount /mnt/snapshot

# Fusionner le snapshot avec le volume original (restauration)
sudo lvconvert --merge /dev/vg_data/snap_home

# Réactiver le volume (peut nécessiter un redémarrage)
sudo lvchange -an /dev/vg_data/lv_home
sudo lvchange -ay /dev/vg_data/lv_home

# Remonter le volume restauré
sudo mount /dev/vg_data/lv_home /mnt/home

Suppression d'un snapshot

# Démonter le snapshot s'il est monté
sudo umount /mnt/snapshot

# Supprimer le snapshot
sudo lvremove /dev/vg_data/snap_home

Thin Provisioning

Le thin provisioning permet d'allouer plus d'espace logique que l'espace physique réellement disponible. L'espace n'est consommé que lors de l'écriture effective des données.

Création d'un thin pool

# Créer un thin pool de 100 Go dans le VG
sudo lvcreate -L 100G --thinpool thin_pool vg_data

# Créer des volumes thin (over-provisionning possible)
sudo lvcreate -V 50G --thin -n thin_vol1 vg_data/thin_pool
sudo lvcreate -V 50G --thin -n thin_vol2 vg_data/thin_pool
sudo lvcreate -V 80G --thin -n thin_vol3 vg_data/thin_pool

# Total alloué : 180 Go pour un pool de 100 Go
# Seul l'espace réellement écrit est consommé

# Vérifier l'utilisation réelle
sudo lvs -a
Surveillance obligatoire
Avec le thin provisioning, si l'espace physique du pool est épuisé, tous les volumes thin deviennent inaccessibles. Mettez en place une surveillance active du taux de remplissage du pool et configurez des alertes à 80% d'utilisation.

Extension du thin pool

# Étendre le pool de données
sudo lvextend -L +50G vg_data/thin_pool

# Étendre le pool de métadonnées si nécessaire
sudo lvextend -L +1G vg_data/thin_pool_tmeta

Migration de données

La commande pvmove permet de migrer les données d'un disque physique vers un autre sans interruption de service.

Migration avec pvmove

# Migrer toutes les données de sdb vers sdd
sudo pvmove /dev/sdb /dev/sdd

# Migrer un volume logique spécifique
sudo pvmove -n lv_home /dev/sdb /dev/sdd

# Suivre la progression en temps réel
sudo pvmove -i 5 /dev/sdb /dev/sdd

Remplacement d'un disque

# 1. Ajouter le nouveau disque au VG
sudo pvcreate /dev/sde
sudo vgextend vg_data /dev/sde

# 2. Migrer les données de l'ancien disque
sudo pvmove /dev/sdb /dev/sde

# 3. Retirer l'ancien disque du VG
sudo vgreduce vg_data /dev/sdb

# 4. Désactiver le PV de l'ancien disque
sudo pvremove /dev/sdb

# Le disque /dev/sdb peut maintenant être retiré physiquement
Zéro temps d'arrêt
La migration pvmove fonctionne en ligne. Les applications continuent d'accéder aux données pendant toute la durée du transfert.

RAID avec LVM

LVM intègre des fonctionnalités RAID logiciel qui permettent la redondance et l'amélioration des performances sans outil externe.

Mirroring (RAID 1)

# Créer un volume miroir sur deux disques
sudo lvcreate --type raid1 -m 1 -L 20G -n lv_mirror vg_data

# Vérifier l'état de la synchronisation
sudo lvs -a -o +devices,sync_percent

# Convertir un volume existant en miroir
sudo lvconvert --type raid1 -m 1 /dev/vg_data/lv_home

Striping (RAID 0)

# Créer un volume stripé sur 2 disques
# -i : nombre de stripes, -I : taille du stripe en Ko
sudo lvcreate --type raid0 -i 2 -I 64 -L 40G -n lv_stripe vg_data

# Le striping améliore les performances I/O en répartissant
# les écritures sur plusieurs disques simultanément
RAID 1 vs RAID 0
Le mirroring (RAID 1) offre la redondance au prix de la moitié de l'espace disponible. Le striping (RAID 0) double les performances I/O mais n'offre aucune redondance : la perte d'un disque entraîne la perte de toutes les données.

Monitoring

La surveillance régulière de l'infrastructure LVM est indispensable pour anticiper les problèmes d'espace et de performance.

Commandes de consultation

# Vue synthétique des Physical Volumes
sudo pvs

# Vue synthétique des Volume Groups
sudo vgs

# Vue synthétique des Logical Volumes
sudo lvs

# Informations détaillées
sudo pvdisplay /dev/sdb
sudo vgdisplay vg_data
sudo lvdisplay /dev/vg_data/lv_home

# Afficher les segments et la disposition physique
sudo pvs -o +pv_used,pv_free
sudo lvs -o +seg_pe_ranges,devices

Surveillance automatisée

# Script de surveillance basique
#!/bin/bash
THRESHOLD=85

# Vérifier le taux d'utilisation de chaque VG
for vg in $(vgs --noheadings -o vg_name); do
    usage=$(vgs --noheadings -o vg_free_percent "$vg" | tr -d ' ')
    used=$((100 - ${usage%.*}))
    if [ "$used" -gt "$THRESHOLD" ]; then
        echo "ALERTE : VG $vg utilise a ${used}%" | logger -t lvm-monitor
    fi
done
Conseil pro
Intégrez ce script dans une tâche cron ou dans votre outil de monitoring (Nagios, Zabbix, Prometheus) pour être alerté avant que l'espace ne soit épuisé.

Sécurisation et bonnes pratiques

  • Nommage cohérent : Adoptez une convention de nommage claire pour les VG et LV (ex: vg_srv01, lv_mysql_data).
  • Ne pas allouer 100% de l'espace : Conservez toujours 10 à 20% d'espace libre dans le VG pour les snapshots et les urgences.
  • Sauvegardes de la configuration : Exportez régulièrement la configuration LVM avec vgcfgbackup.
  • Monitoring continu : Surveillez le remplissage des VG, des LV et surtout des thin pools.
  • Documentation : Documentez votre infrastructure LVM (disques, VG, LV, points de montage) dans un wiki ou un fichier de configuration centralisé.
  • Tester les restaurations : Vérifiez périodiquement que les snapshots et les sauvegardes sont fonctionnels en les restaurant sur un environnement de test.
# Sauvegarder la configuration du VG
sudo vgcfgbackup vg_data

# Les fichiers de backup sont dans /etc/lvm/backup/
ls -la /etc/lvm/backup/

# Restaurer une configuration (en cas de corruption des métadonnées)
sudo vgcfgrestore vg_data

Troubleshooting

Voici les problèmes les plus fréquents rencontrés avec LVM et leurs solutions.

Volume Group introuvable

# Scanner les disques pour détecter les PV
sudo pvscan

# Réactiver tous les VG
sudo vgchange -ay

# Si le VG est sur un disque externe, forcer le scan
sudo vgscan --mknodes

# Vérifier que le module dm-mod est chargé
lsmod | grep dm
sudo modprobe dm-mod

Espace insuffisant dans le VG

# Vérifier l'espace disponible
sudo vgs -o +vg_free

# Identifier les LV qui consomment le plus d'espace
sudo lvs -o lv_name,lv_size,data_percent --sort -lv_size

# Solutions possibles :
# 1. Ajouter un nouveau disque
sudo pvcreate /dev/sdX && sudo vgextend vg_data /dev/sdX

# 2. Réduire un LV sous-utilisé (ext4 uniquement)
sudo umount /chemin/montage
sudo e2fsck -f /dev/vg_data/lv_nom
sudo resize2fs /dev/vg_data/lv_nom 20G
sudo lvreduce -L 20G /dev/vg_data/lv_nom

# 3. Supprimer un snapshot devenu inutile
sudo lvremove /dev/vg_data/snap_ancien

Snapshot plein à 100%

# Un snapshot plein est automatiquement invalidé
# Vérifier l'état des snapshots
sudo lvs -o lv_name,origin,snap_percent

# Supprimer le snapshot invalide
sudo lvremove /dev/vg_data/snap_invalide

# Recréer un snapshot plus grand
sudo lvcreate -L 10G -s -n snap_home /dev/vg_data/lv_home

Disque physique défaillant

# Vérifier l'état des PV
sudo pvs -o +pv_missing

# Si un PV est marqué "missing", migrer les données restantes
sudo pvmove --alloc anywhere /dev/sdb

# Si pvmove échoue (disque inaccessible), réduire le VG
sudo vgreduce --removémissing --force vg_data
Perte de données possible
La commande vgreduce --removémissing --force est une opération de dernière chance. Les données stockées sur le disque défaillant seront perdues. Utilisez toujours du RAID ou des sauvegardes pour protéger vos données critiques.

Conclusion

LVM est un outil indispensable pour toute administration Linux sérieuse. Il transforme la gestion du stockage en offrant une flexibilité que le partitionnement classique ne peut pas fournir :

  • Redimensionnement à chaud des volumes sans interruption de service
  • Snapshots pour les sauvegardes cohérentes et les points de restauration
  • Thin provisioning pour une allocation optimale de l'espace
  • Migration en ligne des données entre disques physiques
  • RAID logiciel intégré pour la redondance et les performances

En production, adoptez une approche proactive : surveillez l'espace disponible, conservez des marges de manoeuvre dans vos VG, et testez régulièrement vos procédures de restauration. LVM est un filet de sécurité puissant, mais seulement si vous le maîtrisez avant d'en avoir besoin.

Morgann Riu

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Partager ce tutoriel

Cet article vous a plu ?

Commentaires

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.