wiki:InsiaAdminSysLvm

Sommaire

Administration système - Gestion des volumes avec LVM

1. Présentation

La gestion de "volumes logiques" est issue principalement de la demande de besoins de stockage sur de nombreux disques. Un administrateur système est en général soumis à deux contraintes:

  • la configuration physique de son sytème de stockage: les machines, leurs disques et l'architecture (SAN/NAS, iSCSI, FiberChannel, etc)

Afin de pouvoir concilier sereinement les deux aspects, on a introduit un sytème permettant de créer des lens arbitraires entre les "volumes physiques" (ce qui est concrètement disponible) et les "volumes logiques" (ce qui doit être présenté aux applicatifs et aux utilisateurs).

Historique

  • LVM est apparu autour de 1998. Il a été intégré dans la série 2.4 du noyau Linux et est de ce fait encore très répandu. Il a été principalement développé par Sistina et Redhat.
  • LVM2 est l'évolution naturelle de LVM1 (et presque compatible). Elle est intégrée au noyau 2.6, et très couramment "backportée" vers les noyaux 2.4 (comme celui de Debian Sarge).
  • EVMS est principalement développé par IBM, et fut longtemps en ballotage avec LVM2 pour être le gestionnaire par défaut dans la série 2.6. Il y a toujours du pour et du contre, EVMS reste une alternative maintenue et reconnue.

Nomenclature

Il faut un composant noyau et divers outils pour faire fonctionner un gestionnaire de volumes logiques. On note que dans la série 2.6 du noyau Linux un système générique (device mapper) a été créé pour être partagé par différents gestionnaires:

Gestionnaire Composant noyau Outils
LVM lvm lvm
LVM2 device-mapper libdevmapper + lvm2
EVMS device-mapper libdevmapper + evms

Ressources

  • Le cours d'Adrien (voir en bas de page lvm.pdf)
  • LVM Howto

2. Principes

La préparation "classique" d'un système de fichiers se décompose en général en 3 niveaux distincts:

  • Bas niveau: un disque dur physique, qui se présente sous le système comme un block device (ex: /dev/hda)
  • Intermédiaire: une partition, c'est-à-dire portion continue du support physique; ceci nous est également préesnté comme un block device (ex: dev/hda1)
  • Haut niveau: un système de fichier, qui permet de manipuler naturellement les données; il doit être construit au dessus d'un block device

Pour appliquer le principe de LVM, on voit qu'il nous faut ajouter un mécanisme d'indirection entre les couches bas niveau (disque dur, partitions) et le système de fichier. En d'autres termes, LVM est un outil qui va créer des block device virtuels, utilisables comme des disques ou partitions classiques: on pourra donc réutiliser toutes les notions standards d'administration que l'on connaît.

Le Volume Group

Il s'agit de la notion centrale de LVM: la première opération lors de la configuration de LVM consiste à créer au moins un Volume Group. Ce dernier se considère de deux points de vue:

  • d'une part, il agrège différents volumes physiques (donc des disques durs et/ou des partitions) en une seule entité logique dont la capacité de stockage est la somme de ses composants
  • d'autre part, son espace logique total peut (et doit) être partitionné pour créer des block devices prêt à l'emploi pour nos systèmes de fichiers
/dev/hda1  --\               /--> /dev/vg-filer/eleves  --> /mnt/eleves
             |--> vg-filer --|
/dev/hdc   --/               \--> /dev/vg-filer/profs   --> /mnt/profs

Sous réserve de la création correcte des Physical Volumes (voir ci-dessous), on peut configurer et activer le Volume Group de cet exemple ainsi:

# vgcreate vg-filer /dev/hda1 /dev/hdc
# vgchange -ay vg-filer
# vgdisplay

Physical Volumes

Il s'agit des éléments physiques de stockage (à gauche sur le schéma précédent), qui sont des block devices quelconques (en pratique: des paritions ou des disques entiers). Il est toutefois nécessaire d'initialiser ces block devices qui vont être agrégés dans un même Volume Group:

# pvcreate /dev/hda1
# pvcreate /dev/hdc
# pvdisplay

Il est également recommandé pour les partitions d'utiliser le type dédié (8e), il permet notamment aux divers composants logiciels non-LVM de reconnaître qu'elles sont utilisées par LVM.

Logical Volumes

Il s'agit de la partie utile d'un Volume Group, celle où l'on va pouvoir créer nos systèmes de fichiers. L'opération ressemble beaucoup à un partitionnement, elle remplace en effet le découpage au niveau disque mais au niveau logique (en beaucoup plus souple comme nous allons le voir). Par exemple:

# lvcreate -L 50G -n eleves vg-filer
# lvcreate -L 10G -n profs vg-filer
# lvdisplay

A ce stade nous pouvons donc créer des sytèmes de fichiers, les monter, etc:

# mke2fs -j /dev/vg-filer/eleves
# mount /dev/vg-filer/eleves /mnt/eleves
...

3. Utilisation

Concaténation

Cette opération est implicite lors de la construction des éléments LVM.

Bien qu'il existe un autre mécanisme (md sous Linux), LVM reste la solution la plus simple pour agréger différents disques ou portions de disques et les présenter comme un block device consolidé. L'intérêt évident réside dans le fait de pouvoir construire des systèmes de fichiers dont la taille n'est pas limitée par le plus gros disque dur disponible du moment.

Extension

Il est très simple de rajouter un "Physical Volume" dans un "Volume Group":

# pvcreate /dev/sda
# vgextend vg-filer /dev/sda

Cependant, avant d'être utile, il nous faudra prendre soin de deux autres opérations:

  • étendre un Logical Volume pour profiter de cet espace physique accru
  • étendre le sytème de fichier ad hoc pour profiter de l'extension du Logical Volume

Si étendre un Logical Volume est trivial et sans risque, la modification de la taille d'un système de fichier n'est pas toujours évidente. Peu de systèmes de fichiers sont capables de faire cette opération "à chaud" (ReiserFS, ext3, XFS), il faudra donc souvent démonter le Logical Volume, transformer le système de fichier, puis le remonter:

# umount /mnt/profs
# lvextend  -L+1G /dev/vg-filer/profs
# resize2fs /dev/vg-filer/profs
# mount /mnt/profs

Réduction

L'opération est bien entendu comparable à l'extension, sauf qu'il faut prendre soin de réduire le système de fichier avant le Logical Volume, sous risque de perdre des données.

Attention: certains systèmes de fichiers peuvent êtres étendus, mais non réduits (XFS).

Migration

Comme les volumes logiques et physiques sont décorélés, il est possible de déplacer les éléments physiques (disques, etc) sans affecter les applications. En particulier, on peut forcer la migration de données d'un Physical Volume vers un autre.

Par exemple, en supposant qu'il y a assez de place dans le Volume Group auquel il participe, les données du disque sda peuvent être migrés libérant ainsi ce dernier:

# pvmove /dev/sda

On peut bien entendu désigner un endroit précis où migrer les données, etc.

Notez que si le processus est interommpu inopinément (crash, panne de courant), il peut être repris en invoquant simplement la commande pvmove. Il est toutefois possible de perdre quelques blocs (extents) au cours de la panne !

Snapshots

Peut être la fonction la plus sophistiquée, beaucoup n'utilisant LVM que pour cet aspect très demandé pour les sauvegardes. Ce mécanisme permet d'effectuer un "instantané" (une photo) d'un Logical Volume: on crée une "vue en lecture seule" qui nous permet d'explorer le volume comme s'il n'était plus modifié, bien que pour le reste du système il continue à fonctionner normalement.

Ce miracle repose sur la création d'un nouveau Logical Volume spécial:

# lvcreate -L1G -s -n profs-snapshot /dev/vg-filer/profs

Il est important de comprendre que ce volume consomme de l'espace physique (il vous faudra donc des Physical Volume libres): il va contenir l'ensemble des écritures effectuées depuis la création du snapshot (un journal). Ceci a une conséquence importante: si ce volume (snapshot) se remplit complètement, il est automatiquement désactivé, afin que le volume pris en photo puisse continuer à fonctionner normalement.

4. Pièges

lvm et device-mapper

Certaines documentations citent /proc/lvm, et il est possible que ce répertoire existe sur votre machine. Cependant celui-ci appartient au module noyau lvm (donc LVM1) et non au module device-mapper (LVM2).

ext2online

Il existe un patch plus ou moins sauvage pour permettre le redimensionnement "à chaud" des systèmes de fichier ext2/ext3: attention il est considéré approximatif et dangereux.

Note: le support du redimensionnement a été officiellement intégré dans ext3 à partir de Linux 2.6.17. Il est toujours fortement recommandé d'avoir un backup du système de fichier sous la main.

Stripping

Lors de l'assemblage des Physical Volume dans un Volume Group, il est possible de préciser comment l'adressage physique sera effectué:

  • soit continu: on passe de la fin d'un PV au début de l'autre
  • soit en "striping": on passe d'un PV à l'autre à chaque bloc suivant (similitude avec le RAID0)

Ce mode peut être utilisé avec la connaissance de la configuration précise des PV pour améliorer le débit d'accès au LV, par exemple en le répartissant sur des disques ayant des contrôleurs distincts (la bande passante de la connectique finale étant souvent le goulet d'étranglement).

Physical Extents

Ceci n'a pas été évoqué dans le cours, mais l'unité d'allocation des PV est le Physical Extent, à l'instar du block pour les disques. Il est souvent à 4Mo par défaut, ceci peut bien entendu avoir un effet d'arrondi inattendu lors de la création des LV.

Last modified 13 years ago Last modified on Feb 17, 2007, 5:02:34 PM

Attachments (1)

Download all attachments as: .zip