skip to content

Recherche

LVM

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

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