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
|
Commande | Description |
---|
pvs | Liste concise des PV |
pvdisplay | Informations détaillées des PV |
pvscan | Scanner et afficher les PV |
pvck /dev/sdb1 | Vé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
|
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
|
Commande | Description |
---|
vgs | Liste concise des VG |
vgdisplay | Informations détaillées des VG |
vgscan | Scanner et afficher les VG |
vgs -o +lv_count,snap_count | Afficher 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
|
1
2
3
4
5
6
7
| # Lister les LV
lvs
lvdisplay
lvdisplay /dev/vg_data/lv_home
# Scanner les LV
lvscan
|
Commande | Description |
---|
lvs | Liste concise des LV |
lvdisplay | Informations détaillées des LV |
lvscan | Scanner et afficher les LV |
lvs -o +seg_size,segtype | Afficher 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#
Erreur | Solution |
---|
Volume group "vg_data" not found | vgscan && vgchange -ay |
Can't open /dev/sdb1 | Vérifier que le device existe |
Physical volume not found | pvscan --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#
- Nommage : Utilisez des noms explicites (vg_data, lv_home)
- Snapshots : Ne gardez pas les snapshots trop longtemps
- Monitoring : Surveillez l’espace libre régulièrement
- Backup : Sauvegardez les métadonnées LVM
- 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
|
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 !