Le fonctionnement de la gestion par volumes logiques

LVM repose sur le principe de fonctionnement suivant : on s'affranchit totalement des limites physiques imposées par la présence des disques durs (et partitions) présents dans la machine. LVM va ainsi se greffer par dessus les disques et partitions, permettant d'organiser et répartir librement l'espace de stockage sans se soucier des contraintes matérielles. Nous allons détailler dans cette partie le mode de fonctionnement très souple de la gestion par volumes logiques.

Les volumes physiques

La première étape lors du passage d'un système de stockage simple à un système par gestion logique de volumes est la création de volumes physiques.

Un volume physique est simplement un disque dur ou une partition que LVM va s'approprier et diviser en tranches de 4Mo (valeur par défaut), écrasant toutes les données déjà présentes. Chacune de ces tranches est appelée physical extent. Il est tout à fait possible de laisser LVM gérer une partie de l'espace de stockage tout en conservant l'autre partie intacte. A titre d'exemple, si on dispose de 2 disques durs qui sont divisés pour chacun d'entre eux en 2 partitions, on peut très bien travailler sur une seule partition parmi les 4 totalisées par le système.

Les groupes de volumes

Un groupe de volumes est un ensemble de volumes physiques. La deuxième étape consiste à insérer les volumes physiques qui viennent d'être créés dans des groupes de volumes. On peut placer plusieurs volumes physiques dans un groupe de volumes, à sa convenance. Cette étape est obligatoire, car LVM exige de disposer au minimum d'un groupe de volume pour fonctionner. Typiquement, on va s'arranger pour grouper les volumes physiques par caractéristiques (débits, performances, etc.), afin d'optimiser le fonctionnement de LVM.
A l'instar de la création des volumes physiques, la création d'un groupe de volumes conduit au découpage de ce groupe en tranches de 4Mo appelées logical extents.

D'un point de vue pratique, le fait de placer plusieurs volumes physiques dans un même groupe de volumes peut permettre l'étalement d'un système de fichiers sur plusieurs disques. Il est alors possible de répartir son dossier personnel (/home) de manière transparente sur plusieurs disques durs.

La création de pointeurs

LVM va ensuite créer des pointeurs qui vont mettre en relation les physical extents (PE) avec les logical extents (LE). Le schéma suivant résume ces points :


LVM établit des pointeurs entre les PE et les LE
LVM établit des pointeurs entre les PE et les LE

Les volumes logiques

Une fois les groupes de volumes et les pointeurs créés, LVM passe par une dernière étape : la division des groupes de volumes en volumes logiques. Ces derniers correspondent à l'espace de stockage que l'utilisateur aura finalement à sa disposition ; la notion de volumes logiques remplace donc celle de partition. LVM utilisera autant de physical et logical extents que nécessaire pour créer un volume, dont la taille sera donc un multiple de 4Mo par défaut (taille d'un extent). Chaque volume logique, au même titre qu'une partition, devra être formaté avec un système de fichier classique (typiquement ext3 sous Linux) puis monté pour être accessible. On pourra bien entendu également créer une partition de swap sur de tels volumes.

L'utilisation des physical et logical extents permettra le redimensionnement, le déplacement, la suppression et l'ajout de volumes logiques sans perdre de données ou redémarrer la machine.

Les métadatas utilisées par LVM

Utiliser LVM sur son système pour partitionner un disque conduit à perdre une partie de l'espace de stockage disponible. LVM utilise en effet des métadatas, données informatives, pour gérer le système. Ces métadatas sont :

  • La Physical Volume Reserved Area (PVRA) : contient des informations propres aux volumes physiques créés par LVM,


  • La Volume Group Reserved Area (VGRA) : contient des informations propres aux groupes de volumes et aux volumes logiques inclus dans ces groupes,


  • La Bad Block Relocation Area (BBRA) : il s'agit d'une zone contenant les informations rattachées à un mécanisme de réallocation des blocs défectueux (permettant la récupération automatique des blocs défectueux).

Exemple pratique

Dans l'exemple qui va suivre, nous considérons que l'on dispose de 4 disques durs dans une machine : /dev/sda, /dev/sdb, /dev/sdc et /dev/sdd. Chaque disque contient une seule partition primaire (partitionnement par défaut), ces partitions sont dans l'ordre respectif /dev/sda1, /dev/sdb1, /dev/sdc1 et /dev/sdd1.

On imagine que l'on souhaite agréger l'ensemble des 4 disques (4 partitions en fait) grâce à LVM. Comme nous l'avons vu, ces 4 partitions sont dans un premier temps tranformées en volumes physiques par LVM. On choisit ensuite de grouper ces 4 volumes physiques, LVM les insère donc dans un groupe de volumes qui est appelé "datavg" sur le schéma. Dorénevanant, il ne faut plus considérer que l'on dispose de 4 espaces de stockage différents comme c'était le cas au début, mais d'un seul et même espace agrégé que l'on organise à sa guise (espace "datavg").

Cet espace est finalement segmenté en divers volumes logiques : "medialv", "backuplv" et "sharelv". Ces 3 volumes sont reconnus par Linux comme des partitions à part entière, on peut donc les monter sans aucun problème. On peut voir dans l'exemple que nos 3 volumes ont été montés à des points différents (/opt/media, /mnt/backup et /home/share). A charge de l'utilisateur de formater chaque volume logique avec un système de fichier de son choix (XFS et Reiserfs ont été utilisés dans l'exemple, on aurait très bien pu utiliser ext3).

L'espace qui est non alloué pourra servir à augmenter la taille de l'un ou l'autre des volumes logiques.


Schéma d'exemple avec 4 disques durs
Schéma pratique du fonctionnement de LVM avec 4 disques durs