Comment mettre en oeuvre LVM sur un système Linux ?

Définitions

Avant de voir le fonctionnement pratique de LVM il est nécessaire de définir certains termes qui seront utilisés par la suite :

  • Un volume physique ou « PV » pour « physical volume » est tout simplement un disque ou une partition. C'est un espace de stockage bien réel (autrement dit un périphérique de la forme /dev/hdc2 par exemple), que l'on va confier à LVM. Tout ce qui était présent sur la partition sera effacé


  • Un groupe de volumes ou « VG » pour « volume group » est, comme son nom l'indique, un ensemble de volumes physiques. On a donc un ou plusieurs volumes physiques dans un groupe de volumes, et pour utiliser LVM, il faut obligatoirement au moins un groupe de volumes. Habituellement, sur les gros serveurs, on essaye de regrouper les disques en fonction de leur caractéristiques (capacités, performances, etc.). Pour un particulier, le fait de mettre plusieurs disques dans un même groupe de volume peut permettre « d'étaler » un système de fichiers sur plusieurs disques, et d'avoir donc /home par exemple qui utiliserait 2 disques. Une telle configuration est tout de même assez dangereuse en cas de perte d'un disque. De plus, cela n'apporterait aucun gain de performance contrairement à du RAID-0 par exemple


  • Un volume logique ou « LV » pour « logical volume » est ce que nous allons utiliser au final. Un volume logique est un espace « quelque part dans un groupe de volume » où l'on peut mettre un système de fichiers. C'est donc ce qui remplace les partitions. On peut donc utiliser un volume logique pour mettre la mémoire virtuelle, un pour /home, etc. Il est par contre déconseillé de monter / sur un volume logique, Grub (un des principaux utilitaires de boot) peut se montrer capricieux dans certaines configurations


  • Toutes les commandes agissant sur les volumes physiques commencent par pv


  • Toutes les commandes agissant sur les groupes de volumes commencent par vg


  • Toutes les commandes agissant sur les volumes logiques commencent par lv

Création d'un volume

Dans un premier temps il est nécessaire de créer un volume physique (on va utiliser une partition sur l'un des disques de l'ordinateur), nous utiliserons /dev/hdc2 dans cet exemple, l'ensemble des données présentes sur la partition seront effacées :
pvcreate /dev/hdc2

Nous allons ensuite créer un groupe de volumes, voici la syntaxe de la commande :
vgcreate VolumeGroupName PhysicalVolume [optionnellement d'autres PhysicalVolume]

Nous allons donner le nom rio à notre groupe de volumes :
vgcreate rio /dev/hdc2

Le volume est à présent créé, nous pouvons obtenir des informations sur ce volume avec la commande : vgdisplay

Il est à présent nécessaire de créer un volume logique, que l'on pourra ensuite « formater » en ext3 par exemple. La commande lvcreate permet de créer le volume logique, on lui donne deux paramètres « -n » pour son nom et « -L » pour la taille du volume à  créer. On lui donne également en paramètre le groupe de volumes que l'on va utiliser :
lvcreate -n enic -L 1g rio

Nous avons créé ici un volume logique enic avec une taille 1 Go en utilisant le groupes de volumes rio. Lorsque l'on utilise une partition notre volume à un nom du type /dev/hda3, avec LVM les noms seront différents : /dev/nom_du_vg/nom_du_lv, dans notre cas ce sera /dev/rio/enic

Nous allons formater le volume en ext3 pour l'utiliser sur notre système :
mkfs -t ext3 /dev/rio/enic
mkdir /test
mount /dev/rio/enic /test

La commande df -h nous montre que le volume est bien créé et monté sur /test

Pour supprimer un volume logique :
umount /test
lvremove /dev/rio/enic

Il est impossible de récupérer les données une fois le volume logique détruit.

Agrandissement

Pour agrandir un volume logique il faut d'abord démonter le système de fichier concerné» (/test dans notre cas), augmenter la taille du volume logique, puis augmenter la taille du système de fichier contenu dans le volume logique, et enfin remonter le système de fichiers.

Allons y :

umount /test
lvresize -L 2g /dev/rio/enic
resize2fs /dev/rio/enic
mount /dev/rio/enic /test

Il ne faut jamais indiquer une taille (ici 2 Go) inférieure à la taille initiale, cela détruirait le système de fichiers. La commande resize2fs est utilisée pour redimensionner le système de fichiers car il est en ext3, la commande dépend du type de système de fichiers (reiserfs...).

Rétrécissement

Réduire la taille d'un système de fichiers est une procédure à faire avec précaution, il faut impérativement respecter l'ordre de redimensionnement au risque de détruire le système de fichiers. En effet, si on commet l'erreur de diminuer la taille du volume logique avant de réduire la taille du contenu (le système de fichier lui même) alors on détruit le système de fichier... pareil si on réduit trop la taille du volume logique.

Pour éviter tout risque il est préférable d'utiliser cette méthode :

  • Réduire la taille du système de fichier plus que nécessaire

  • Réduire la taille du volume logique pour lui donner exactement la nouvelle taille souhaitée

  • Agrandir le système de fichier pour qu'il occupe tout l'espace disponible

De cette façon, le risque d'erreur est beaucoup plus faible.
Attention, tous les systèmes de fichiers ne peuvent pas être "réduits". Pour ext3 et reiserfs, cela se fait très bien. Voici donc un exemple :

Notre système de fichiers /test a une taille de 2 Go, nous allons le réduire à 1 Go (950 Mo dans un premier temps) :

umount /test
resize2fs -p /dev/rio/enic 950M

Maintenant que le système de fichier a diminué, il faut donner au volume logique sa nouvelle taille, 1 Go au lieu de 2 Go :

lvresize -L -1G /dev/rio/enic

WARNING: Reducing active logical volume to 1.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce enic? [y/n]:
Reducing logical volume enic to 1.00 GB


La dernière étape consiste à indiquer au système de fichier qu'il peut s'étendre automatiquement pour prendre tout l'espace disponible. Il devrait donc pouvoir grandir de 50 Mo. Il trouvera tout seul la taille exacte en nombre de bloc. On n'a pas pris le risque de faire une erreur en le réduisant exactement à la même taille que le volume logique, car la moindre erreur aurait pu corrompu le système de fichier à quelques blocs prêts. La commande est la suivante :

resize2fs /dev/rio/enic

Le système de fichier fait maintenant 1 Go, et nous avons toujours nos données à l'intérieur.

Comment mettre en oeuvre LVM sur un système Linux ?

1) Création d'un volume

2) Agrandissement

3) Rétrécissement