Utilisation LVM (Logical Volume Manager) sous Linux

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

 

Catégorie
Tag