Outils pour utilisateurs

Outils du site


cours:informatique:sysadmin:serveur_fichiers_linux:240_partitionnement_avec_lvm

Notes et transcriptions du cours “Montez un serveur de fichiers sous Linux” disponible sur la plateforme Openclassrooms.

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-volumes /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 800 Mo et un volume “data2” de 200 Mo sur votre groupe de volume.

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

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

Représentation des 3 couches du modèle LVM

Pour information, toutes les commandes qui concernent :

  • les volumes physiques commencent par pv* ;
  • les groupes de volumes commencent par vg* ;
  • les volumes logiques commencent par lv*.

Comme évoqué précédemment, 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-volumes/data1
$ sudo mount -t ext4 /dev/raid-volumes/data1 /var/data1
$ sudo mkfs -t ext4 /dev/raid-volumes/data2
$ sudo mkdir /var/data2
$ sudo mount -t ext4 /dev/raid-volumes/data2 /var/data

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

Imaginons qu’après un certain temps d’utilisation, vous vous apercevez que 600 Mo vous suffiraient pour /var/data1 et que vous avez besoin de 1,4 Go 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 800 Mo à 600 Mo, 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 !

Évidemment, pour que ce soit possible, il faut avoir assez d’espace disponible (moins de 600 Mo de données dans notre cas) et que votre système de fichiers supporte l’opération de réduction.

C’est le cas d’ext4 donc tout va bien.

$ sudo lvreduce --size 600M --resizefs /dev/raid-volumes/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 commande lvreduce 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.

Les commandes LVM parlent d’extents. C’est comme ça que LVM gère son découpage. Un extent est un petit bout de groupe de volumes (unité d'allocation). LVM alloue ensuite ces extents à chaque volume logique.

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

Commencez par sortir le disque de spare /dev/vdd 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/vdd --remove /dev/vdd

Vous allez alors pouvoir utiliser ce disque /dev/vdd “libéré” pour créer un RAID 1 avec le nouveau disque /dev/vde

$ 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, indiquez spares=0 ;
  • Retirez /dev/vdd de la liste des disques ;
  • Ajoutez la définition de du volume /dev/md1.

Schéma des différentes couches LVM avec vos 2 partitions data1 et data2 et l'espace disponible

Vous avez maintenant 200 Mo de libres sur votre groupe de volume et un disque RAID vierge de 1 Go. 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 cela, 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 LVM :

$ sudo pvcreate /dev/md1

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

$ sudo vgextend raid-volumes /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.

On aurait pu obtenir le même espace disponible sans ajouter de disque en transformant notre RAID 1 en RAID 5

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-volumes/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 300 Mo et vous avez créé deux fichiers dans /var/data2 : un de 5 Mo et un de 10 Mo.

Pour ça, vous avez utilisé la commande dd 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 1 ko 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 100 Mo par la commande :

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

Vous pouvez voir votre snapshot par les commandes sudo 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

Si votre snapshot atteint la taille maximale que vous lui aviez allouée, il devient inutilisable. Heureusement, en cas de besoin, vous pouvez augmenter cette taille par la commande lvresize .

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.

Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/sysadmin/serveur_fichiers_linux/240_partitionnement_avec_lvm.txt · Dernière modification : 2024/04/04 13:05 de yoann