skip to content

Recherche

Syspirit
FR

LVM

Gestion des volumes logiques avec LVM - création, redimensionnement et stockage flexible !

Linux
Publié le
Karl Certa

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 LVMlsblk
💾 Volumes physiquespvdisplay
🗂️ Groupes de volumesvgdisplay
📁 Volumes logiqueslvdisplay
📋 Liste rapide PVpvs
📋 Liste rapide VGvgs
📋 Liste rapide LVlvs

💿 Gestion des volumes physiques (PV)

📌 Action🧠 Commande
➕ Créer un PVpvcreate /dev/sdb1
📊 Informations PVpvdisplay /dev/sdb1
🗑️ Supprimer un PVpvremove /dev/sdb1
📏 Redimensionner PVpvresize /dev/sdb1
🔄 Déplacer données PVpvmove /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 VGvgcreate data_vg /dev/sdb1
📈 Étendre un VGvgextend data_vg /dev/sdc1
📉 Réduire un VGvgreduce data_vg /dev/sdc1
🔄 Activer un VGvgchange -ay data_vg
💤 Désactiver un VGvgchange -an data_vg
🗑️ Supprimer un VGvgremove 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 pourcentagelvcreate -l 50%VG -n data_lv data_vg
📈 Étendre un LVlvextend -L +5G /dev/data_vg/data_lv
📉 Réduire un LVlvreduce -L -2G /dev/data_vg/data_lv
🔄 Redimensionner + FSlvresize -L 20G -r /dev/data_vg/data_lv
🗑️ Supprimer un LVlvremove /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 snapshotlvcreate -L 2G -s -n snap_lv /dev/vg/orig_lv
📋 Lister snapshotslvs -o name,size,snap_percent
🔄 Restaurer snapshotlvconvert --merge /dev/vg/snap_lv
📈 Étendre snapshotlvextend -L +1G /dev/vg/snap_lv
🗑️ Supprimer snapshotlvremove /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 corrompufsck -f /dev/vg/lv
PV défaillantpvmove /dev/failed_pv puis vgreduce
Snapshot pleinlvextend -L +2G /dev/vg/snap_lv
Montage avec execmount -o remount,exec /data