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
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
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
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
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
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
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
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
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
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
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
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.
Commentaires