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
.
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=0
et retirez/dev/sdb
de la liste des disques ;ajoutez la définition de
/dev/md1
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.