LVM
| Fiche express | |
|---|---|
| Domaine | Gestion de volumes logiques (Linux) |
| Paquet | lvm2
|
| Couches | PV (physical volume) → VG (volume group) → LV (logical volume) |
| Contexte | Linux (RHEL/CentOS, SUSE, Debian…) — distinct de LVM (AIX) |
| Voir aussi | Lvcreate · Lvextend · Lvresize · Vgcreate · Pvmove |
LVM (Logical Volume Manager) est le gestionnaire de volumes logiques de Linux. Il empile trois couches d'abstraction : les volumes physiques (PV), regroupés dans des groupes de volumes (VG), eux-mêmes découpés en volumes logiques (LV) sur lesquels on crée les systèmes de fichiers. Cette souplesse permet d'agrandir, réduire ou déplacer un stockage à chaud, sans repartitionner.
Cette page couvre l'implémentation LVM de Linux. Pour l'équivalent AIX (VG/LV via smit, mkvg…), voir LVM (AIX).
Installation
apt-get install lvm2 # Debian/Ubuntu
yum install lvm2 # RHEL/CentOS
Scanner tous les disques de la machine et indiquer lesquels sont LVM :
lvmdiskscan
Création simple
Seuls des disques physiques ou des partitions peuvent être ajoutés à un VG. Il est souvent préférable de ne pas créer de partition : cela simplifie l'agrandissement du disque (utile sous VMware par exemple, avec un simple pvscan).
pvscan
pvcreate -f /dev/sdc
vgcreate volume1 /dev/sdc
lvcreate -L 200G -n data volume1
mkfs.ext4 /dev/volume1/data
Ajouter le montage automatique dans /etc/fstab :
echo "/dev/rootvg/lvproducts /products ext4 defaults 0 0" >> /etc/fstab
Formater avec une taille de bloc de 4096 octets :
mkfs.ext4 -m 0 -b 4096 /dev/sdb1
Agrandir un volume
Le umount n'est plus nécessaire sur les noyaux récents.
pvscan
vgextend volume1 /dev/sda
lvextend -L +200G /dev/vgname/lvname
# ou
lvresize -L 1200M /dev/rootvg/lvusr
Étendre ensuite le système de fichiers :
resize2fs /dev/vgname/lvname # ext2/3/4
resize_reiserfs -f /dev/datavg/lvname # reiserfs
xfs_growfs /dev/mapper/tmplv # XFS
Cas d'un volume strippé
# création d'un volume strippé
lvcreate -L 100G -n logicalnamelv -i 20 -I 4096 rootvg
# voir le nombre de stripes
lvs -a -o +seg_pe_ranges --segments
# extension en respectant le stripe (sur 2 disques)
lvextend -i 2 -L +1G /dev/vgroot/lvroot
Si le nombre de stripes n'est pas précisé, LVM refuse l'extension :
Insufficient suitable allocatable extents for logical volume lvroot: 2304 more required
Agrandir le swap
swapoff -v /dev/rootvg/lvswap
lvresize -L 1G /dev/rootvg/lvswap
mkswap /dev/rootvg/lvswap
swapon -va
cat /proc/swaps
Déplacer un PV vers un autre
Préparer le disque de destination et l'intégrer au même VG, puis migrer les données à chaud avec Pvmove :
vgextend volume1 /dev/sda1
pvmove /dev/dm-24 /dev/dm-28
vgreduce my_volume_group /dev/hda1
Supprimer un PV
vgreduce vgname /dev/dm-24
pvs
pvremove /dev/dm-24
Réduire un LV
umount /mnt/data01
fsck -f /dev/vg01/lvdata01
resize2fs /dev/vg01/lvdata01 4G
dumpe2fs -h /dev/vg01/lvdata01 | grep ^Block
lvreduce -L 4G /dev/vg01/lvdata01 # par taille
lvreduce -l -3 vg00/lvol1 # par nombre d'extents
mount /dev/vg01/lvdata01 /mnt/data01
Pour minimiser le risque d'erreur, on peut réduire le volume un peu plus que nécessaire, puis le ré-augmenter ensuite.
Détruire un VG
vgreduce -a vg01 # retire les PV
vgremove vg01
Déplacer un VG sur une autre machine
umount /mnt/mountpoint
vgchange -a n vgname
vgexport vgname
pvscan
# une fois le disque branché sur la nouvelle machine :
vgimport vgname
vgchange -a y vgname
mount /mnt/mountpoint
Formats d'affichage (export)
pvs --separator = --aligned
pvs --noheadings -o pv_name
pvs --segments
pvs -o +ALL
Agrandir un volume à chaud
echo 1 > /sys/block/sdb/device/rescan
fdisk -l
pvresize /dev/sdb
Détecter un nouveau disque sur une VM Linux
Après avoir ajouté un disque à la VM (vSphere « edit ») :
echo "- - -" > /sys/class/scsi_host/host0/scan
fdisk -l
pvcreate /dev/sdc1
Si l'on crée une partition, la marquer en type LVM (code 8e) avec Fdisk. Sur les machines VMware, penser à Aligner des partitions.
Activer / désactiver un LV
lvchange -a y /dev/rootvg/homelv # activer
lvchange -a n /dev/rootvg/homelv # désactiver
Changer le mode d'accès d'un LV
lvchange -pr vg00/lvol1 # lecture seule
lvchange -prw vg00/lvol1 # lecture-écriture
Renommer un LV
lvrename /dev/vg02/lvold /dev/vg02/lvnew
lvrename vg02 lvold lvnew
Défragmenter LVM
pvdisplay --maps
# déplacer les blocs manuellement
pvmove /dev/sda4:282112-307711 /dev/sda4:227328-252927 --alloc anywhere
Sauvegarder / restaurer la configuration LVM
vgcfgbackup # sauvegarde dans /etc/lvm/backup/
# restauration :
vgcfgrestore -f /etc/lvm/archive/main_00007.vg main
lvm vgchange -ay
La configuration est sauvegardée automatiquement à chaque modification. Pour restaurer vers un nouveau disque, il faut recréer les PV avec le même UUID :
grep -E "_volumes|id" /etc/lvm/backup/vg01
pvcreate -u <UUID-DU-PV> /dev/sdb
vgcfgrestore vg01
Filtres LVM
Dans /etc/lvm/lvm.conf, restreindre les périphériques scannés :
# accepter sda2 et les mpath, refuser le reste
filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
Erreurs courantes
Duplicate PV — après une copie bloc à bloc (dd) d'un disque LVM, LVM voit deux PV avec le même UUID. Supprimer le label de l'un des deux :
pvremove -ff /dev/sdb
Réparer le superbloc :
dumpe2fs /dev/sda2 | grep superblock
fsck -b 32768 /dev/sda2
mount -o sb=32768 /dev/sda2 /mnt
Snapshots
Un snapshot fige un LV à l'instant T, ce qui permet de restaurer rapidement un fichier effacé par erreur.
# créer un snapshot de 100 Mo
lvcreate -L 100M -s -n root_snapshot /dev/rootvg/rootlv
# monter le snapshot
mkdir -p /SNAPSHOT/root_snapshot
mount /dev/rootvg/root_snapshot /SNAPSHOT/root_snapshot
# restaurer un fichier
cp /SNAPSHOT/root_snapshot/home/user/toto.txt /home/user/toto.txt
# supprimer le snapshot
umount /dev/rootvg/root_snapshot
lvremove /dev/rootvg/root_snapshot
Tant que le volume d'origine est modifié de moins que la taille du snapshot, celui-ci reste valide ; au-delà il se désactive. Idéalement, réserver environ 20 % du VG pour les snapshots.
Voir aussi
- Lvcreate / Lvextend / Lvresize — gestion des volumes logiques
- Vgcreate / Vgchange / Vgrename / Vgscan / Vgsplit — gestion des groupes de volumes
- Pvmove — déplacement de données entre PV à chaud
- Fdisk / Parted / Aligner des partitions — partitionnement
- LVM (AIX) — équivalent sous AIX (VG/LV via
smit)