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.
Pré-requis
Partition non formatée
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
Installation du package LVM
Sur une distribution de type Debian/Ubuntu :
# apt-get install lvm2
Création du volume physique
La mise en place de volumes logiques est un modèle à trois couches :
- Volume physique
- Volume group
- Volume logique
# 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
Création du Volume Group
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
Création d'un volume logique
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...
Quelques commandes utiles
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
Supprimer un volume logique
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
Formatage du volume logique
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
Redimensionner un volume logique
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