LVM Sous Linux

Nous allons prendre comme exemple dans le texte suivant, la création d'un LVM à partir de disques physiques : un disque /dev/sdc et une partition /dev/sde1.

Nous allons crée un groupe de volume (volume group) à partir du disques et de la partition spécialement convertis en volume physique (physical volume). Ensuite, nous créérons deux volumes logique (logical volume) qui vont nous servir de stockage pour des données.

[http://tldp.org/HOWTO/LVM-HOWTO/anatomy.html][Anatomy of LVM]

Création du LVM

Les volumes physiques (physical volumes)

Les commandes commencent par le préfix pv, par exemple pvreduce, pvremove…

Pour ajouter un volumes physique à LVM, il faut que le disque à insérer comporte une parition de type lvm (type ‘8e00’ avec un disque GPT ou ‘8e’ avec un disque avec MBR). On initialise les volumes avec : pvcreate /dev/sdc et pvcreate /dev/sde1

On peut vérifier que les volumes sont créés avec pvdisplay /dev/sdc /dev/sde1

--- Physical volume ---
PV Name               /dev/sdc
VG Name               storage
PV Size               <89,43 GiB / not usable 2,00 MiB
Allocatable           yes
PE Size               4,00 MiB
Total PE              22893
Free PE               22893
Allocated PE          0
PV UUID               vNL4e6-pMyc-obvP-DNgE-ZgNm-KluC-0hXrg3

--- Physical volume ---
PV Name               /dev/sde1
VG Name               storage
PV Size               87,22 GiB / not usable 3,00 MiB
Allocatable           yes
PE Size               4,00 MiB
Total PE              22328
Free PE               22328
Allocated PE          0
PV UUID               WqMbTC-BnV2-6On3-xtat-F7pk-OuJp-WgzQzo

Les PE correspondent aux Physic Extends, ici des zones de 4 MiO

Le groupe de volume (volum group)

Les commandes commencent par le préfix vg, par exemple vgextend, vgmerge…

Le groupe de volume, servant à agréger l'espace de ces disques le composant, sera nommé ‘storage’ et crée avec la commande : vgcreate storage /dev/sdc /dev/sde1

on peut vérifier que le groupe de volume est bien crée avec les deux volumes : vgdisplay storage -v

VG Name               storage
System ID
Format                lvm2
Metadata Areas        2
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                2
Act PV                2
VG Size               176,64 GiB
PE Size               4,00 MiB
Total PE              45221
Alloc PE / Size       0 / 0
Free  PE / Size       45221 / 176,64 GiB
VG UUID               TjwHHB-SOUJ-4csN-0YPt-DFky-DoOL-uvg9Zd

--- Physical volumes ---
PV Name               /dev/sdc
PV UUID               vNL4e6-pMyc-obvP-DNgE-ZgNm-KluC-0hXrg3
PV Status             allocatable
Total PE / Free PE    22893 / 22893

PV Name               /dev/sde1
PV UUID               WqMbTC-BnV2-6On3-xtat-F7pk-OuJp-WgzQzo
PV Status             allocatable
Total PE / Free PE    22328 / 22328

Le volume logique (logical volume)

Les commandes commencent par le préfix lv, par exemple lvdisplay, lvresize…

Nous allons maintenant créer des volumes logiques qui utiliseront une partie de l'espace disponible dans le groupe de volume. Ces volumes logiques pourront être ensuite utilisés comme des partitions, tout en offrant une plus grande souplesse que les paritions logiques.

On va créer deux volumes logiques dans l'espace ‘storage’. Ces deux volumes, ‘web’ et ‘mail’, auront respectivement une taille de 500 M et 20 G : lvcreate -n web -L 500M storage et lvcreate -n mail -L 20G storage

On peut vérifier que tout à été créé : lvdisplay

  --- Logical volume ---
  LV Path                /dev/storage/web
  LV Name                web
  VG Name                storage
  LV UUID                2CVPtx-odAd-skRv-eSts-xfxm-QMDM-5zoI0L
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2018-01-22 21:30:41 +0100
  LV Status              available
  # open                 0
  LV Size                500,00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

  --- Logical volume ---
  LV Path                /dev/storage/mail
  LV Name                mail
  VG Name                storage
  LV UUID                1ATlHu-zfz8-uRwY-h3zx-6Tvd-pucg-YVaF4n
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2018-01-22 21:30:58 +0100
  LV Status              available
  # open                 0
  LV Size                20,00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

Nous avons les deux volumes logiques, il reste désormais à les formater dans le système de fichiers que l'on veut.

mkfs.ext4 /dev/storage/web

mkfs.ext4 /dev/storage/mail

On observe le groupe de volume avec vgdisplay storage

--- Volume group ---
VG Name               storage
System ID
Format                lvm2
Metadata Areas        2
Metadata Sequence No  8
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               0
Max PV                0
Cur PV                2
Act PV                2
VG Size               176,64 GiB
PE Size               4,00 MiB
Total PE              45221
Alloc PE / Size       5245 / <20,49 GiB
Free  PE / Size       39976 / <156,16 GiB
VG UUID               TjwHHB-SOUJ-4csN-0YPt-DFky-DoOL-uvg9Zd

Opérations

Agrandir un volume logique

Imaginons que notre volume web est trop petit d'un 1 Go. On redimensionne le volume lvresize -L +1G /dev/storage/web

lvdisplay /dev/storage/web

--- Logical volume ---
LV Path                /dev/storage/web
LV Name                web
VG Name                storage
LV UUID                2CVPtx-odAd-skRv-eSts-xfxm-QMDM-5zoI0L
LV Write Access        read/write
LV Creation host, time localhost.localdomain, 2018-01-22 21:30:41 +0100
LV Status              available
# open                 0
LV Size                <1,49 GiB
Current LE             381
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:3

En regardant vgdisplay on s'aperçoit que des lignes ont changées par rapport au précedent appel

avant

Total PE              45221
Alloc PE / Size       5245 / <20,49 GiB
Free  PE / Size       39976 / <156,16 GiB

Après

Total PE              45221
Alloc PE / Size       5501 / <21,49 GiB
Free  PE / Size       39720 / <155,16 GiB

On a donc bien à peu près 1 GiO supplémentaire utilisé dans le groupe de volumes. Cependant, la partition ext4 n'a pas été redimensionnée et est restée sur une taille de 500 M.

On la redimensionne : resize2fs -p /dev/storage/web

resize2fs 1.42.9 (28-Dec-2013)
En train de redimensionner le système de fichiers sur /dev/storage/web à 1560576 (1k) blocs.
Début de la passe 1 (max = 189)
Extension de la table d'i-noeudsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Le système de fichiers /dev/storage/web a maintenant une taille de 1560576 blocs.

Réduire un volume logique

resize2fs -M /dev/storage/web

lvresize -L -10G storage/web

Supprimer un volume physique

Il faut s'assurer qu'il y a de la place dans le LVM pour accueillir tout les PE du disque à supprimer :

PE_lvm libres > PE_disque utilisés.

Si oui, on déplace les PE du disque vers le LVM : pvmove /dev/sde1

/dev/sdc1: Moved: 0,02%
/dev/sdc1: Moved: 0,69%
...
/dev/sdc1: Moved: 99,36%
/dev/sdc1: Moved: 100,00%

On supprime alors le volume physique du LVM : vgreduce storage /dev/sde1