LINUX:LVM

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour à la gestion des disques


But

LVM (Logical Volume Manager) permet la création et la gestion de volumes logiques sous Linux. Ce concept est basé sur trois couches: Physical Volume, Volume Group et Logical Volume. Ce concept permet de s’abstraire des noms des disques qui changent selon le brochage sur la matériel (carte mère, carte Raid,...). Il permet de ne pas être limité par la taille de la partition; on peut utiliser plusieurs partitions ou seulement une partie. Il peut s'étendre facilement. La diminution de taille est possible avec précautions. La migration vers un autre disque est possible. Mais comme dans le cas des partitions, une défaillance physique du disque met a mal les données. Dans ce cadre, la sauvegarde régulière est de mise et des techniques comme le Raid diminuent ce risque.

Cette couche logicielle "lvm2" est installée d'office. Nous utiliserons la ligne de commande mais il existe des interfaces graphiques comme Cockpit.

Notons que nous n'aborderons qu'une petite partie des fonctionnalités, les plus courantes. L'installation de l'OS se charge de la partie concernant le système. L'utilisation de ces commandes s’avère utile dans cas de l'ajout d'un autre disque à la machine ou éventuellement la récupération de données sur une autre machine.


Schéma

Pour illustrer la suite, nous prenons l'exemple de deux disques que nous allons paramétrer avec LVM. Ces disques ont été utilisés lors du partitionnement; l'un est le disque ayant un démarrage de type uefi et qui contient l'OS; l'autre est un disque pour y mettre les données. Le premier disque avait une partir non partitionnée; la partition "/dev/sda4" a été ajoutée. Nous avons donné un nom à cette machine (hostname): m1.home.dom. Au total, trois partitions de type LVM sont disponibles.

LINUX:Lvm.pdf


Remarque préliminaire

Je conseille de donner à tous les Volumes Groups et Logicals Volumes des noms différents quel que soit la machine. J'utilise le nom de la machine en préfixe. Dans les exemples suivants, le nom de la machine est "m1.home.dom"; le préfixe sera "m1". Cette remarque est importante car si vous déplacez le disque sur une autre machine et que deux Volumes Groups ont le même nom, vous aurez de gros problèmes; la machine repère automatiquement toutes nouvelles informations LVM.

Pour le reste du nom des Volumes Groups et Logicals Volumes, j'ai adopté ici une notation impersonnelle mais vous pouvez donner un nom qui rappelle le contenu; par exemple pour le Volume Group "m1_vg1", on aurait pu le nommer "m1_vg_system" et le Logical Volume "m1_lv2", "m1_lv_swap".


Physical Volume

Le Physical Volume permet de déclarer une partition comme pouvant être utilisée par la LVM.


Création

Pour ajouter une partition, on utilise la commande:

pvcreate <partition>

par exemple:

pvcreate /dev/sda4
pvcreate /dev/sdb1


Elimination

Pour éliminer un Physical Volume lié à une partition, on utilise la commande:

pvremove <partition>

par exemple:

pvremove /dev/sda4

Il faut s'assurer auparavant qu'il n'est plus lié à un Volume Group.


Liste

La commande:

pvs

permet d'afficher tous les Physicals Volumes existants.

Par exemple:


 PV         VG               Fmt  Attr PSize    PFree
 /dev/sda3  m1_vg1           lvm2 a--   <28,68g    4,00m
 /dev/sda4                   lvm2 ---   267,82g  267,82g
 /dev/sdb1                   lvm2 ---  <149,05g <149,05g


Volume Group

Un Volume Group rassemble plusieurs Physical Volume. Un Physical Volume ne peut appartenir qu'à un Volume Group.


Création

Pour ajouter une partition à un Volume Group et créer le Volume Group, on utilise la commande:

vgcreate <Volume Group> <Physical Volume>

par exemple:

vgcreate m1_vg2 /dev/sda4


Extension

Si le Volume Group existe déjà, on utilise la commande suivante pour l'étendre:

vgextend <Volume Group> <Physical Volume>

par exemple:

vgextend m1_vg2 /dev/sdb1


Elimination

Pour éliminer un Volume Group, on utilise la commande:

vgremove <Volume Group>

par exemple:

vgremove m1_vg2

Il faut s'assurer auparavant qu'il n'est plus lié à un Logical Volume.


Liste

La commande:

vgs

permet d'afficher tous les Volumes Groups existants.

Par exemple:


 VG               #PV #LV #SN Attr   VSize     VFree
 m1_vg1             1   3   0 wz--n-  <28,68g    4,00m
 m1_vg2             2   1   0 wz--n- <416,87g <416,87g

et pour:

pvs

 PV         VG               Fmt  Attr PSize     PFree
 /dev/sda3  m1_vg1           lvm2 a--   <28,68g    4,00m
 /dev/sda4  m1_vg2           lvm2 a--   267,82g  267,82g
 /dev/sdb1  m1_vg2           lvm2 a--  <149,05g <149,05g


Détail

Pour pouvoir passer à l'étape suivante, il nous faut afficher le détail du Volume Group avec la commande:

vgdisplay <Volume Group>

par exemple:

vgdisplay m1_vg2

qui donne:


 --- Volume group ---
 VG Name               m1_vg2
 System ID
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  3
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                1
 Open LV               0
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               <416,87 GiB
 PE Size               4,00 MiB
 Total PE              106718
 Alloc PE / Size       0 / 0 
 Free  PE / Size       106718 / <416,87 GiB
 VG UUID               Wnx1qP-kLY6-PXAf-wd6c-3AJ3-FmTM-NFQn25

C'est le nombre de blocs libres ("Free PE") qui nous intéresse.


Logical Volume

Un Logical Group est une partie du Volume Group qui pourra être formatée et montée. Il fait le pendant des partitions formatées et montées directement comme la partition "/dev/sda2" montée sur le répertoire "/boot".


Création

Auparavant il faut connaitre la taille de ce nouveau Logical Volume. Pour ce faire, on consulte le détail du Volume Groupe concerné. La zone "Free PE" donne le nombre de blocs disponible. On en prend la partie désirée ou sa totalité; dans la commande qui suit, ce nombre correspond à "<nbs PE>" et on en prendra la totalité.

Pour créer le Logical Volume, on utilise la commande:

lvcreate -l <nbs PE> -n <Logical Volume> <Volume Group>

par exemple:

lvcreate -l 106718 -n m1_lv4 m1_vg2 


Elimination

Pour éliminer un Logical Volume, on utilise la commande:

lvremove <Volume Group>/<Logical Volume>

par exemple:

lvremove m1_vg2/m1_lv4

Il faut s'assurer auparavant qu'il n'est plus monté et que les données qui la composent peuvent être perdues.


Liste

La commande:

lvs

permet d'afficher tous les Logicals Volumes existants.


 LV     VG               Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 m1_lv1 m1_m1            -wi-ao----   15,00g
 m1_lv2 m1_m1            -wi-ao----   <3,91g
 m1_lv3 m1_m1            -wi-ao----   <9,77g
 m1_lv4 m1_m2            -wi-a----- <416,87g

et pour:

vgs

 VG               #PV #LV #SN Attr   VSize    VFree
 m1_vg1             1   3   0 wz--n-  <28,68g 4,00m
 m1_vg2             2   1   0 wz--n- <416,87g    0

et pour:

pvs

 PV         VG               Fmt  Attr PSize    PFree
 /dev/sda3  m1_vg1           lvm2 a--   <28,68g 4,00m
 /dev/sda4  m1_vg2           lvm2 a--   267,82g    0
 /dev/sdb1  m1_vg2           lvm2 a--  <149,05g    0


Réactualisation

Il est possible de réactualiser les éléments LVM avec les commandes suivantes:

pvscan
vgscan
lvscan

respectivement pour les Physical Volumes, Volumes Groups et Logical Volumes. Ceci peut être utile quand on ajoute un périphérique où l'on suspecte la présence de LVM.


Intégration d'un disque inconnu

Il m'est arrivé de devoir changer de machine un disque ayant une partition de type LVM sans perdre les données qu'il contient.


Vérification du nom du Volume Group

Avant de commencer, il faut s'assurer que les noms des Volumes Groups du disque à intégrer ne sont pas les mêmes que ceux de la machine hôte.

Si c'est le cas, il faut renommer de nom de ce Volume Group par exemple sur la machine d'origine du disque que l'on veut changer de machine. Car si on le fait pas, les manipulations qui suivent ne fonctionneront pas.

La commande suivante permet d'effectuer cette manipulation. Il est préférable que les Files System de ces Logical Volumes concernés ne soient pas montés.

vgrename <ancien Volume Group> <nouveau Volume Group>

ou

vgrename /dev/<ancien Volume Group> /dev/<nouveau Volume Group>


Lister les Volumes Group

Après avoir connecté le disque à intégrer dans la machine hôte, on utilise les commandes suivantes:

pvscan

ou

pvs

qui donne les Physical Volumes et leurs Volumes Groups associés reconnus par le système.

Par exemple, la commande:

pvscan

donne:


 PV /dev/sda3   VG fedora_serverdb200   lvm2 [147,46 GiB / 4,00 MiB free]
 Total: 1 [147,46 GiB] / in use: 1 [147,46 GiB] / in no VG: 0 [0   ]


Pour voir aussi ceux qui ne sont pas encore reconnus par le système, exécutez la commande suivante:

pvscan -A

Par différence, vous pouvez connaitre le Physical Volume du disque à intégrer.

Par exemple, la commande:

pvscan -A

donne:


 PV /dev/sdb1   VG vgtera               -          -
 PV /dev/sda3   VG fedora_serverdb200   sys_wwid   t10.ATA_ST3160815AS_6RX0N7SF
 Total: 2 [1,05 TiB] / in use: 2 [1,05 TiB] / in no VG: 0 [0   ]

On repère le nouveau device à intégrer: "/dev/sdb1"


En parallèle la commande:

fdisk -l

permet de connaitre les partitions des disques qui sont de type "Linux LVM" et de repérer le nom de ces devices.

Par exemple, la commande:

fdisk -l /dev/sdb

donne:


Disk /dev/sdb: 931,51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: WDC WD10EALX-009
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 18E36FF8-D217-4BFB-9DC8-66D3B626CA98
 
Device     Start        End    Sectors   Size Type
/dev/sdb1   2048 1953523711 1953521664 931,5G Linux LVM


Ajout du Physical Volume

Il suffit maintenant de l'ajouter avec la commande suivante selon notre exemple:

lvmdevices --adddev /dev/sdb1


Si par hasard, vous vous êtes trompé par exemple avec la commande suivante où on a omis le n° de partition "1",:

lvmdevices --adddev /dev/sdb

il faut revenir en arrière:

lvmdevices --deldev /dev/sdb


Maintenant nous pouvons vérifier:

pvscan

Ce qui donne:


 PV /dev/sdb1   VG vgtera               lvm2 [<931,51 GiB / 0    free]
 PV /dev/sda3   VG fedora_serverdb200   lvm2 [147,46 GiB / 4,00 MiB free]
 Total: 2 [1,05 TiB] / in use: 2 [1,05 TiB] / in no VG: 0 [0   ]


Création des fichiers devices LVM

Avant de pouvoir monter notre Logical Volume nouvellement intégré, il faut que les fichiers devices LVM soient créés, actifs. Un redémarrage de la machine le fera automatiquement mais la commande suivante évite ce redémarrage:

vgchange -a y <nouveau Volume Group>

Par exemple, la commande:

vgchange -a y vgtera

affiche:


 1 logical volume(s) in volume group "vgtera" now active

Dès lors, par exemple, le device "/dev/vgtera" et ses Logical Volumes sont créés.

Il nous reste à monter ce ou ces Logical Volumes.





retour à la gestion des disques