Généralités système Linux

LVM sous Linux (Volumes Logiques)

Table des matières

Introduction




LVM (Logical Volume Manager, ou gestionnaire de volumes logiques en français) permet la création et la gestion de volumes logiques sous Linux. L'utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques. C'est un système beaucoup plus souple, qui permet par exemple de diminuer la taille d'un système de fichier pour pouvoir en agrandir un autre, sans se préoccuper de leur emplacement sur le disque

Avantages de LVM :

  • Il n'y a pas de limitations « étranges » comme avec les partitions (primaire, étendue, etc.).
  • On ne se préoccupe plus de l'emplacement exact des données.
  • On peut conserver quelques giga-octets de libres pour pouvoir les ajouter n'importe où et n'importe quand.
  • Les opérations de redimensionnement deviennent quasiment sans risques, contrairement au redimensionnement des partitions.



Inconvénients de LVM :

  • Si un des volumes physiques devient HS, alors c'est l'ensemble des volumes logiques qui utilisent ce volume physique qui sont perdus. Pour éviter ce désastre, il faudra utiliser LVM sur des disques raid par exemple.





Quelques définitions




PV : Volumes physiques




Les disques durs, partitions de disques durs, volumes RAID ou unités logiques provenant d'un SAN forment des « volumes physiques » (physical volumes ou PV).

VG : Groupes de Volumes




On concatène ces volumes physiques (1 ou plusieurs) dans des « groupes de volumes » (volume groups ou VG).

Ces VG sont équivalents à des pseudo-disques-durs.

LV : Volumes logiques




Des « volumes logiques » (logical volumes ou LV) sont alors découpés dans les groupes de volumes, puis formatés et montés dans des systèmes de fichiers. Les LV sont équivalents à des pseudo-partitions.

FS : Système de fichiers




Des « systèmes de fichiers » (file system ou FS) est une façon de stocker les informations et de les organiser dans des fichiers. Ils disposent d'un point de montage et ont un type (ext4, xfs, btrfs)

Représentation visuelle




Je vous ai fait un petit schéma sur GIMP pour représenter tous les concepts ci-dessus dans une image, c'est parfois plus parlant :

lvm



Utiliser LVM




Pour manipuler le LVM, il faut évidemment avoir les droits root et être très prudent !

Les commandes LVM sont extrêmement simples à utiliser et portent des noms logiques :

  • toutes les commandes agissant sur les volumes physiques commencent par pv (pour physical volume);
  • toutes les commandes agissant sur les groupes de volumes commencent par vg (pour volumes group);
  • toutes les commandes agissant sur les volumes logiques commencent par lv (pour logical volume).





Manipulations




Dans l'article, je vais utiliser le disque sdb et sdc.

Démarrer les services




OpenRC




Pour les dérivées Gentoo, démarrer et activer les services lvm, lvmetad, lvm-monitoring :

Code BASH :
/etc/init.d/lvm start
/etc/init.d/lvmetad start
/etc/init.d/lvm-monitoring start
 
rc-update add lvm boot
rc-update add lvmetad boot
rc-update add lvm-monitoring boot


SystemD




Pour les systèmes utilisant systemd (comme les dérivées de Red Hat) lancer et activer les services lvm2-lvmetad, lvm2-monitor :

Code BASH :
systemctl enable  lvm2-lvmetad
systemctl enable lvm2-monitor
 
systemctl start lvm2-lvmetad
systemctl start lvm2-monitor


Prérequis LVM sur partition




Si, au lieu d'utiliser un disque entier en LVM on veut utiliser une partition, il faut donc créer une partition de type LVM sur tout le disque.

C'est utile dans certains cas, notamment si on veut faire du LVM sur le disque système, l'installation du chargeur d'amorçaue peut s'avérer compliqué.

Dans tous les cas, qu'on utilise une partition ou un disque entier, les manipulations sont identiques.

Code BASH :
fdisk /dev/sdb 


  • o (pour faire une table de partition MSDOS)
  • n (nouvelle partition)
  • p (type primaire)
  • 1 (num de partiton)
  • vide (début)
  • vide (fin)
  • t (type)
  • 8e (type LVM)
  • w (écrire)





Code BASH :
fdisk /dev/sdb 


Code TEXT :
Bienvenue dans fdisk (util-linux 2.23.2). 
 
Les modifications resteront en mémoire jusqu'à écriture. 
Soyez prudent avant d'utiliser la commande d'écriture. 
 
Le périphérique ne contient pas de table de partitions reconnue 
Construction d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0x2660dada. 
 
Commande (m pour l'aide) : o 
Construction d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0xb4087607. 
 
Commande (m pour l'aide) : n 
Type de partition : 
   p   primaire (0 primaire(s), 0 étendue(s), 4 libre(s)) 
  e   étendue 
Sélection (p par défaut) : p 
Numéro de partition (1-4, 1 par défaut) : 1 
Premier secteur (2048-2097151, 2048 par défaut) : 
Utilisation de la valeur 2048 par défaut 
Dernier secteur, +secteur ou +taille{K,M,G} (2048-2097151, 2097151 par défaut) : 
Utilisation de la valeur 2097151 par défaut 
La partition 1 de type Linux et de taille 1023 MiB est configurée 
 
Commande (m pour l'aide) : t 
Partition 1 sélectionnée 
Code Hexa (taper L pour afficher tous les codes) :8e 
Type de partition « Linux » modifié en « Linux LVM » 
 
Commande (m pour l'aide) : w 
La table de partitions a été altérée. 
 
Appel d'ioctl() pour relire la table de partitions. 
Synchronisation des disques.


Code BASH :
fdisk -l /dev/sdb 


Code TEXT :
Disque /dev/sdb : 1073 Mo, 1073741824 octets, 2097152 secteurs 
Unités = secteur de 1 × 512 = 512 octets 
Taille de secteur (logique / physique) : 512 octets / 512 octets 
taille d'E/S (minimale / optimale) : 512 octets / 512 octets 
Type d'étiquette de disque : dos 
Identifiant de disque : 0xb4087607 
 
Périphérique Amorçage  Début         Fin      Blocs    Id. Système 
/dev/sdb1            2048     2097151     1047552   8e  Linux LVM 




Ou si disque de plus de 2To il faut faire une table de partitions GPT avec gdisk

On va ensuite passer au LVM.

Les PV




Créer un PV




Avant toute chose, il faut créer au moins un PV.

Un PV peut être un disque entier ou une partition.

Code BASH :
pvcreate /dev/sdb 


Code TEXT :
Physical volume "/dev/sdb" successfully created 


Afficher des infos sur un PV




Pour afficher des infos sur un PV, on utilise la commande pvdisplay

Code BASH :
pvdisplay /dev/sdb 


Code TEXT :
  "/dev/sdb" is a new physical volume of "1,00 GiB" 


Code TEXT :
--- NEW Physical volume ---
  PV Name               /dev/sdb 
  VG Name 
  PV Size               1,00 GiB 
  Allocatable           NO 
  PE Size               0 
  Total PE              0 
  Free PE               0 
  Allocated PE          0 
  PV UUID               OYbIFi-1Amm-zUFC-3lrJ-qPpb-Llu7-nxM3xl 


Si on ne spécifie pas le nom du PV, tous les PV sont affichés.

Supprimer un PV




Pour supprimer un PV, on utilise la commande pvremove



Code BASH :
pvremove /dev/sdb 


Code TEXT :
  Labels on physical volume "/dev/sdb" successfully wiped 


Les VG




Créer un VG




Pour créer un VG, on va utiliser la commande vgcreate.

La commande s'utilise ainsi :

Code BASH :
vgcreate nomduvg /dev/pv1 /dev/pv2 ... 


Code BASH :
vgcreate datavg /dev/sdb 


Code TEXT :
  Volume group "datavg" successfully created 




Afficher des infos sur un VG




Pour afficher des infos sur un VG, on utilise la commande vgdisplay

Code BASH :
vgdisplay datavg 


Code TEXT :
--- Volume group ---
  VG Name               datavg 
  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               1020,00 MiB 
  PE Size               4,00 MiB 
  Total PE              255 
  Alloc PE / Size       0 / 0 
  Free  PE / Size       255 / 1020,00 MiB 
  VG UUID               GbeMTP-dmeX-d8f6-hgxP-Njyj-RQWi-OX5Cct 


Si le nom du VG n'est pas indiqué, tous les VG sont affichés.

Supprimer un VG




Pour supprimer un VG, on utilise vgremove

Code BASH :
vgremove datavg 


Code TEXT :
Volume group "datavg" successfully removed 


Ajouter un PV au VG




Si on a un seul PV dans le VG, et qu'on veut agrandir notre VG, on peut ajourer un deuxième PV avec la commande vgextend :

Code BASH :
vgextend datavg /dev/sdc 


Code TEXT :
Volume group "datavg" successfully extended 


On constate qu'avec vgdisplay on a 2 PV maintenant :

Code BASH :
vgdisplay datavg | grep "Cur PV" 


Code TEXT :
  Cur PV                2 


Supprimer un PV au VG




Si on a plusieurs PV dans le VG et qu'on veut en ôter un, (donc réduire notre VG) on peut supprimer un PV avec la commande vgreduce :



Code BASH :
vgreduce datavg /dev/sdc 


Code TEXT :
  Removed "/dev/sdc1" from volume group "datavg" 


Attention Si plusieurs PV dans un même VG




Imaginons 2 disques de 500Go (avec 2 partitions LVM de 500Go) nommés sdb1 et sdc1.

On fait un VG de 1000Go avec ces 2 PV, si 1 des 2 disques tombe en panne, l'intégralité du VG est perdu !

Veiller donc à utiliser un système de RAID derrière.



Les LV et les FS




Dans ce chapitre, je traite les LV et ls FS en même temps car ils sont très liés :)

Créer un LV




On se rapproche du but !

Pour créer un LV, on va utiliser la commande ... lvcreate.

La commade, pour le plus simple s'utilise ainsi :

Code BASH :
lvcreate -n nomdulv -L taille nomduvg 


Ou

Code BASH :
lvcreate -n nomdulv -l nb%VG nomduvg 


Exemple :

Code BASH :
lvcreate -n adrienlv -L 100M datavg 


Code TEXT :
  Logical volume "adrienlv" created. 


Code BASH :
lvcreate -n pourcentlv -l 10%VG datavg 


Code TEXT :
  Logical volume "pourcentlv" created. 


Ajouter un FS




Pour ajouter un FS sur le LV, on utilise la traditionnelle commande mkfs !

XFS



Code BASH :
mkfs.xfs /dev/nomduvg/nomdulv 


BTRFS



Code BASH :
mkfs.btrfs /dev/nomduvg/nomdulv 


EXT4



Code BASH :
mkfs.ext4 /dev/nomduvg/nomdulv 


Exemple :

Code BASH :
mkfs.ext4 /dev/nomduvg/nomdulv 


Code TEXT :
mke2fs 1.42.9 (28-Dec-2013) 
Étiquette de système de fichiers= 
Type de système d'exploitation : Linux 
Taille de bloc=1024 (log=0) 
Taille de fragment=1024 (log=0) 
« Stride » = 0 blocs, « Stripe width » = 0 blocs 
25688 i-noeuds, 102400 blocs 
5120 blocs (5.00%) réservés pour le super utilisateur 
Premier bloc de données=1 
Nombre maximum de blocs du système de fichiers=33685504 
13 groupes de blocs 
8192 blocs par groupe, 8192 fragments par groupe 
1976 i-noeuds par groupe 
Superblocs de secours stockés sur les blocs : 
        8193, 24577, 40961, 57345, 73729 
 
Allocation des tables de groupe : complété 
Écriture des tables d'i-noeuds : complété 
Création du journal (4096 blocs) : complété 
Écriture des superblocs et de l'information de comptabilité du système de 
fichiers : complété 




Monter le FS




Pour monter le FS, on utilise la traditionnelle commande mount !

Code BASH :
mount /dev/nomduvg/nomdulv /pointdemontage 


ou

Code BASH :
mount /dev/mapper/nomduvg-nomdulv /pointdemontage 


Exemple :

Code BASH :
mount /dev/datavg/adrienlv /adrien


On contrôle avec la commande mount ou df que le FS est bien monté :

Code BASH :
mount | grep adrienlv 


Code TEXT :
/dev/mapper/datavg-adrienlv on /adrien type ext4 (rw,relatime,data=ordered) 


Code BASH :
df | grep adrienlv 


Code TEXT :
/dev/mapper/datavg-adrienlv       95054    1550      86336   2% /adrien 


On peut ajouter ensuite une ligne dans le fstab pour rendre permanente la modification :

Code TEXT :
/dev/mapper/nomduvg-nomdulv /pointdemontage  typefs     options  1 1


Exemple:

Code TEXT :
/dev/mapper/datavg-adrienlv /adrien  ext4  defaults  1 1 




Voir les LV




Pour voir les LV on utilise la commande ... lvdisplay

lvdisplay affiche tous les LV de tous les VG.

On peut spécifier un VG uniquement ou un LV d'un VG, ou rien pour tous.

Code BASH :
lvdisplay 
lvdisplay nomduvg 
lvdisplay nomduvg/nomdulv 


Exemple :

Code BASH :
lvdisplay datavg/adrienlv 


Code TEXT :
--- Logical volume ---
  LV Path                /dev/datavg/adrienlv 
  LV Name                adrienlv 
  VG Name                datavg 
  LV UUID                IDpnmL-e4u8-dm4a-KhQn-mZ1w-UnMV-yRyWsQ 
  LV Write Access        read/write 
  LV Creation host, time zeus.biopole21.com, 2016-02-16 17:05:31 +0100 
  LV Status              available 
  # open                 0 
  LV Size                100,00 MiB 
  Current LE             25 
  Segments               1 
  Allocation             inherit 
  Read ahead sectors     auto 
  - currently set to     8192 
  Block device           253:2 
 




Supprimer un LV




Pour supprimer un LV, on va utiliser la commande lvremove.

Attention, toutes les données sont supprimées !!!!

Le FS doit être démonté !

La commande s'utilise comme suit :

Code BASH :
lvremove nomduvg/nomdulv 




Exemple :

Code BASH :
lvremove datavg/pourcentlv 


Code TEXT :
Do you really want to remove active logical volume pourcentlv? [y/n]: y 
  Logical volume "pourcentlv" successfully removed 


Agrandir un LV (et le FS)




Pour agrandir un LV, on va utiliser la commande lvresize. (On peut utiliser aussi lvextend, ça fait la même chose)

La commande s'utilise comme suit :

Définir une taille précise :

Code BASH :
lvresize -L taille nomduvg/nomdulv 


Ou ajouter de X :

Code BASH :
lvresize -L +taille nomduvg/nomdulv 


Les tailles de LV sont des multiples de PE. (Physical Extend)

Code BASH :
pvdisplay /dev/sdb | grep "PE Size" 


Code TEXT :
  PE Size               4,00 MiB 


Après avoir agrandi le LV, il faut penser à agrandir le FS également !

Les commandes diffèrent suivant les systèmes de fichiers.

Pour ext4, on utilise la commande resize2fs.

Si on ne met pas d'option, la taille maximale est prise (ce qu'on souhaite dans le LV)

Il est préférable de démonter si possible le système de fichiers, mais l'agrandissement à chaud est possible.

Code BASH :
resize2fs /dev/nomduvg/nomdulv 


Exemple en doublant la taille du LV

Code BASH :
df -h /adrien 


Code TEXT :
Sys. de fichiers            Taille Utilisé Dispo Uti% Monté sur 
/dev/mapper/datavg-adrienlv    93M    1,6M   85M   2% /adrien 


Code BASH :
lvresize -L +100M datavg/adrienlv 


Code TEXT :
  Size of logical volume datavg/adrienlv changed from 100,00 MiB (25 extents) to 200,00 MiB (50 extents). 
  Logical volume adrienlv successfully resized. 


Code BASH :
resize2fs /dev/datavg/adrienlv 


Code TEXT :
resize2fs 1.42.9 (28-Dec-2013) 
Le système de fichiers de /dev/datavg/adrienlv est monté sur /adrien ; le changement de taille doit être effectué en ligne 
old_desc_blocks = 1, new_desc_blocks = 2 
Le système de fichiers /dev/datavg/adrienlv a maintenant une taille de 204800 blocs. 


Code BASH :
df -h /adrien 


Code TEXT :
Sys. de fichiers            Taille Utilisé Dispo Uti% Monté sur 
/dev/mapper/datavg-adrienlv   190M    1,6M  178M   1% /adrien 




Réduire le LV (et le FS)




Avant de réduire le LV, si la taille finale du LV est plus petite que celle du FS, il faut réduire le FS d'abord, sinon, corruption de données !!!

Diminuer la taille du FS est un peu plus délicat. Il ne faut évidemment pas réduire plus que la place occupée...

Pour éviter tout risque, je conseille de procéder ainsi :

  • Réduire la taille du FS plus que nécessaire
  • Réduire la taille du LV pour lui donner exactement la taille souhaitée.
  • Agrandir le FS pour qu'il occupe tout l'espace disponible.



Attention, tous les systèmes de fichiers ne peuvent pas être réduits. Pour ext4 et xfs et btrfs, cela se fait très bien. À noter que ext4 et xfs soivent être démontés pour être réduits.

Il est recommandé de réduire plus le FS que prévu puis de le ragrandir ensuite.

Exemple : Si on passe d'un LV de 200M à 100M, on va, pas sécurité, réduire le FS de 200M à 90M, réduire le LV de 200M à 100M, puis agrandir le FS au maximum.



Pour réduire le LV, on utilise la commande lvresize. (On peut utiliser aussi lvreduce, ça fait la même chose)

La commande s'utilise comme suit :

Définir une taille précise :

Code BASH :
lvresize -L taille nomduvg/nomdulv 


Ou réduire de X :

Code BASH :
lvresize -L -taille nomduvg/nomdulv 


Pour réduire un FS, on utilise encore la commande resize2fs, en ayant au préalable vérifié le système de fichiers avec e2fsck.

Code BASH :
umount /pointdemontage 
e2fsck -f /dev/nomduvg/nomdulv 
resize2fs /dev/nomduvg/nomdulv taille 




Donc en combinant les 2 options dans le bon ordre :

Code BASH :
umount /pointdemontage 
e2fsck -f /dev/nomduvg/nomdulv 
resize2fs /dev/nomduvg/nomdulv taille 
lvresize -L taille /dev/nomduvg/nomdulv 
resize2fs /dev/nomduvg/nomdulv 
mount /pointdemontage 


Exemple :

Code BASH :
df -h /adrien 


Code TEXT :
Sys. de fichiers            Taille Utilisé Dispo Uti% Monté sur 
/dev/mapper/datavg-adrienlv   190M    1,6M  178M   1% /adrien 


Code BASH :
umount /adrien 
e2fsck -f /dev/datavg/adrienlv 


Code TEXT :
e2fsck 1.42.9 (28-Dec-2013) 
Passe 1 : vérification des i-noeuds, des blocs et des tailles 
Passe 2 : vérification de la structure des répertoires 
Passe 3 : vérification de la connectivité des répertoires 
Passe 4 : vérification des compteurs de référence 
Passe 5 : vérification de l'information du sommaire de groupe 
/dev/datavg/adrienlv : 11/49400 fichiers (9.1% non contigüs), 11884/204800 blocs 


Code BASH :
resize2fs /dev/datavg/adrienlv 90M 


Code TEXT :
resize2fs 1.42.9 (28-Dec-2013) 
En train de redimensionner le système de fichiers sur /dev/datavg/adrienlv à 92160 (1k) blocs. 
Le système de fichiers /dev/datavg/adrienlv a maintenant une taille de 92160 blocs. 


Code BASH :
lvresize -L 100M /dev/datavg/adrienlv 


Code TEXT :
  WARNING: Reducing active logical volume to 100,00 MiB 
  THIS MAY DESTROY YOUR DATA (filesystem etc.) 
Do you really want to reduce adrienlv? [y/n]: y 
  Size of logical volume datavg/adrienlv changed from 200,00 MiB (50 extents) to 100,00 MiB (25 extents). 
  Logical volume adrienlv successfully resized. 


Code BASH :
resize2fs /dev/datavg/adrienlv 


Code TEXT :
resize2fs 1.42.9 (28-Dec-2013) 
En train de redimensionner le système de fichiers sur /dev/datavg/adrienlv à 102400 (1k) blocs. 
Le système de fichiers /dev/datavg/adrienlv a maintenant une taille de 102400 blocs. 


Code BASH :
mount /dev/datavg/adrienlv /adrien 
df -h /adrien 


Code TEXT :
Sys. de fichiers            Taille Utilisé Dispo Uti% Monté sur 
/dev/mapper/datavg-adrienlv    93M    1,6M   85M   2% /adrien 
Cette page a été vue 43492 fois