Dans cette leçon, tu vas découvrir **LVM** (Logical Volume Manager), un système puissant de gestion des disques sous Linux. LVM te permet de créer, redimensionner et gérer des volumes logiques de manière flexible — sans avoir à repartitionner ton disque. C'est indispensable pour tout administrateur qui gère des serveurs ou des espaces de stockage évolutifs.
Avec les partitions classiques, tu rencontres vite des limitations :
**LVM résout tout ça** en introduisant une couche d'abstraction entre les disques physiques et les systèmes de fichiers.
┌─────────────────────────────────────────┐
│ Volume Logique (LV) │
│ /home, /var, /data, etc. │
├─────────────────────────────────────────┤
│ Groupe de Volumes (VG) │
│ Regroupe plusieurs PV = un pool │
├──────────────────┬──────────────────────┤
│ Disque Physique │ Disque Physique │
│ (PV) │ (PV) │
│ /dev/sdb1 │ /dev/sdc1 │
└──────────────────┴──────────────────────┘
# Voir les disques disponibles
lsblk
# Créer une partition Linux (type 8e pour LVM)
sudo fdisk /dev/sdb
# Taper : n (nouvelle partition), p (primaire), 1, Entrée, Entrée, t, 8e, w
# Créer le Physical Volume
sudo pvcreate /dev/sdb1
# Vérifier
sudo pvs
sudo pvdisplay
# Créer un VG avec un ou plusieurs PV
sudo vgcreate mon_vg /dev/sdb1
# Ajouter un autre disque au VG
sudo vgextend mon_vg /dev/sdc1
# Voir les VG
sudo vgs
sudo vgdisplay mon_vg
# Créer un LV de 10 Go dans le VG
sudo lvcreate -L 10G -n donnees mon_vg
# Ou créer un LV qui utilise tout l'espace disponible
sudo lvcreate -l 100%FREE -n donnees mon_vg
# Voir les LV
sudo lvs
sudo lvdisplay
# Formater en ext4
sudo mkfs.ext4 /dev/mon_vg/donnees
# Monter temporairement
sudo mkdir /mnt/donnees
sudo mount /dev/mon_vg/donnees /mnt/donnees
# Vérifier
df -h /mnt/donnees
# Ajouter au fichier /etc/fstab
echo '/dev/mon_vg/donnees /mnt/donnees ext4 defaults 0 2' | sudo tee -a /etc/fstab
# OU utiliser l'UUID (plus fiable)
sudo blkid /dev/mon_vg/donnees
# Ajouter : UUID=<uuid> /mnt/donnees ext4 defaults 0 2
C'est **la force de LVM** : agrandir ou réduire un volume à chaud !
# 1. Vérifier l'espace disponible dans le VG
sudo vgs
# 2. Agrandir le LV de 5 Go supplémentaires
sudo lvextend -L +5G /dev/mon_vg/donnees
# 3. Agrandir le système de fichiers (très important !)
# Pour ext4 :
sudo resize2fs /dev/mon_vg/donnees
# Pour xfs (on ne peut qu'agrandir, pas réduire) :
sudo xfs_growfs /mnt/donnees
# 4. Vérifier
df -h /mnt/donnees
# 1. Démonter
sudo umount /mnt/donnees
# 2. Vérifier le système de fichiers (important !)
sudo e2fsck -f /dev/mon_vg/donnees
# 3. Réduire le système de fichiers à 8 Go
sudo resize2fs /dev/mon_vg/donnees 8G
# 4. Réduire le LV
sudo lvreduce -L 8G /dev/mon_vg/donnees
# 5. Remonter
sudo mount /dev/mon_vg/donnees /mnt/donnees
⚠️ **Attention** : Réduire un volume peut causer une perte de données. Sauvegarde toujours avant !
# 1. Préparer le nouveau disque
sudo pvcreate /dev/sdd1
# 2. L'ajouter au VG existant
sudo vgextend mon_vg /dev/sdd1
# 3. Utiliser l'espace pour agrandir un LV
sudo lvextend -L +20G /dev/mon_vg/donnees
sudo resize2fs /dev/mon_vg/donnees
# Vérifier
sudo pvs
sudo vgs
# 1. Démonter
sudo umount /mnt/donnees
# 2. Supprimer le LV
sudo lvremove /dev/mon_vg/donnees
# Confirmer avec 'y'
# Supprimer le VG
sudo vgremove mon_vg
# Supprimer le PV
sudo pvremove /dev/sdb1
LVM permet de créer des **snapshots** — des copies instantanées d'un volume à un instant T. Très utile pour les sauvegardes ou les tests.
# Créer un snapshot de 5 Go (doit être assez grand pour les modifications)
sudo lvcreate -L 5G -s -n snapshot_donnees /dev/mon_vg/donnees
# Monter le snapshot pour y accéder
sudo mkdir /mnt/snapshot
sudo mount /dev/mon_vg/snapshot_donnees /mnt/snapshot
# Une fois terminé, supprimer le snapshot
sudo umount /mnt/snapshot
sudo lvremove /dev/mon_vg/snapshot_donnees
# 1. Créer un nouveau LV pour /home
sudo lvcreate -L 50G -n home mon_vg
# 2. Formater
sudo mkfs.ext4 /dev/mon_vg/home
# 3. Copier les données
sudo mkdir /mnt/newhome
sudo mount /dev/mon_vg/home /mnt/newhome
sudo rsync -av /home/ /mnt/newhome/
# 4. Modifier /etc/fstab pour pointer vers le nouveau volume
# Remplacer la ligne /home par :
# /dev/mon_vg/home /home ext4 defaults 0 2
# 5. Redémarrer ou remonter
sudo umount /home
sudo mount /home
# 6. Vérifier
df -h /home
| Commande | Rôle |
|---|---|
pvcreate /dev/sdX1 | Préparer une partition pour LVM |
pvs | Lister les Physical Volumes |
vgcreate nom /dev/sdX1 | Créer un Volume Group |
vgs | Lister les Volume Groups |
vgextend nom /dev/sdY1 | Ajouter un PV à un VG |
lvcreate -L 10G -n nom vg | Créer un Logical Volume |
lvs | Lister les Logical Volumes |
lvextend -L +5G /dev/vg/lv | Agrandir un LV |
lvreduce -L 8G /dev/vg/lv | Réduire un LV |
resize2fs /dev/vg/lv | Ajuster le filesystem après resize |
lvremove /dev/vg/lv | Supprimer un LV |
lvdisplay | Détails complets d'un LV |
**But** : Créer un environnement LVM complet et manipuler les volumes.
# 1. Crée deux fichiers de 500 Mo pour simuler des disques
dd if=/dev/zero of=/tmp/disque1 bs=1M count=500 oflag=direct
dd if=/dev/zero of=/tmp/disque2 bs=1M count=500 oflag=direct
# 2. Configure les en loop devices
sudo losetup -fP /tmp/disque1
sudo losetup -fP /tmp/disque2
# Note les noms (ex: /dev/loop0, /dev/loop1)
# 3. Crée les PV (remplace sda1 par ton loop)
sudo pvcreate /dev/loop0
sudo pvcreate /dev/loop1
# 4. Crée un VG
sudo vgcreate mon_test_vg /dev/loop0
# 5. Ajoute le second disque au VG
sudo vgextend mon_test_vg /dev/loop1
# 6. Crée un LV de 300 Mo
sudo lvcreate -L 300M -n test_lv mon_test_vg
# 7. Formate et monte
sudo mkfs.ext4 /dev/mon_test_vg/test_lv
sudo mkdir /mnt/test_lvm
sudo mount /dev/mon_test_vg/test_lv /mnt/test_lvm
# 8. Vérifie l'espace
df -h /mnt/test_lvm
# 9. Agrandis de 100 Mo
sudo lvextend -L +100M /dev/mon_test_vg/test_lv
sudo resize2fs /dev/mon_test_vg/test_lv
df -h /mnt/test_lvm
# 10. Nettoie
sudo umount /mnt/test_lvm
sudo lvremove /dev/mon_test_vg/test_lv
sudo vgremove mon_test_vg
sudo pvremove /dev/loop0 /dev/loop1
sudo losetup -D
rm /tmp/disque1 /tmp/disque2
LVM te donne une flexibilité incomparable pour gérer ton stockage. Une fois habitué, tu ne reviendras plus aux partitions fixes !