LINUX:LVM
→ 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.
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