LVM (Logical Volume Manager) est un système de gestion des volumes logiques permettant la création, le redimensionnement et la gestion flexible des espaces de stockage Linux.
🧩 Principe LVM
Structure hiérarchique :
💿 Disque physique (/dev/sdb)
↓
💾 PV (Physical Volume) - Disque préparé pour LVM
↓
📦 VG (Volume Group) - Pool de stockage (un ou plusieurs PV)
↓
📁 LV (Logical Volume) - Partition virtuelle dans le VG
↓
🗂️ Filesystem (ext4, xfs...) monté sur /data, /db, /appli...
Exemple concret :
- PV :
/dev/sdb
(disque 100GB) - VG :
datavg
(groupe contenant sdb) - LV :
datalv
(volume de 100GB dans datavg) - Mount :
/dev/mapper/datavg-datalv
→/data
🔍 Inspection et état
📌 Action | 🧠 Commande |
---|---|
📊 Vue d’ensemble LVM | lsblk |
💾 Volumes physiques | pvdisplay |
🗂️ Groupes de volumes | vgdisplay |
📁 Volumes logiques | lvdisplay |
📋 Liste rapide PV | pvs |
📋 Liste rapide VG | vgs |
📋 Liste rapide LV | lvs |
💿 Gestion des volumes physiques (PV)
📌 Action | 🧠 Commande |
---|---|
➕ Créer un PV | pvcreate /dev/sdb1 |
📊 Informations PV | pvdisplay /dev/sdb1 |
🗑️ Supprimer un PV | pvremove /dev/sdb1 |
📏 Redimensionner PV | pvresize /dev/sdb1 |
🔄 Déplacer données PV | pvmove /dev/sdb1 |
Exemple : Préparer un nouveau disque
sudo fdisk /dev/sdb # Créer une partition
sudo pvcreate /dev/sdb1 # Initialiser comme PV
📦 Gestion des groupes de volumes (VG)
📌 Action | 🧠 Commande |
---|---|
➕ Créer un VG | vgcreate data_vg /dev/sdb1 |
📈 Étendre un VG | vgextend data_vg /dev/sdc1 |
📉 Réduire un VG | vgreduce data_vg /dev/sdc1 |
🔄 Activer un VG | vgchange -ay data_vg |
💤 Désactiver un VG | vgchange -an data_vg |
🗑️ Supprimer un VG | vgremove data_vg |
Exemple : Créer un groupe avec plusieurs disques
sudo vgcreate storage_vg /dev/sdb1 /dev/sdc1 /dev/sdd1
📁 Gestion des volumes logiques (LV)
📌 Action | 🧠 Commande |
---|---|
➕ Créer un LV (taille fixe) | lvcreate -L 10G -n data_lv data_vg |
🎯 LV avec pourcentage | lvcreate -l 50%VG -n data_lv data_vg |
📈 Étendre un LV | lvextend -L +5G /dev/data_vg/data_lv |
📉 Réduire un LV | lvreduce -L -2G /dev/data_vg/data_lv |
🔄 Redimensionner + FS | lvresize -L 20G -r /dev/data_vg/data_lv |
🗑️ Supprimer un LV | lvremove /dev/data_vg/data_lv |
Exemple : Créer et formater un LV
sudo lvcreate -L 20G -n web_lv data_vg
sudo mkfs.ext4 /dev/data_vg/web_lv
📊 Redimensionnement avec filesystem
📈 Extension (sécurisée)
# Extension automatique LV + filesystem
sudo lvextend -L +10G -r /dev/vg/lv
# Extension manuelle
sudo lvextend -L +10G /dev/vg/lv
sudo resize2fs /dev/vg/lv # ext4
# ou
sudo xfs_growfs /mount/point # XFS
📉 Réduction (⚠️ risquée)
# 1. Démonter obligatoirement
sudo umount /mount/point
# 2. Vérifier le filesystem
sudo fsck -f /dev/vg/lv
# 3. Réduire FS puis LV
sudo resize2fs /dev/vg/lv 15G
sudo lvreduce -L 15G /dev/vg/lv
📸 Snapshots
📌 Action | 🧠 Commande |
---|---|
📸 Créer snapshot | lvcreate -L 2G -s -n snap_lv /dev/vg/orig_lv |
📋 Lister snapshots | lvs -o name,size,snap_percent |
🔄 Restaurer snapshot | lvconvert --merge /dev/vg/snap_lv |
📈 Étendre snapshot | lvextend -L +1G /dev/vg/snap_lv |
🗑️ Supprimer snapshot | lvremove /dev/vg/snap_lv |
Exemple : Backup avec snapshot
sudo lvcreate -L 5G -s -n backup_snap /dev/data_vg/prod_lv
sudo mount /dev/data_vg/backup_snap /mnt/backup
# ... faire la sauvegarde ...
sudo umount /mnt/backup
sudo lvremove /dev/data_vg/backup_snap
🔧 Workflow complet
🆕 Création complète d’un volume /data
🔍 Détecter nouveau disque (après ajout VM)
# Rescanner sans redémarrage
echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan >/dev/null
# Vérifier les disques disponibles
lsblk -a
🏗️ Création du volume
# 1. Créer le Volume Group sur tout le disque
sudo vgcreate datavg /dev/sdb
# 2. Créer le Logical Volume (100% de l'espace libre)
sudo lvcreate -l 100%FREE -n datalv datavg
# 3. Formater en XFS
sudo mkfs -t xfs /dev/mapper/datavg-datalv
# 4. Créer le point de montage et permissions
sudo mkdir /data
sudo chown -R $USER:root /data
sudo chmod 770 /data
# 5. Monter le volume
sudo mount /dev/mapper/datavg-datalv /data
📝 Montage permanent (fstab)
# Éditer fstab
sudo nano /etc/fstab
# Ajouter la ligne :
/dev/mapper/datavg-datalv /data xfs rw,user,auto 0 0
# Pour autoriser l'exécution de binaires, ajouter "exec"
/dev/mapper/datavg-datalv /data xfs rw,user,auto,exec 0 0
# Recharger la configuration
sudo systemctl daemon-reload
🔄 Renommer un volume (data → docker)
# 1. Démonter
sudo umount /data
# 2. Renommer LV et VG
sudo lvrename datavg datalv dockerlv
sudo vgrename datavg dockervg
# 3. Renommer le dossier
sudo mv /data /docker
# 4. Remonter
sudo mount /dev/mapper/dockervg-dockerlv /docker
# 5. Modifier fstab
sudo nano /etc/fstab
# /dev/mapper/dockervg-dockerlv /docker xfs rw,user,auto 0 0
sudo systemctl daemon-reload
🗑️ Suppression complète d’un volume
# 1. Démonter le disque
sudo umount /data
# 2. Commenter/supprimer entrée fstab
sudo nano /etc/fstab
# #/dev/mapper/datavg-datalv /data xfs rw,user,auto 0 0
# 3. Supprimer dans l'ordre : LV → VG → PV
sudo lvremove /dev/datavg/datalv
sudo vgremove datavg
sudo pvremove /dev/sdb
# 4. Supprimer le répertoire
sudo rm -rf /data
# 5. Vérifier
lsblk -a
🚨 Dépannage
🆘 Problème | 🧠 Solution |
---|---|
VG non trouvé | vgscan && vgchange -ay |
LV corrompu | fsck -f /dev/vg/lv |
PV défaillant | pvmove /dev/failed_pv puis vgreduce |
Snapshot plein | lvextend -L +2G /dev/vg/snap_lv |
Montage avec exec | mount -o remount,exec /data |