Recherche de site Web

Introduction au provisionnement dynamique LVM


LVM (Logical Volume Manager) est une technologie qui nous permet de créer une couche d’abstraction sur des périphériques de stockage physiques, et de mettre en œuvre des schémas de partitionnement flexibles où les volumes logiques sont plus faciles à réduire, à agrandir ou à supprimer que les partitions « nues » classiques. Alors que le provisionnement « lourd » LVM nécessite l’allocation d’une quantité fixe d’espace de stockage à un volume logique LVM au moment de la création, le provisionnement « dynamique » utilise le provisionnement « dynamique », le stockage n’est alloué qu’en cas de besoin.

Dans ce tutoriel, nous apprenons les concepts de base du provisionnement dynamique LVM et nous voyons comment créer et gérer des pools fins et des volumes LVM sous Linux.

Dans ce tutoriel, vous allez apprendre :

  • Les concepts de base du thin provisioning LVM
  • Comment créer des pools et des volumes fins

Introduction

Le provisionnement dynamique est basé sur le concept de pools et de volumes dynamiques. Lorsque nous utilisons le thin provisioning, nous n’allouons pas d’espace disque à un volume logique au moment de la création : nous leur fournissons simplement une taille « virtuelle ». Avant de voir comment créer des pools et des volumes fins, nous devons créer un groupe de volumes et le remplir avec au moins un volume physique.

Création d’un groupe de volumes

Nous commençons par utiliser une partition hypothétique /dev/vda1 de 20 Gio comme volume physique LVM :

sudo pvcreate /dev/vda1

Pour créer un groupe de volumes (pour les besoins de ce tutoriel, nous le nommerons « vg0 »), et en même temps y ajouter le volume physique, nous exécutons la commande suivante :

sudo vgcreate vg0 /dev/vda1

Nous pouvons utiliser la commande vgdisplay pour visualiser notre configuration actuelle. Dans ce cas, il renvoie la sortie suivante :

--- Volume group ---
VG Name vg0
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 <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / <20.00 GiB
VG UUID jXRrgk-YfNA-Qisj-XxmE-FtCs-chzj-w1idAM

Création d’un pool dynamique LVM

Nous créons un pool léger LVM comme n’importe quel autre volume logique ; La seule différence est que nous utilisons l’option --thinpool. Supposons que nous voulions créer un pool dynamique nommé « lxcfgpool » ; Voici la commande que nous exécuterions :

sudo lvcreate --thinpool lxcfgpool -L15GiB vg0

Vous pouvez voir que nous n’avons pas utilisé tout l’espace disponible dans le groupe de volume : il s’agit d’une mesure de sécurité pour nous assurer d’avoir une certaine marge d’expansion pour le pool (nous en reparlerons dans un instant). Pour vérifier que le pool dynamique a été créé, nous pouvons utiliser la commande lvs :

sudo lvs
LV        VG  Attr       LSize  Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool vg0 twi-a-tz-- 15.00g             0.00  10.57

En observant la sortie, nous pouvons voir qu’aucune donnée n’est utilisée sur le pool pour le moment, tandis que 10,57 % de l’espace est utilisé pour les métadonnées. Le premier bit lv_attr, tel qu’indiqué dans la colonne « Attr », indique le type de volume. Un t, comme prévu, signifie que nous avons affaire à un bassin mince. En ajoutant l’option -a à la commande, nous pouvons recueillir encore plus d’informations :

sudo lvs -a
LV                VG  Attr       LSize  Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[lvol0_pmspare]   vg0 ewi------- 16.00m 
lxcfgpool         vg0 twi-a-tz-- 15.00g             0.00  10.57 
[lxcfgpool_tdata] vg0 Twi-ao---- 15.00g 
[lxcfgpool_tmeta] vg0 ewi-ao---- 16.00m

Comme nous avons utilisé l’option -a, les volumes logiques « internes » existants ont été inclus dans la sortie : ces volumes ne sont pas accessibles directement par l’utilisateur. À quoi servent-ils ? Un pool dynamique est créé en combinant deux volumes logiques « standard » : l’un est destiné à contenir des données (le « T » dans le premier bit lv_attr représente des données de pool dynamique), l’autre est destiné à contenir des métadonnées (« e »). Un volume logique pmspare (Pool Metadata spare) supplémentaire est également créé avec la même taille que les métadonnées LV : il est utilisé pour les opérations de réparation/restauration.

Création de volumes minces

Une fois que nous avons un pool mince, nous pouvons créer des volumes logiques légers. La création d’un volume mince est très simple. Nous utilisons toujours la commande lvcreate ; cette fois, cependant, au lieu de spécifier la taille « statique » du volume, nous utilisons l’option -V pour spécifier sa taille « virtuelle », qui est la quantité maximale d’espace qu’il peut prendre. Dans l’exemple ci-dessous, nous créons un volume logique léger nommé « thinvolume0 » avec une taille virtuelle de 10 Gio :

sudo lvcreate -V 10GiB -T vg0/lxcfgpool -n thinvolume0

Notre premier volume mince est prêt. Maintenant, essayons d’en créer un autre de la même taille :

sudo lvcreate -V 10GiB -T vg0/lxcfgpool -n thinvolume1

La commande est exécutée avec succès, cependant, cette fois-ci, nous recevons une série d’avertissements :

WARNING: Sum of all thin volume sizes (20.00 GiB) exceeds the size of thin pool vg0/lxcfgpool and the size of whole volume group (<20.00 GiB).
WARNING: You have not turned on protection against thin pools running out of space.
WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
Logical volume "thinvolume1" created.

Le premier message est assez clair : la somme des tailles virtuelles des deux volumes minces (10 Gio chacun) est supérieure à la taille du pool mince. Il s’agit toujours d’un scénario valable, car, comme nous l’avons déjà dit, l’espace n’est alloué que lorsqu’il est utilisé.

Le deuxième message nous avertit que nous n’avons pas activé la protection contre le manque d’espace. Un pool léger ne doit jamais manquer d’espace, sinon il peut y avoir des corruptions de système de fichiers. En définissant l’option thin_pool_autoextend_threshold sur une valeur de pourcentage < 100 dans le fichier de configuration /etc/lvm/lvm.conf, nous pouvons faire en sorte que le pool dynamique soit automatiquement étendu lorsque le seuil spécifié est atteint. Il va de soi qu’il doit y avoir de l’espace disponible dans le groupe de volumes pour que cette opération réussisse. La quantité d’espace ajoutée au pool lorsqu’il est automatiquement étendu peut être configurée via l’option thin_pool_autoextend_percent, qui, par défaut, est généralement définie sur 20 % de l’espace du pool.

L’importance de la taille

Avec une configuration de provisionnement dynamique, il est très important d’utiliser régulièrement des utilitaires tels que fstrim pour s’assurer que les blocs libérés dans les volumes légers retournent au pool en tant qu’espace disponible. Montrons-le. Nous avons nos volumes minces, créons maintenant des systèmes de fichiers dessus :

sudo mkfs.ext2 /dev/vg0/thinvolume0
sudo mkfs.ext2 /dev/vg0/thinvolume1

Maintenant, montons le volume logique « thinvolume0 » et simulons la création d’un fichier de 1 Gio à l’aide de dd :

sudo mount /dev/vg0/thinvolume0 /mnt
sudo dd if=/dev/zero of=/mnt/test bs=1M count=1024

Voici l’état du pool après la création du fichier :

sudo lvs
LV          VG  Attr       LSize  Pool      Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool   vg0 twi-aotz-- 15.00g                  8.87  13.55
thinvolume0 vg0 Vwi-aotz-- 10.00g lxcfgpool        11.65
thinvolume1 vg0 Vwi-a-tz-- 10.00g lxcfgpool        1.65

Comme vous pouvez le voir, 8,87 % de l’espace de la piscine est maintenant utilisé. Voyons ce qui se passe si nous supprimons le fichier que nous venons de créer :

sudo rm /mnt/test

Vérifions à nouveau l’état du pool :

sudo lvs
LV          VG  Attr       LSize  Pool      Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool   vg0 twi-aotz-- 15.00g                  8.87  13.55
thinvolume0 vg0 Vwi-aotz-- 10.00g lxcfgpool        11.65
thinvolume1 vg0 Vwi-a-tz-- 10.00g lxcfgpool        1.65

On dirait que rien n’a changé. Exécutons maintenant fstrim sur le système de fichiers monté :

sudo fstrim /mnt
/mnt: 9.7 GiB (10461900800 bytes) trimmed

Vérifions une dernière fois l’état du pool :

sudo lvs
LV          VG  Attr       LSize  Pool      Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool   vg0 twi-aotz-- 15.00g                  2.19  11.30
thinvolume0 vg0 Vwi-aotz-- 10.00g lxcfgpool        1.65
thinvolume1 vg0 Vwi-a-tz-- 10.00g lxcfgpool        1.65

Cette fois, comme vous pouvez le voir, l’espace coupé a été rendu à la piscine.

Réflexions finales

Contrairement au provisionnement « lourd », qui nécessite l’allocation d’une quantité fixe d’espace aux volumes logiques au moment de la création, le provisionnement dynamique LVM nous permet de créer un pool d’espace (un pool léger) et des volumes logiques légers basés sur celui-ci, en spécifiant uniquement leur taille virtuelle. L’espace du pool n’est alloué aux volumes légers que lorsque cela est nécessaire. Dans ce tutoriel, nous avons brièvement vu comment créer un pool mince et des volumes minces.

Articles connexes: