LVM : Logical Volume Manager

Tout système de fichiers est habituellement dépendant de contraintes matérielles. Vous pouvez partitionner vos disques en partitions primaires et étendues (avec "lecteurs" logiques) mais ce, à condition de rester dans les limites imparties par la taille de ces disques. LVM permet de dépasser ce stade et de pousser plus loin encore la notion de volumes logiques.

Le Logical Volume Manager est un sous-système pour la gestion du stockage des données sur les disques. En clair, il se glisse entre les périphériques et l'interface d'entrée/sortie du noyau. LVM permet de considérer plusieurs disques physiques comme un seul groupe de volumes constitués de volumes physiques (disques). Dans ce groupe de volumes, il est possible de créer un ou plusieurs volumes logiques. Ceux-ci sont considérés par le système comme des partitions classiques où il est possible de créer un système de fichiers ou une zone de swap. Comprenez bien que la barrière des unités de base (disque) disparaît. Il est ainsi possible de créer un seul volume logique à partir de plusieurs disques de manière plus élégante qu'avec RAID car les groupes et les volumes logiques peuvent être alloués à loisir.

L'idée de gestion de volumes logiques n'est pas nouvelle. LVM a été initialement développé par IBM, puis repris par l'Open Group (ex-OSF) pour le système OSF/1. Cette version d'OSF/1 a ensuite servi de base de travail pour la conception d'autres systèmes Unix : HP-UX et Digital Unix. LVM tel qu'on le trouve sous Linux est une implémentation similaire à celle d'HP-UX. Voilà pour le principe et l'historique, voyons à présent ce que tout cela donne dans la pratique.

Installation

LVM se compose de deux éléments, une partie devant être intégrée au noyau et une partie utilitaire permettant de manipuler les volumes. Avant toute chose, vous devez vous procurer LVM (les deux parties) sur le serveur Web officiel. Les éléments du niveau kernel existent dans quelques versions "ac" mais pour l'heure dans aucune série officielle. Nous y reviendrons plus loin. Il vous faudra ensuite patcher votre noyau :

gzip -dc lvm-*.*.*-LVM.gz | (cd /usr/src/linux; patch -p1)

Puis activer le support LVM dans la configuration (make config/menuconfig/xconfig) dans la section "Block devices". Il est conseillé de compiler LVM comme module chargeable. Le reste de la procédure de compilation/installation du kernel et des modules est habituelle.

Options kernel


Dernière étape concernant la partie noyau, il vous faut renseigner kmod pour lui permettre de charger correctement lvm.o. Pour cela, modifiez le fichier /etc/modules.conf en y ajoutant :

alias block-major-58 lvm
alias char-major-109 lvm

Enfin, décompressez les utilitaires LVM, placez-vous à la racine de l'arborescence des sources et éditez le fichier make.tmpl. Vous y trouverez deux variables à éventuellement modifier pour les faire correspondre à votre configuration :

TOP = /plus3/LVM/0.8-pre02.10.1999
KERNEL_LOCATION = /usr/src/linux

TOP étant le répertoire racine des sources et KERNEL_LOCATION l'endroit où sont placées les sources du noyau patché. Enfin, faites un "make; make install".

Pour vous faciliter les manipulations, éditez également vos fichiers de configuration système pour lancer les commandes vgscan et vgchange -a y au démarrage (/etc/rc.d/boot.local) et vgchange -a n à l'arrêt du système (/etc/rc.d/halt.local). Les fichiers mentionnés sont des exemples valables pour la distribution SuSE.

Point important, lors de la modification des paramètres de votre chargeur (LILO, ChOS, Grub, loadlin), pensez à garder un exemplaire de votre ancien kernel (LVM est encore à considérer comme du code Alpha).

Utilisation

Maintenant que la gestion LVM est installée et prête à fonctionner, vous devez créer vos volumes physiques. Partitionnez vos disques en spécifiant le system id (commande t dans fdisk) comme étant 0xFE (libellé LANstep). Notre configuration exemple sera deux disques /dev/hdb et /dev/hdc possédant une seule partition chacun (donc hdb1 et hdc1). Il n'est pas conseillé de multiplier les partitions sur les disques. En effet, créer un volume logique à partir de hdb1, hdb2, hdc1 et hdc2 est non seulement un peu stupide, mais ferait chuter les performances de LVM. Dans un premier temps, créez les volumes physiques. Utilisez la commande pvcreate comme suit :

# pvcreate /deb/hd[bc]1

Créez maintenant les groupes réunissant les volumes physiques de votre choix. Ici, nous utilisons nos deux volumes physiques pour créer le groupe de test, gtest :

# vgcreate gtest /dev/hd[bc]1

A présent, vgcreate a transmis les métadonnées au pilote du noyau. Le groupe peut donc accueillir les volumes logiques. Nous allons donc en créer un s'appelant lvtest1, d'une taille n'excédant pas la taille du volume physique (bien sûr) :

# lvcreate -L1500 -nlvtest1 gtest

Vous obtiendrez un /dev/lvtest1 réagissant comme une partition on ne peut plus classique. Vous pouvez donc le formater :

# mke2fs /dev/gtest/lvtest1

Et le monter

# mount -t ext2 /dev/gtest/lvtest1 /mnt/LVM1

Comme vous le voyez, les volumes logiques contenus dans un groupe sont clairement représentés sous la forme d'une arborescence dans /dev.

Maintenance

Vous voilà avec votre ou vos volumes physiques/logiques. Mais les réjouissances ne s'arrêtent pas là. Il vous est maintenant possible de changer la taille des volumes logiques dans la limite de l'espace disponible dans le groupe. Vous pouvez, par exemple, augmenter de 200 Mo lvtest1 :

# lvextend -L+200 /dev/gtest/lvtest1

ou encore

# lvextend -L1700 /dev/gtest/lvtest1

Il nous est possible de le réduire à 1 Go par :

# lvreduce -L-700 /dev/gtest/lvtest1

ou par

# lvreduce -L1000 /dev/gtest/lvtest1

La gestion ne s'arrête pas là. Vous pouvez ajouter/enlever des volumes physiques dans le groupe et renommer vos groupes et volumes logiques. Voyez l'excellente documentation livrée avec les sources (FAQ, HOWTO, INSTALL, ABSTRACT). Convaincu ? Sinon, sachez qu'il vous est également possible, à l'aide de l'utilitaire resize2fs de Ted Tso, de redimensionner vos systèmes de fichiers ext2 des volumes logiques. Et ce, sans détruire vos données par une commande comme :

# e2fsadm -L+200 /dev/gtest/lvtest1

Et le kernel ?

LVM est une solution bien pratique dans diverses situations. Malheureusement, bien qu'il soit déjà apparu dans quelques patchs d'Alan Cox, LVM n'est pas une caractéristique prévue pour le prochain kernel 2.4. Je suis d'avis, tout comme un grand nombre d'utilisateurs, qu'il a pourtant un rôle important à jouer dans l'avenir de Linux. Pour l'heure, la situation ne semble pas se débloquer et le responsable du projet (Heinz Mauelshagen) a appelé à signer une pétition pour montrer combien les utilisateurs désirent voir LVM supporté dans le noyau officiel. Attention, il ne s'agit pas de mettre la pression à Linus et à qui que ce soit, mais de simplement démontrer un besoin. Pour preuve, la dernière distribution SuSE (6.3) incorpore LVM (jusqu'au niveau de la procédure d'install avec Yast). N'hésitez pas, si vous avez essayé LVM à apporter votre aide à l'équipe de LVM.

Linux Magazine France n°15 - Mars 2000