LVM (Logical Volume Manager) permet de gérer des partitions logiques, et non pas physiques, ce qui a notamment comme avantage de pouvoir plus facilement modifier leur taille.
Il faut disposer d'une partition non formatée. Dans notre cas, il s'agit de /dev/sda9, qui dispose d'un peu plus de 300 Go de libres. Cette partition sera utilisée principalement pour gérer des images de machines virtuelles créées avec KVM.
# fdisk -l /dev/sda
Disk /dev/sda: 750.2 GB, 750156374016 bytes
255 têtes, 63 secteurs/piste, 91201 cylindres, total 1465149168 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Identifiant de disque : 0x73a05bd4
Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 2048 102402047 51200000 7 HPFS/NTFS/exFAT
/dev/sda2 102402048 204802047 51200000 7 HPFS/NTFS/exFAT
/dev/sda3 204804094 1465147391 630171649 5 Étendue
La partition 3 ne débute pas sur une frontière de cylindre physique.
/dev/sda5 204804096 284803071 39999488 83 Linux
/dev/sda6 284805120 294567935 4881408 82 partition d'échange Linux / Solaris
/dev/sda7 294569984 392224767 48827392 83 Linux
/dev/sda8 392226816 802082815 204928000 83 Linux
/dev/sda9 802084864 1465147391 331531264 83 Linux
Sur une distribution de type Debian/Ubuntu :
# apt-get install lvm2
La mise en place de volumes logiques est un modèle à trois couches :
# pvcreate /dev/sda9
Writing physical volume data to disk "/dev/sda9"
Physical volume "/dev/sda9" successfully created
On peut lister les volumes physiques avec la commande pvdisplay. Exemple :
# pvdisplay
"/dev/sda9" is a new physical volume of "316,17 GiB"
--- NEW Physical volume ---
PV Name /dev/sda9
VG Name
PV Size 316,17 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID ReKoL9-gneB-DXfg-5MpV-pKyP-n5Rl-TRdnXh
Avant de pouvoir créer des volumes logiques, il faut avoir créé un Volume Group. Ceci s'effectue via la commande vgcreate. La syntaxe est la suivante :
vgcreate NOM-du-VG NOM-Du-PV
Exemple :
# vgcreate vmvg /dev/sda9
Volume group "vmvg" successfully created
On peut vérifier que cela est répercuté au niveau du volume physique. Le paramètre VG Name est maintenant renseigné :
# pvdisplay
--- Physical volume ---
PV Name /dev/sda9
VG Name vmvg
PV Size 316,17 GiB / not usable 0
Allocatable yes
PE Size 4,00 MiB
Total PE 80940
Free PE 80940
Allocated PE 0
PV UUID ReKoL9-gneB-DXfg-5MpV-pKyP-n5Rl-TRdnXh
On obtient plus d'informations via la commande vgdisplay. Par exemple :
# vgdisplay vmvg
--- Volume group ---
VG Name vmvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 316,17 GiB
PE Size 4,00 MiB
Total PE 80940
Alloc PE / Size 0 / 0
Free PE / Size 80940 / 316,17 GiB
VG UUID kd3LKL-tMjA-eIq4-EhMs-LdWV-LFVl-2rBhk1
A ce niveau, il est possible de créer des volumes logiques sur notre VG, via la commande lvcreate, avec la syntaxe :
lvcreate -L[taille] -n[nom-du-lv] [nom-du-vg]
Dans notre exemple, ce serait :
lvcreate -L8000 -n vm_debian6 vmvg
Logical volume "vm_wheezy" created
Cette comande aura pour effet de créer un volume logique de 8 Go sur le volume groupe vmvg, et nommé vm_debian6.
On peut avoir la liste des LV créés avec la commande lvscan :
# lvscan
ACTIVE '/dev/vmvg/vm_wheezy' [7,81 GiB] inherit
La commande lvdisplay donne les détails d'un volkume logique :
# lvdisplay
--- Logical volume ---
LV Path /dev/vmvg/vm_wheezy
LV Name vm_wheezy
VG Name vmvg
LV UUID bOAd1B-Xg0e-Unj3-onj2-IZUY-k654-tqdvtd
LV Write Access read/write
LV Creation host, time portable-vli, 2012-11-22 16:53:41 +0100
LV Status available
# open 0
LV Size 7,81 GiB
Current LE 2000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
Les volumes logiques sont prêts à être utilisés par virt-manager...
pvscan : liste les différents volumes physiques disponibles
# pvscan
PV /dev/sda9 VG vmvg lvm2 [316,17 GiB / 300,55 GiB free]
Total: 1 [316,17 GiB] / in use: 1 [316,17 GiB] / in no VG: 0 [0 ]
vgscan : liste les différents volume groups
# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vmvg" using metadata type lvm2
lvscan : liste les différents volumes logiques
# lvscan
ACTIVE '/dev/vmvg/vm_wheezy' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_debian6' [7,81 GiB] inherit
Pour supprimer un volume logique, il suffit d'utiliser la commande lvremove, une fois que le volume logique est démonté. Exemple :
# lvscan
ACTIVE '/dev/vmvg/vm_wheezy' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_debian6' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_seven' [15,62 GiB] inherit
# lvremove /dev/vmvg/vm_wheezy
Do you really want to remove active logical volume vm_wheezy? [y/n]:
Logical volume "vm_wheezy" successfully removed
# lvscan
ACTIVE '/dev/vmvg/vm_debian6' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_seven' [15,62 GiB] inherit
Afin de pouvoir monter le volume logique, il est nécessaire de le formater auparavant, via les commandes mkfs. Par exemple, pour formater en ext4, on utilisera la commande :
mkfs -t ext4 /dev/vmvg/Vol1
On peut ensuite monter le volume comme une partition "normale" :
mkdir /Essai1
mount /dev/mvg/Vol1 /Essai1
df -h
L'un des avantages principaux des volumes logiques est de permettre de redimensionner la partition "à la volée" ou presque, beaucoup plus facilement et sans perte de données par rapport à une partition physique.
Pour ce faire, il est possible d'utiliser la commande lvextend. Par exemple :
lvextend -L12G /dev/vmvg/Vol1
va étendre la taille du volume logique à 12 GB.
lvextend -L+1G /dev/vmvg/Vol1
va ajouter 1 GB au volume logique. Il faut ensuite retailler le file system qui repose sur ce volume logique :
umount /dev/vmvg/Vol1
e2fsck -f /dev/vmvg/Vol1
resize2fs /dev/vmvg/Vol1
mount /dev/vmvg/Vol1
Bien sûr, il faut avoir contrôlé auparavant que le volume group a suffisamment d'espace libre, avec la commande vgdisplay
Plus d'informations par exemple, sur http://doc.ubuntu-fr.org/lvm