LVM Cheatsheet

LVM (Logical Volume Manager) permet une gestion flexible des espaces de stockage sous Linux. Cette cheatsheet couvre toutes les commandes essentielles.

📚 Concepts de base

LVM fonctionne sur 3 niveaux :

  • Physical Volume (PV) : Disque physique ou partition préparée pour LVM
  • Volume Group (VG) : Pool de stockage regroupant plusieurs PV
  • Logical Volume (LV) : Volume logique créé dans un VG (équivalent d’une partition)
1
2
3
Disques physiques  Physical Volumes  Volume Groups  Logical Volumes
    /dev/sdb           /dev/sdb1         vg_data        lv_home
    /dev/sdc           /dev/sdc1                        lv_var

🔧 Installation

1
2
3
4
5
6
7
# Ubuntu/Debian
sudo apt install lvm2

# CentOS/RHEL/Fedora
sudo yum install lvm2
# ou
sudo dnf install lvm2

💾 Physical Volumes (PV)

Création et gestion des PV

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Créer un PV
pvcreate /dev/sdb1
pvcreate /dev/sdc1 /dev/sdd1

# Lister les PV
pvs
pvdisplay
pvdisplay /dev/sdb1

# Informations détaillées
pvscan

# Supprimer un PV
pvremove /dev/sdb1

Commandes d’information PV

CommandeDescription
pvsListe concise des PV
pvdisplayInformations détaillées des PV
pvscanScanner et afficher les PV
pvck /dev/sdb1Vérifier la cohérence d’un PV

📦 Volume Groups (VG)

Création et gestion des VG

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Créer un VG
vgcreate vg_data /dev/sdb1 /dev/sdc1

# Étendre un VG (ajouter PV)
vgextend vg_data /dev/sdd1

# Réduire un VG (supprimer PV)
vgreduce vg_data /dev/sdd1

# Activer un VG
vgchange -ay vg_data

# Désactiver un VG
vgchange -an vg_data

# Supprimer un VG
vgremove vg_data

Informations sur les VG

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Lister les VG
vgs
vgdisplay
vgdisplay vg_data

# Scanner les VG
vgscan

# Renommer un VG
vgrename vg_old vg_new

Commandes d’information VG

CommandeDescription
vgsListe concise des VG
vgdisplayInformations détaillées des VG
vgscanScanner et afficher les VG
vgs -o +lv_count,snap_countAfficher nombre de LV et snapshots

📁 Logical Volumes (LV)

Création des LV

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Créer un LV avec taille absolue
lvcreate -L 10G -n lv_home vg_data

# Créer un LV avec pourcentage
lvcreate -l 50%VG -n lv_var vg_data
lvcreate -l 100%FREE -n lv_tmp vg_data

# Créer avec système de fichiers
lvcreate -L 5G -n lv_web vg_data
mkfs.ext4 /dev/vg_data/lv_web

Redimensionnement des LV

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Étendre un LV
lvextend -L +5G /dev/vg_data/lv_home
lvextend -L 20G /dev/vg_data/lv_home
lvextend -l +100%FREE /dev/vg_data/lv_home

# Réduire un LV (ATTENTION: démontez d'abord!)
umount /home
e2fsck -f /dev/vg_data/lv_home
resize2fs /dev/vg_data/lv_home 15G
lvreduce -L 15G /dev/vg_data/lv_home
mount /home

# Redimensionner automatiquement (étendre seulement)
lvextend -r -L +5G /dev/vg_data/lv_home

Gestion des LV

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Activer un LV
lvchange -ay /dev/vg_data/lv_home

# Désactiver un LV
lvchange -an /dev/vg_data/lv_home

# Supprimer un LV
lvremove /dev/vg_data/lv_home

# Renommer un LV
lvrename vg_data lv_old lv_new

Informations sur les LV

1
2
3
4
5
6
7
# Lister les LV
lvs
lvdisplay
lvdisplay /dev/vg_data/lv_home

# Scanner les LV
lvscan

Commandes d’information LV

CommandeDescription
lvsListe concise des LV
lvdisplayInformations détaillées des LV
lvscanScanner et afficher les LV
lvs -o +seg_size,segtypeAfficher infos segments

📸 Snapshots LVM

Les snapshots permettent de créer des copies instantanées d’un LV.

Création de snapshots

1
2
3
4
5
6
7
8
9
# Créer un snapshot
lvcreate -L 2G -s -n snap_home /dev/vg_data/lv_home

# Snapshot avec pourcentage
lvcreate -l 10%ORIGIN -s -n snap_var /dev/vg_data/lv_var

# Monter un snapshot
mkdir /mnt/snapshot
mount /dev/vg_data/snap_home /mnt/snapshot

Gestion des snapshots

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Lister snapshots
lvs -o +snap_percent

# Étendre un snapshot
lvextend -L +1G /dev/vg_data/snap_home

# Fusionner snapshot avec original
lvconvert --merge /dev/vg_data/snap_home

# Supprimer snapshot
lvremove /dev/vg_data/snap_home

🔄 Scénarios complets

Setup LVM complet

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. Préparer les disques
fdisk /dev/sdb
# Créer partition type 8e (Linux LVM)

# 2. Créer PV
pvcreate /dev/sdb1 /dev/sdc1

# 3. Créer VG
vgcreate vg_data /dev/sdb1 /dev/sdc1

# 4. Créer LV
lvcreate -L 10G -n lv_home vg_data
lvcreate -L 5G -n lv_var vg_data
lvcreate -l 100%FREE -n lv_tmp vg_data

# 5. Formater et monter
mkfs.ext4 /dev/vg_data/lv_home
mkfs.ext4 /dev/vg_data/lv_var
mkfs.ext4 /dev/vg_data/lv_tmp

mkdir /mnt/{home,var,tmp}
mount /dev/vg_data/lv_home /mnt/home
mount /dev/vg_data/lv_var /mnt/var
mount /dev/vg_data/lv_tmp /mnt/tmp

Ajout d’un nouveau disque

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 1. Préparer le nouveau disque
pvcreate /dev/sdd1

# 2. Étendre le VG
vgextend vg_data /dev/sdd1

# 3. Vérifier
vgs vg_data
pvs

# 4. Étendre un LV existant
lvextend -L +20G /dev/vg_data/lv_home
resize2fs /dev/vg_data/lv_home

Migration de données

1
2
3
4
5
6
7
8
9
# Déplacer données d'un PV vers un autre
pvmove /dev/sdb1 /dev/sdd1

# Vérifier le déplacement
pvs -o +pe_count,alloc

# Retirer l'ancien PV
vgreduce vg_data /dev/sdb1
pvremove /dev/sdb1

📊 Monitoring et maintenance

Vérifications régulières

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# État général LVM
vgs
lvs
pvs

# Espace libre
vgs -o vg_name,vg_free,vg_size
lvs -o lv_name,lv_size,data_percent

# Snapshots en cours
lvs -o +snap_percent | grep -v "   "

# Santé des PV
pvs -o +pv_missing,pv_allocatable

Commandes de diagnostic

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Logs LVM
journalctl -u lvm2-monitor

# Vérifier métadonnées
vgck vg_data

# Backup métadonnées
vgcfgbackup vg_data

# Restaurer métadonnées
vgcfgrestore vg_data

🚨 Résolution de problèmes

Problèmes courants

VG manquant au démarrage

1
2
3
4
5
6
7
# Activer tous les VG
vgchange -ay

# Scanner les volumes
pvscan
vgscan
lvscan

Récupération après crash

1
2
3
4
5
6
7
8
# Scanner les devices
pvscan --cache

# Reconstruire cache
vgscan --mknodes

# Activer tout
vgchange -ay

Suppression forcée

1
2
3
4
5
# Forcer suppression LV
lvremove -f /dev/vg_data/lv_broken

# Forcer suppression VG
vgremove -f vg_broken

Messages d’erreur fréquents

ErreurSolution
Volume group "vg_data" not foundvgscan && vgchange -ay
Can't open /dev/sdb1Vérifier que le device existe
Physical volume not foundpvscan --cache
Insufficient free spaceÉtendre VG ou libérer espace

📋 Configuration avancée

/etc/lvm/lvm.conf

1
2
3
4
5
6
7
8
9
# Filtrer devices
filter = [ "a/sda*/", "a/sdb*/", "r/.*/" ]

# Activer snapshots
snapshot_autoextend_threshold = 80
snapshot_autoextend_percent = 20

# Monitoring
monitoring = 1

Fstab avec LVM

1
2
3
4
# /etc/fstab
/dev/vg_data/lv_home    /home    ext4    defaults    0    2
/dev/vg_data/lv_var     /var     ext4    defaults    0    2
/dev/vg_data/lv_tmp     /tmp     ext4    defaults    0    2

📈 Bonnes pratiques

  1. Nommage : Utilisez des noms explicites (vg_data, lv_home)
  2. Snapshots : Ne gardez pas les snapshots trop longtemps
  3. Monitoring : Surveillez l’espace libre régulièrement
  4. Backup : Sauvegardez les métadonnées LVM
  5. Documentation : Documentez votre setup LVM

Tailles recommandées

  • Snapshot : 10-20% de la taille du LV original
  • VG : Laisser 5-10% d’espace libre
  • Croissance : Prévoir l’extension future

Script de monitoring

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash
# lvm-check.sh

echo "=== État des Volume Groups ==="
vgs

echo "=== Logical Volumes avec snapshots ==="
lvs -o +snap_percent

echo "=== Alertes espace libre ==="
vgs --noheadings -o vg_name,vg_free_percent | while read vg free; do
    if (( $(echo "$free < 10" | bc -l) )); then
        echo "ALERTE: VG $vg n'a que $free% d'espace libre"
    fi
done

🔗 Commandes de référence rapide

Création rapide

1
2
3
pvcreate /dev/sdb1
vgcreate vg_data /dev/sdb1
lvcreate -L 10G -n lv_home vg_data

Information rapide

1
pvs && vgs && lvs

Extension rapide

1
lvextend -r -L +5G /dev/vg_data/lv_home

Snapshot rapide

1
lvcreate -L 2G -s -n snap_$(date +%Y%m%d) /dev/vg_data/lv_home

LVM offre une flexibilité incomparable pour la gestion du stockage. Maîtrisez ces commandes pour optimiser vos infrastructures !