• 12 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/22/23

Gérez vos partitions en souplesse avec LVM

Dans les chapitres précédents, vous avez vu comment partitionner un disque. Le problème est qu’une fois que vous avez partitionné votre disque, il est laborieux et risqué de redimensionner les partitions et d’en ajouter de nouvelles. De plus, quand on manque de place dans une partition, on pourrait être tenté d’en ajouter une nouvelle mais on ne pourra pas répartir automatiquement les données sur les deux partitions. Il faudra créer un point de montage pour chaque partition et répartir manuellement nos données entre ces différents points de montage. Ça peut vite devenir compliqué à gérer...

LVM répond à ces problématiques et va vous permettre de gérer beaucoup plus facilement vos espaces de stockage. Voyons un peu comment ça fonctionne.

Comprenez le fonctionnement de LVM

LVM, qui signifie Logical Volume Management pour gestion de volume logique, est basé sur trois niveaux d’abstraction.

La première couche concerne les volumes physiques. Un volume physique peut être un disque entier, une partition ou un volume RAID. On doit “marquer” un volume physique pour pouvoir l’utiliser avec LVM. Essayons d’utiliser LVM avec notre disque RAID :

$ sudo umount /dev/md0 #Le volume doit être démonté
$ sudo pvcreate /dev/md0
WARNING: ext4 signature detected on /dev/md0 at offset 1080. Wipe it? [y/n]: y
 Winping ext4 signature on /dev/md0
 Physical volume “/dev/md0” successfully created

Vous pouvez voir toutes les informations sur vos volumes physiques avec les commandes  sudo pvs  ou  sudo pvdisplay.

Ensuite, vous regrouperez ces volumes physiques dans des groupes de volumes. Pour l’instant, vous allez créer un groupe de volumes appelé "raid-volume" qui ne contient que votre RAID. Vous pourrez plus tard ajouter dynamiquement n’importe quel volume physique à ce groupe.

$ sudo vgcreate raid-volume /dev/md0

 Vous pouvez voir toutes les informations sur vos groupes de volumes avec les commandes  sudo vgs  ou  sudo vgdisplay  .

Enfin, vous allez découper ces groupes de volumes en volumes logiques qui sont l’équivalent LVM des partitions. Pour l’instant, vous allez créer un volume logique “data1” de 800Mo et un volume “data2” de 200Mo sur votre groupe de volume.

$ sudo lvcreate --name data1 --size 800M raid-volume
$ sudo lvcreate --name data2 --size 200M raid-volume

Vous pouvez voir toutes les informations sur vos volumes logiques avec les commandes  sudo lvs  ou  sudo lvdisplay .

Schéma représentant les trois couche du modèle LVM avec un exemple de
Représentation des 3 couches du modèle LVM

Comme je vous ai dit, les volumes logiques fonctionnent comme des partitions. Pour chaque volume logique, LVM crée un fichier périphérique dans  /dev  sous la forme  /dev/{groupe_de_volume}/{volume_logique}  . Pour les utiliser, il vous faut donc les formater et les monter.

$ sudo mkfs -t ext4 /dev/raid-volume/data1
$ sudo mount -t ext4 /dev/raid-volume/data1 /var/data1
$ sudo mkfs -t ext4 /dev/raid-volume/data2
$ sudo mkdir /var/data2
$ sudo mount -t ext4 /dev/raid-volume/data2 /var/data

Et voilà, on a bien une partition  /var/data1  de 800Mo et une partition  /var/data2  de 200Mo.

Imaginons qu’après un certain temps d’utilisation, vous vous apercevez que 600Mo vous suffiraient pour /var/data1 et que vous avez besoin de 1,4Go pour  /var/data2 .

Avec un système de partitionnement classique, vous seriez  bien embêté mais avec LVM tout devient plus facile.

Une solution pourrait être :

  • de réduire la partition  /var/data1  et d’utiliser l’espace libéré sur ce volume ;

  • de rajouter un disque de 1Go et de construire un nouveau RAID 1 avec le disque de “spare” de notre RAID actuel.

Essayons !

Redimensionnez vos volumes avec LVM

Pour pouvoir réduire  /var/data1  de 800Mo à 600Mo, il vous faut d’abord réduire le système de fichier et ensuite réduire le volume logique. LVM vous permet de faire tout ça en une seule commande !

$ sudo lvreduce --size 600M --resizefs /dev/raid-volume/data1
Do you want to unmount “/var/data1” ? [Y|n] y
fsck from util-linux 2.34
/dev/mapper/raid--volume-data1: 11/51296 files (0.0% non-contiguous), 7726/204800 blocks
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystème on /dev/mapper/raid--volume-data1 to 153600 (4k) blocks.
The filesystème on /dev/mapper/raid--volume-data1 is now 153600 (4k) blocks long.

Size of logical volume raid-volume/data1 changed from 800.00 MiB (200 extents) to 600.00 MiB (150 extents).
Logical volume raid-volume/data1 successfully resized

Avec l’option--resizefs, la commandelvreduce s’occupe de démonter la partition, de lancer un e2fsck et un resize2fs sur le système de fichier puis de réduire la taille du volume logique et de remonter la partition.

On voit au passage que le système utilise un autre nom pour notre volume logique dans/dev  mais si vous allez vérifier à coup de ls -l , vous verrez que ce sont tous des liens qui pointent vers la même chose.

Éteignez votre serveur, ajoutez un nouveau disque de 1Go et rallumez-le.

Commencez par sortir le disque de spare  /dev/sdb  de votre RAID : il faudra simplement être plus réactif pour changer un disque qui tomberait en défaut.

$ sudo mdadm --manage /dev/md0 --fail /dev/sdb --remove /dev/sdb

Vous allez alors pouvoir utiliser ce disque  /dev/sdb  "libéré" pour créer un RAID 1 avec le nouveau disque  /dev/sde

$ sudo   mdadm   --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sdb /dev/sde

Enfin, pensez à mettre votre fichier /etc/mdadm/mdadm.conf à jour :

  • pour/dev/md0, indiquezspares=0et retirez /dev/sdb de la liste des disques ;

  • ajoutez la définition de  /dev/md1

Shéma représentant les différentes couches LVM avec vos 2 partitions data1 et data2 et l'espace disponible : un
Schéma des différentes couches LVM avec vos 2 partitions data1 et data2 et l'espace disponible

Vous avez maintenant 200Mo de libres sur votre groupe de volume et un disque RAID vierge de 1Go. Avec un partitionnement classique, vous ne pourriez pas augmenter la taille d’une partition "par l’arrière" ni la faire déborder sur un nouveau support physique. Vous devriez donc créer une nouvelle partition dans chaque espace disponible, les formater et les monter par exemple sur   /var/data2b  et  /var/data2c  .

Après, bonjour la gestion de la répartition des données entre  /var/data2  ,   /var/data2b  et  /var/data2c  !

Avec LVM, vous ne vous occupez plus de savoir où sont vos données et vous profitez simplement de cet espace libre pour agrandir votre volume logique.

On commence par marquer le nouveau RAID 1 comme un volume physique RAID :

$ sudo pvcreate /dev/md1

Ajoutez ce volume physique à votre groupe de volumes raid-volume par la commande :

$ sudo vgextend raid-volume /dev/md1

Il ne vous reste plus qu’à étendre votre volume logique à la taille souhaitée sans vous soucier de savoir où sont placées les données :

$ sudo lvextend --size +1200M --resizefs /dev/raid-volume/data2

En plus, avec l’option  --resizefs  ,  lvextend  s’occupe d’agrandir votre système de fichier à votre place.

LVM facilite vraiment la gestion du partitionnement puisqu’on peut faire plus de choses avec moins d’effort. Pourtant, les possibilités de LVM ne s’arrêtent pas là. Une des fonctionnalités les plus intéressantes de LVM est la possibilité de faire des "snapshots".

Découvrez les snapshots LVM

Un "snapshot" ou "instantané" en français est une image de l’état de votre volume logique à un instant t. Un snapshot est stocké sur le volume groupe donc il vous faut un peu d’espace non utilisé sur votre volume groupe.

$ sudo lvreduce --size -300M --resizefs /dev/raid-volume/data2
$ sudo dd if=/dev/zero of=/var/data2/fichier_5M bs=1k count=5000
$ sudo dd if=/dev/zero of=/var/data2/fichier_10M bs=1k count=10000

Ici, vous avez réduit le volume logique/dev/raid-volume/data2 de 300Mo et vous avez créé deux fichiers dans /var/data2 : un de 5Mo et un de 10Mo.

Pour ça, vous avez utilisé la commandedd qui copie des données bit par bit. Comme son nom l’indique, le périphérique spécial /dev/zero ne renvoie que des zéros. Vous l’avez donc utilisé pour écrire respectivement 5000 et 10000 blocs de 1ko de zéros dans nos fichiers.

Créez maintenant un snapshot appelé backup_ddmmyyyy du volume logique  /dev/raid-volume/data2  et allouez lui une taille de 100Mo par la commande :

$ sudo lvcreate --snapshot --name backup_ddmmyyyy --size 100M /dev/raid-volume/data2

Vous pouvez voir votre snapshot par les commandessudo lvs ou sudo lvdisplay .

À sa création, un snapshot a une taille de 0. Il n’y a pas eu de copie des données, on a juste marqué le moment à partir duquel on va enregistrer les changements. Un snapshot est donc quasi-instantané même sur de très gros volumes de données. Ensuite, quand vous continuez à travailler, à ajouter, supprimer et modifier des fichiers sur votre volume logique, tous vos changements vont être enregistrés dans votre snapshot et ce dernier va grossir :

$ sudo rm /var/data2/fichier_10M && sudo lvs
$ sudo rm /var/data2/fichier_5M && sudo lv

Vous pouvez ensuite utiliser votre snapshot comme n’importe quel volume logique. Pour récupérer des fichiers effacés par erreur, vous pouvez par exemple monter ce volume et retrouver vos fichiers dans l’état où ils étaient au moment où vous avez fait le snapshot :

$ sudo mkdir /var/snapshot
$ sudo mount -t ext4 /dev/raid-volume/backup_ddmmyyyy /var/snapshot
$ sudo cp /var/snapshot/fichier_* /var/data2

Une fois que vous n’avez plus besoin de votre snapshot, vous pouvez le supprimer :

$ sudo umount /var/snapshot
$ sudo lvremove /dev/raid-volume/backup_ddmmyyy

Voilà, vous avez maintenant un petit aperçu de ce qu’il est possible de faire avec LVM.

En résumé

  • LVM utilise trois niveaux d’abstraction : des volumes physiques, des groupes de volumes et des volumes logiques.

  • Les groupes de volumes peuvent agréger plusieurs volumes physiques.

  • Les volumes logiques s’utilisent comme des partitions mais sans avoir à vous soucier de l’emplacement des données.

  • LVM permet également de prendre des “snapshots” qui sont des images à un instant t de l’état de votre volume logique.

Dans la  partie suivante, nous utiliserons ces volumes de stockage pour partager des fichiers en réseau.

Example of certificate of achievement
Example of certificate of achievement