La gestion par volumes logiques permet une
gestion de plus haut niveau des problèmes de stockage sur
disque que l’approche traditionnelle avec des disques et des partitions.
L’administrateur système a une meilleure
flexibilité pour allouer de l’espace aux applications et
aux utilisateurs.
Il existe deux versions de LVM :
-
LVM version 1 qui est présent dans les noyaux 2.4.
-
LVM version 2, qui est presque entièrement compatible avec les volumes créés avec LVM1, à l’exception de la prise en charge des instantanés et du cluster. Il est possible de convertir un groupe de volumes du format LVM1 au format LVM2 avec la commande vgconvert.
1. Terminologie
a. Volume physique
Le volume physique (PV ou physical volume) est un disque ou une partition telle que /dev/sdb1 qui
est divisé en tranches de 4 Mio appelées extensions physiques
(PE ou physical extents).
La taille d’un PE est par défaut
de 4 Mio. Sa valeur peut être modifiée selon les besoins.
b. Groupe de volumes
Un groupe de volumes (VG ou Volume Groups) est un ensemble de PV. Un PV ne peut pas appartenir à plusieurs
VG.
c. Volume logique
Un volume logique (LV ou Logical Volume) est un espace de stockage qui possède par
conséquent un système de fichiers. Un LV est découpé en
tranches de 4 Mio appelées extensions logiques
(LE ou logical extents) :
LVM crée des pointeurs qui vont mettre
en relation les PE avec les LE :
d. Métadonnées
LVM utilise des métadonnées
(metadatas) pour gérer le système :
-
La Physical Volume Reserved Area (PVRA) qui contient des informations propres aux volumes physiques créés par LVM.
-
Le Volume Group Reserved Area (VGRA) qui contient des informations propres aux groupes de volumes et aux volumes logiques inclus dans ces groupes.
-
Le Bad Block Relocation Area (BBRA) qui est une zone contenant les informations rattachées à un mécanisme de réallocation des blocs défectueux et qui permet ainsi la récupération automatique de blocs défectueux.
2. Administration des volumes physiques
Les commandes qui gèrent les volumes
physiques commencent par pv et sont stockées
dans le dossier /sbin :
# ls /sbin/pv* /sbin/pvchange /sbin/pvcreate /sbin/pvmove /sbin/pvresize /sbin/pvscan /sbin/pvck /sbin/pvdisplay /sbin/pvremove /sbin/pvs
a. Créer un volume physique
Il faut initialiser le disque ou la partition
avec pvcreate pour créer
un PV. Avant d’intervenir, vous pouvez faire un état des
lieux des disques avec lvmdiskscan.
Syntaxepvcreate <disques_ou_partitions>
Elle peut initialiser un ou plusieurs périphériques
de blocs en même temps. Il suffit de les mentionner séparés
par un espace.
Syntaxelvmdiskscan
Pas d’options pour cette commande.
Exemple avec DebianAffichez les disques du système :
# lvmdiskscan /dev/root [ 13,97 GiB] /dev/sda1 [ 50,00 GiB] LVM physical volume /dev/dm-1 [ 488,00 MiB] /dev/SystemVG/homeLV [ 35,39 GiB] /dev/SystemVG/optLV [ 168,00 MiB] /dev/sdb1 [ 3,72 GiB] /dev/sdc [ 10,00 GiB] /dev/sdd [ 10,00 GiB] /dev/sde [ 10,00 GiB] 6 disks 2 partitions 0 LVM physical volume whole disks 1 LVM physical volumeL’objectif est l’initialisation de deux disques : /dev/sdb et /dev/sdc.
Le disque /dev/sdc est « vide », tout comme /dev/sdd et /dev/sde. Cependant, une table de partitions sur le disque /dev/sdb existe déjà et contient une partition /dev/sdb1. Si nous exécutions pvcreate, il y aurait une erreur :
# pvcreate /dev/sdb /dev/sdc Device /dev/sdb not found (or ignored by filtering). Writing physical volume data to disk "/dev/sdc" Physical volume "/dev/sdc" successfully createdAvant de procéder, vous devez supprimer avec parted la partition /dev/sdb1 :
# parted /dev/sdb GNU Parted 2.3 Using /dev/sdb Welcome to GNU Parted! Type ’help’ to view a list of commands. (parted) rm 1 (parted) qSupprimez la table de partitions de /dev/sdb :
# dd if=/dev/zero of=/dev/sdb bs=512 count=1 1+0 enregistrements lus 1+0 enregistrements écrits 512 octets (512 B) copiés, 0,0133707 s, 38,3 kB/sMaintenant, vous pouvez effectuer la création des deux PV :
# pvcreate /dev/sdb /dev/sdc Writing physical volume data to disk "/dev/sdb" Physical volume "/dev/sdb" successfully created Writing physical volume data to disk "/dev/sdc" Physical volume "/dev/sdc" successfully createdVérifiez :
# lvmdiskscan /dev/root [ 13,97 GiB] /dev/sda1 [ 50,00 GiB] LVM physical volume /dev/dm-1 [ 488,00 MiB] /dev/SystemVG/homeLV [ 35,39 GiB] /dev/SystemVG/optLV [ 168,00 MiB] /dev/sdb [ 10,00 GiB] LVM physical volume /dev/sdc [ 10,00 GiB] LVM physical volume /dev/sdd [ 10,00 GiB] /dev/sde [ 10,00 GiB] 5 disks 1 partition 2 LVM physical volume whole disks 1 LVM physical volume
b. Afficher les volumes physiques
Vous disposez de trois commandes pour afficher
les PV existants :
-
pvs retourne les informations sur les PV,
-
pvscan répertorie les PV,
-
pvdisplay affiche les propriétés d’un PV.
pvs
Pas d’option nécessaire pour pvs.
Syntaxepvscan <options>
Options utiles :
Option
|
Description
|
|
courte
|
longue
|
|
-s
|
--short
|
Affichage bref des PV.
|
-u
|
--uuid
|
Ajoute dans l’affichage l’UUID
(Uniform Unique Identifiers).
|
pvdisplay <option>
Option utile :
Option
|
Description
|
|
courte
|
longue
|
|
-s
|
--short
|
Affiche uniquement la taille du PV.
|
Vous pouvez visualiser le résultat avec pvs suite à l’initialisation des deux disques /dev/sdb et /dev/sdc.
# pvs PV VG Fmt Attr Psize Pfree /dev/sda1 SystemVG lvm2 a-- 50,00g 0 /dev/sdb lvm2 a-- 10,00g 10,00g /dev/sdc lvm2 a-- 10,00g 10,00gAvec pvscan :
# pvscan -u PV /dev/sda1 with UUID OyaFrT-Hoa8-lL8z-fnTY-eyJt-Utf7-Hs3aw2 VG SystemVG lvm2 [50,00 GiB / 0 free] PV /dev/sdb with UUID xG0az2-9zw8-C5je-ThHR-AFqQ-fd0j-qb9h8K lvm2 [10,00 GiB] PV /dev/sdc with UUID vZcG9T-Tjm1-907Y-7ZRo-qcUz-BmYF-Trurpe lvm2 [10,00 GiB] Total: 3 [70,00 GiB] / in use: 1 [50,00 GiB] / in no VG: 2 [20,00 GiB]Avec pvdisplay :
# pvdisplay -s Device "/dev/sda1" has a capacity of 0 Device "/dev/sdb" has a capacity of 10,00 GiB Device "/dev/sdc" has a capacity of 10,00 GiBOu bien de façon plus détaillée :
# pvdisplay --- Physical volume --- PV Name /dev/sda1 VG Name SystemVG PV Size 50,00 GiB / not usable 2,00 MiB Allocatable yes (but full) PE Size 4,00 MiB Total PE 12799 Free PE 0 Allocated PE 12799 PV UUID OyaFrT-Hoa8-lL8z-fnTY-eyJt-Utf7-Hs3aw2 "/dev/sdb" is a new physical volume of "10,00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 10,00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID xG0az2-9zw8-C5je-ThHR-AFqQ-fd0j-qb9h8K "/dev/sdc" is a new physical volume of "10,00 GiB" --- NEW Physical volume --- PV Name /dev/sdc VG Name PV Size 10,00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID vZcG9T-Tjm1-907Y-7ZRo-qcUz-BmYF-Trurpe
c. Modifier la taille d’un volume physique
Syntaxepvresize <option> <pv>
Option utile :
Option longue
|
Description
|
--setphysicalvolumesize <valeur>
|
Définit la nouvelle taille PV
selon <valeur> au PV passé en argument.
|
Affichez les PV :
# pvscan PV /dev/sda1 VG SystemVG lvm2 [50,00 GiB / 0 free] PV /dev/sdb lvm2 [10,00 GiB] PV /dev/sdc lvm2 [10,00 GiB] Total: 3 [70,00 GiB] / in use: 1 [50,00 GiB] / in no VG: 2 [20,00 GiB]Réduisez /dev/sdb de 2 Gio :
# pvresize --setphysicalvolumesize 8G /dev/sdb Physical volume "/dev/sdb" changed 1 physical volume(s) resized / 0 physical volume(s) not resizedVérifiez :
# pvscan PV /dev/sda1 VG SystemVG lvm2 [50,00 GiB / 0 free] PV /dev/sdb lvm2 [8,00 GiB] PV /dev/sdc lvm2 [10,00 GiB] Total: 3 [68,00 GiB] / in use: 1 [50,00 GiB] / in no VG: 2 [18,00 GiB]
d. Supprimer un volume physique
La suppression d’un PV qui n’est pas intégré dans
un VG, se supprime avec la commande pvremove.
Syntaxepvremove <pv>
<pv> est
le chemin du périphérique de bloc comme /dev/sda2.
Exemple avec DebianAffichez les PV :
# pvs PV VG Fmt Attr Psize Pfree /dev/sda1 SystemVG lvm2 a-- 50,00g 0 /dev/sdb lvm2 a-- 8,00g 8,00g /dev/sdc lvm2 a-- 10,00g 10,00gSupprimez le PV /dev/sdc :
# pvremove /dev/sdc Labels on physical volume "/dev/sdc" successfully wipedVérifiez :
# pvs PV VG Fmt Attr Psize Pfree /dev/sda1 SystemVG lvm2 a-- 50,00g 0 /dev/sdb lvm2 a-- 8,00g 8,00g
3. Administration des groupes de volumes
Les commandes qui gèrent les groupe
de volumes commencent par vg et
sont stockées dans le dossier /sbin :
# ls /sbin/vg* /sbin/vgcfgbackup /sbin/vgck /sbin/vgdisplay /sbin/vgimport /sbin/vgmknodes /sbin/vgrename /sbin/vgsplit /sbin/vgcfgrestore /sbin/vgconvert /sbin/vgexport /sbin/vgimportclone /sbin/vgreduce /sbin/vgs /sbin/vgchange /sbin/vgcreate /sbin/vgextend /sbin/vgmerge /sbin/vgremove /sbin/vgscan
a. Créer un groupe de volumes
La création d’un VG se réalise
avec la commande vgcreate.
Syntaxevgcreate <options> <nom_du_VG> <liste_PV>
Options utiles :
Option
|
Description
|
|
courte
|
longue
|
|
-l <valeur>
|
--maxlogicalvolumes <valeur>
|
Définit le nombre maximal de
LV dans le VG.
|
-p <valeur>
|
--maxphysicalvolumes <valeur>
|
Définit le nombre maximal de
PV dans le VG.
|
Créez un VG qui se nomme dataVG et ajoutez deux PV /dec/sdb et /dev/sdc :
# vgcreate dataVG /dev/sdb /dev/sdc Volume group "dataVG" successfully created
b. Afficher les groupes de volumes
Vous disposez de trois commandes pour afficher
les VG existants :
-
vgs retourne les informations sur les VG.
-
vgscan répertorie les VG et met à jour le cache.
-
vgdisplay affiche les propriétés d’un VG.
vgs
Pas d’option nécessaire pour vgs.
Syntaxevgscan <options>
Pas d’option nécessaire pour vgscan.
Syntaxevgdisplay <options> <nom_du_VG>
Options utiles :
Option
|
Description
|
|
courte
|
longue
|
|
-a
|
--activevolumegroups
|
Affiche les VG actifs.
|
-s
|
--short
|
Affichage bref des VG
|
-v
|
--verbose
|
Affichage détaillé du
VG.
|
-vv
|
--verbose --verbose
|
Affichage plus détaillé du
VG.
|
-vvv
|
--verbose --verbose --verbose
|
Affichage encore plus détaillé du VG.
|
Si le nom du VG est omis, vgdisplay affichera
tous les VG.
Exemple avec DebianAffichez les VG :
# vgs VG #PV #LV #SN Attr Vsize VFree SystemVG 1 4 0 wz—n- 50,00g 0 dataVG 2 0 0 wz—n- 17,99g 17,99g
Vous constatez que le VG dataVG contient
2 PV, 0 LV et dispose de 20 Gio environ.
Avec vgscan :# vgscan Reading all physical volumes. This may take a while... Found volume group "dataVG" using metadata type lvm2 Found volume group "SystemVG" using metadata type lvm2Avec vgdisplay :
# vgdisplay dataVG --- Volume group --- VG Name dataVG 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 17,99 GiB PE Size 4,00 MiB Total PE 4606 Alloc PE / Size 0 / 0 Free PE / Size 4606 / 17,99 GiB VG UUID WtJTkp-k8Pj-Kphw-UTwp-CsFq-FmWI-VGz1CeOu bien de façon plus détaillée :
# vgdisplay -v dataVG Using volume group(s) on command line Finding volume group "dataVG" --- Volume group --- VG Name dataVG 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 17,99 GiB PE Size 4,00 MiB Total PE 4606 Alloc PE / Size 0 / 0 Free PE / Size 4606 / 17,99 GiB VG UUID WtJTkp-k8Pj-Kphw-UTwp-CsFq-FmWI-VGz1Ce --- Physical volumes --- PV Name /dev/sdb PV UUID rDOPej-jVBY-OQhj-93qu-Rx9G-qXXA-eh2mNX PV Status allocatable Total PE / Free PE 2047 / 2047 PV Name /dev/sdc PV UUID m68YAv-OBQx-0edw-TNS9-x3az-Mj6D-D7Owjb PV Status allocatable Total PE / Free PE 2559 / 2559
c. Ajouter un volume physique au groupe de volumes
Pour ajouter un PV au VG, la commande est vgextend.
Syntaxevgextend <nom_du_VG> <PV_à_ajouter>
Pas d’options pour cette commande.
Exemple avec DebianAvec lvmdiskscan, regardez les disques disponibles :
# lvmdiskscan /dev/root [ 13,97 GiB] /dev/sda1 [ 50,00 GiB] LVM physical volume /dev/dm-1 [ 488,00 MiB] /dev/SystemVG/homeLV [ 35,39 GiB] /dev/SystemVG/optLV [ 168,00 MiB] /dev/sdb [ 10,00 GiB] LVM physical volume /dev/sdc [ 10,00 GiB] LVM physical volume /dev/sdd [ 10,00 GiB] /dev/sde [ 10,00 GiB] 5 disks 1 partition 2 LVM physical volume whole disks 1 LVM physical volume/dev/sdd et /dev/sde sont disponibles. Vous allez ajouter dev/sdd.
Il faut dans un premier temps initialiser /dev/sdd en tant que PV :
# pvcreate /dev/sdd Writing physical volume data to disk "/dev/sdd" Physical volume "/dev/sdd" successfully createdAjoutez ce PV dans le VG dataVG :
# vgextend dataVG /dev/sdd Volume group "dataVG" successfully extendedVérifiez :
# vgdisplay -v dataVG Using volume group(s) on command line Finding volume group "dataVG" --- Volume group --- VG Name dataVG System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 27,99 GiB PE Size 4,00 MiB Total PE 7165 Alloc PE / Size 0 / 0 Free PE / Size 7165 / 27,99 GiB VG UUID WtJTkp-k8Pj-Kphw-UTwp-CsFq-FmWI-VGz1Ce --- Physical volumes --- PV Name /dev/sdb PV UUID rDOPej-jVBY-OQhj-93qu-Rx9G-qXXA-eh2mNX PV Status allocatable Total PE / Free PE 2047 / 2047 PV Name /dev/sdc PV UUID m68YAv-OBQx-0edw-TNS9-x3az-Mj6D-D7Owjb PV Status allocatable Total PE / Free PE 2559 / 2559 PV Name /dev/sdd PV UUID msidG9-XtZI-cKdo-FG4q-oxEj-zYqf-n6Uno7 PV Status allocatable Total PE / Free PE 2559 / 2559
d. Enlever un volume physique du groupe de volumes
Assurez-vous que le PV ne soit pas utilisé avec vgdisplay. Si c’est le cas, la commande
est vgreduce.
Si au contraire, le PV est utilisé.
Il faudra utiliser la commande pvremove afin de
migrer les données vers un autre PV. Une fois l’opération
faite, vous pouvez enlever le PV avec vgreduce.
Syntaxevgreduce <nom_du_VG> <PV_à_enlever>
Pas d’options pour cette commande.
Exemple avec DebianL’objectif est d’enlever /dev/sdd du PV dataVG.
Vérifiez si le PV /dev/sdd est utilisé dans le VG :
# pvdisplay /dev/sdd --- Physical volume --- PV Name /dev/sdd VG Name dataVG PV Size 10,00 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 2559 Free PE 2559 Allocated PE 0 PV UUID msidG9-XtZI-cKdo-FG4q-oxEj-zYqf-n6Uno7Free PE est égal à Total PE et Allocated PE est à 0. Donc, le PV n’est pas utilisé.
Enlevez le PV du VG dataVG :
# vgreduce dataVG /dev/sdd Removed "/dev/sdd" from volume group "dataVG"Vérifiez :
# pvdisplay /dev/sdd "/dev/sdd" is a new physical volume of "10,00 GiB" --- NEW Physical volume --- PV Name /dev/sdd VG Name PV Size 10,00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID msidG9-XtZI-cKdo-FG4q-oxEj-zYqf-n6Uno7Le champ VG Name est vide.
e. Activer ou désactiver un groupe de volumes
La commande vgchange gère
la disponibilité des LV du VG pour les E/S.
Syntaxevgchange <option> <nom_du_VG>
Option nécessaire :
Option
|
Description
|
|
courte
|
longue
|
|
-a <valeur>
|
--available <valeur>
|
Si <valeur> vaut n alors
le VG est désactivé sinon y pour
activer.
|
Si le VG n’a pas de LV et que vous demandez
une désactivation :
# vgchange -a n dataVG 0 logical volume(s) in volume group "dataVG" now active
Le VG est forcément inaccessible
de toute manière.
f. Supprimer un groupe de volumes
Pour la suppression d’un VG qui ne contient
pas de LV, la commande est vgremove.
Syntaxevgremove <nom_du_VG>
Pas d’options pour cette commande.
Exemple avec DebianL’objectif est de supprimer le VG dataVG.
# vgremove dataVG Volume group "dataVG" successfully removedVérifiez :
# vgdisplay -s "SystemVG" 50,00 GiB [50,00 GiB used / 0 free]
g. Diviser un groupe de volumes
Diviser un VG s’effectue avec la commande vgsplit.
Syntaxevgsplit <nom_du_VG>
Pas d’options pour cette commande.
Exemple avec DebianAvant tout, il est nécessaire de créer un VG avec des PV pour pouvoir réaliser un exemple. Créez un VG appVG avec les PV /dev/sdb, /dev/sdc et /dev/sdd :
# vgcreate appVG /dev/sdb /dev/sdc /dev/sdd Volume group "appVG" successfully createdL’objectif est de diviser le VG AppVG comme ceci :
-
AppVG garde les deux PV /dev/sdb et /dev/sdc,
-
Un nouveau VG appelé devVG doit contenir /dev/sdd.
# vgsplit appVG devVG /dev/sdd New volume group "devVG" successfully split from "appVG"Vérifiez :
# vgdisplay -v appVG devVG Using volume group(s) on command line Finding volume group "appVG" --- Volume group --- VG Name appVG System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 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 19,99 GiB PE Size 4,00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19,99 GiB VG UUID xdeSxK-e2Lu-YKU1-bTMi-XN1K-mJkA-p2A6Fm --- Physical volumes --- PV Name /dev/sdb PV UUID rDOPej-jVBY-OQhj-93qu-Rx9G-qXXA-eh2mNX PV Status allocatable Total PE / Free PE 2559 / 2559 PV Name /dev/sdc PV UUID m68YAv-OBQx-0edw-TNS9-x3az-Mj6D-D7Owjb PV Status allocatable Total PE / Free PE 2559 / 2559 Finding volume group "devVG" --- Volume group --- VG Name devVG System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 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 10,00 GiB PE Size 4,00 MiB Total PE 2559 Alloc PE / Size 0 / 0 Free PE / Size 2559 / 10,00 GiB VG UUID 0thp9m-LqH0-7lHO-o74o-YSNC-s5IS-BhBbSo --- Physical volumes --- PV Name /dev/sdd PV UUID msidG9-XtZI-cKdo-FG4q-oxEj-zYqf-n6Uno7 PV Status allocatable Total PE / Free PE 2559 / 2559
h. Fusionner des groupes de volumes
La fusion de deux VG s’effectue avec la commande vgmerge.
Syntaxevgmerge <nom_du_VG_cible> <nom_du_VG_à_fusionner>
Pas d’options pour cette commande.
Exemple avec DebianL’objectif est de mettre le contenu du VG devVG dans appVG :
# vgmerge appVG devVG Volume group "devVG" successfully merged into "appVG"Vérifiez :
# vgdisplay -v appVG Using volume group(s) on command line Finding volume group "appVG" --- Volume group --- VG Name appVG System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 29,99 GiB PE Size 4,00 MiB Total PE 7677 Alloc PE / Size 0 / 0 Free PE / Size 7677 / 29,99 GiB VG UUID xdeSxK-e2Lu-YKU1-bTMi-XN1K-mJkA-p2A6Fm --- Physical volumes --- PV Name /dev/sdb PV UUID rDOPej-jVBY-OQhj-93qu-Rx9G-qXXA-eh2mNX PV Status &nbs
Aucun commentaire :
Enregistrer un commentaire