Imprimer cette page
HOWTO mettre en place LVM

 

Description


Logical Volume Manager (LVM) est une couche logicielle entre les périphériques physiques de stockage et les systèmes de fichiers. Il permet d’abstraire la configuration physique des unités de stockage présentes sur la machine (nombre, capacités) afin d’en présenter une vision logique, autorisant ainsi une gestion de l’espace de stockage à la fois plus souple et plus performante.

Pour bien comprendre LVM, il faut tout d’abord maîtriser sa terminologie :

- Chaque partition sur un disque dur physique est considérée comme un volume physique (Physical Volume, PV). Les disques durs pouvant être partitionnés en une seule partition, on peut, par abus de langage, considérer un DD partitionné de cette manière comme un volume physique (une telle méthode est d’ailleurs largement conseillée). On peut à tout moment rajouter de nouveaux volumes physiques dans le système LVM, en rajoutant de nouveaux disques durs ou en partionnant de l’espace précedemment innocupé sur les DD existants. Il est également évidemment possible d’en enlever.

- Un groupe de volumes (Volume Group, VG) est un ensemble de volumes physiques. Un groupe de volumes est l’équivalent logique d’un disque dur physique. Un VG peut donc être constitué de 1 ou plusieurs PV, ces PV étant idéalement situés sur des disques durs différents. On peut rajouter ou enlever assez facilement et à tout moment des volumes physiques à un groupe de volumes.

- Un volume logique (Logical Volume, LV) est l’équivalent d’une partition classique, à la différence que c’est un VG qui est partitionné en volumes logiques, et pas un disque dur physique. Chaque LV supportera directement un système de fichiers au choix. Il est possible de redimensionner facilement un volume logique (agrandir ou rétrecir). Du point de vue utilisateur, un volume logique est absolument semblable à une partion classique. Un LV dépend de 1 et 1 seul VG.

Il est très intéressant de constater que la plupart (toutes ?) les opérations permises par LVM (création/suppression/redimmensionnement de PV/VG/LV) peuvent se faire "à chaud" et sans interruption de service. Les principales limitations sont liées aux systèmes de fichiers utilisés (par exemple ext2/3 ne supportent pas le redimensionnement à chaud, il faut démonter les partitions pour les redimensionner. ReiserFS, XFS et JFS supportent cette fonctionnalité). Dans le même ordre d’idée, le branchement de disque dur à chaud n’est pas supporté par la norme IDE, mais l’est par les normes Serial ATA et SCSI.

Voici quelques exemples des possibilités offertes par LVM :

- "Collage" (stripping) de disques durs : 2 (ou plus) disques durs de tailles quelconques peuvent constituer un groupe de volumes (disque dur virtuel) d’une capacité égale à la somme des capacités de chaque disque dur. Il est ainsi plus simple de calculer son plan de partitionnement, sans avoir à tenir compte des capacités de chaque disque.

- Agrandissement de partitions : si une partition devient remplie au delà d’un seuil critique, il suffit de rajouter un volume physique (par exemple un nouveau disque dur), le rajouter dans le groupe de volumes puis agrandir le volume logique correspondant, qui utilisera ainsi la nouvelle place disponible. A part la configuration de LVM, il n’y a absolument rien à modifier sur le système.

- Renouvellement de disque durs : il est possible de remplacer un disque dur vieillissant par un nouveau, en demandant à LVM de vider un volume physique (en déplacant ses données sur les autres PV disponibles), puis en échangeant les disques durs. Tout cela se fait sans la moindre interruption de service.

LVM est disponible dans les versions 1 (fiable et éprouvée) et 2 (plus récente, mais considérée comme tout aussi fiable). Nous nous intéresserons ici à LVM 2.

Configuration du noyau


- Le noyau standard livré avec les distributions les plus populaires est en général compilé avec la fonctionnalité LVM. 
- Si vous compilez votre noyau vous-même, assurez-vous d’activer « Multiple devices driver support (RAID and LVM) » puis « Logical volume manager (LVM) support  ».

Utilitaires indispensables


- Les utilitaires en ligne de commande pour gérer LVM sont disponibles pour Debian dans les paquetages lvm-common et lvm10 et, pour Redhat, dans le paquetage lvm. Toutes les commandes relatives à LVM (excepté e2fsadm) commencent par « pv », « vg » ou « lv » selon qu’elles manipulent respectivement les volumes physiques, les groupes de volumes ou les volumes logiques.

Parmi les commandes installées, les plus importantes sont les suivantes :

- pvcreate : crée un PV à partir d’une partition
- pvdisplay : affiche les attributs d’un PV
- pvmove : déplace le contenu d’un PV vers un/des autre(s) (utile pour vider un disque)
- pvremove : supprime un PV
- pvscan : cherche les volumes physiques présents sur la machine

- vgcreate : crée un VG à partir d’un ou de plusieurs PV
- vgdisplay : affiche les informations sur les VG
- vgextend : ajoute des PV à un VG existant
- vgmknodes : recrée les fichiers spéciaux dans /dev (très utile en cas de boot sur le LiveCD Gentoo, pour retrouver ses partitions)
- vgreduce : supprime un/des PV à un VG
- vgscan : scanne les VG présents sur la machine

- lvcreate : crée un LV d’une taille donnée à partir d’un VG
- lvremove : supprime un LV
- lvresize : redimmensionne un LV

Toutes les commandes de LVM supportent les options —help, -v (verbose) et -t (test). Il est conseillé de toujours utiliser le mode verbeux (-v).

Exemples d’utilisation de LVM


Pour nos exemples, nous prendront une machine possédant les unités de stockages suivants :

- 1 disque dur de 60 Go (hda), partitionné en 3 partitions :

/dev/hda1 = 100 Mo => partition /boot (non gérée par LVM)
/dev/hda2 = 1,9 Go => partition / (non gérée par LVM)
/dev/hda3 = 58 Go => volume physique géré par LVM

- 1 disque dur de 80 Go (hdb), partitionné en 1 seule partition :

/dev/hdb1 = 80 Go => volume physique géré par LVM

Il est fortement déconseillé de créer plus d’une partition gérée par LVM sur le même disque dur physique. En effet, LVM n’ayant aucun moyen de savoir si 2 PV sont sur le même disque, les performances du système peuvent être dégradée en cas d’écriture simultanée sur 2 PV du même disque.

Création des volumes physiques


Pour commencer, nous initialisont les PV /dev/hda3 et /dev/hdb1 :

pvcreate -v /dev/hda3 /dev/hdb1

Les 2 partitions sont ainsi préparées pour LVM. Elles sont ainsi considérées comme des volumes physiques, et sont prêtes à être ajoutées dans un groupe de volumes.

Création du groupe de volumes


Pour créer un VG à partir des PV initialisées précédement :

vgcreate -v vg /dev/hda3 /dev/hdb1

Un VG doit avoir un nom (ici vg). Ce nom servira à identifier le groupe de volumes dans /dev (ici /dev/vg). C’est un répertoire qui contiendra un fichier spécial par volume logique créé ultérieurement.

# ls -ld /dev/vg/
drwx------ 2 root root 160 Aug 17 19:52 /dev/vg/

Autre méthode, en créant d’abord un VG à partir de hda3 puis en rajoutant hdb1 :

vgcreate vg /dev/hda3
vgextend vg /dev/hdb1

Avec l’une ou l’autre méthode, vous obtenez un VG regroupant les 2 PV hda3 et hdb1, d’une taille de 58 + 80 = 138 Go. Ce VG peut être considéré comme un disque dur virtuel d’une capacité de 138 Go. Il ne reste plus qu’à le partitionner, afin de créer les volumes logiques.

Il est possible de créer plusieurs VG sur la même machine, toutefois cela ne présente que peu d’intêret.

Création des volumes logiques


Nous découpons notre VG en 3 volumes logiques. Tout comme les VG, les LV doivent avoir un nom. Le plus simple est de donner le nom du point de montage auquel est destiné le volume logique. Ici, nous créerons home (32Go), var (8Go), et usr (8Go), pour les points de montage correspondants. Nous occuperons ainsi 32 + 8 + 8 = 48 Go sur notre disque virtuel de 138 Go, il restera donc 90 Go qui pourront être utilisés pour d’autres LV ou pour agrandir les LV existants. (Note : il est aussi intérressant de créer des LV pour /opt, /tmp, ainsi que pour le répertoire de travail de portage, et pour la partition de swap. Cependant, nous ne préoccuperons pas de ces LV ici)

# lvcreate -v -L32G -nhome vg
# lvcreate -v -L8G -nvar vg
# lvcreate -v -L8G -nusr vg

Une fois les volumes logiques créés, ils sont accessibles dans /dev/vg :

# ls -l /dev/vg/
total 0
lrwxrwxrwx 1 root root 19 Aug 17 19:52 home -> /dev/mapper/vg-home
lrwxrwxrwx 1 root root 18 Aug 17 19:52 usr -> /dev/mapper/vg-usr
lrwxrwxrwx 1 root root 18 Aug 17 19:52 var -> /dev/mapper/vg-var

Dans toutes les commandes de LVM, les LV sont désignés par leur chemin d’accès complet, par exemple /dev/vg/home.

Mise en place des systèmes de fichiers


Tout comme une partition classique, un volume logique doit absolument être formaté avant d’être utilisé. Tout les systèmes de fichiers sont possibles, y compris swap. Les systèmes de fichiers comme JFS, ReiserFS et XFS ont l’avantage de pouvoir être agrandis à chaud. En revanche, seul ReiserFS peut être rétreci (partition démontée).

ex : mkreiserfs /dev/vg/home pour formater la partition /home en ReiserFS

Le fichier /etc/fstab doit être modifié pour refléter l’organisation du disque :

/dev/hda2 / reiserfs noatime 0 0
/dev/hda1 /boot ext2 noatime 0 0
/dev/vg/swap none swap noatime 0 0 (on suppose le LV ’swap’ créé par LVM)
/dev/vg/usr /usr reiserfs noatime 0 0
/dev/vg/home /home reiserfs noatime 0 0
/dev/vg/var /var reiserfs noatime 0 0

Redimensionnement de PV/VG/LV


- Modifier la taille d’un PV revient à modifier la taille de la partition correspondante. Cela est possible mais délicat. Ce genre de manipulation est à éviter.
- Modifier la taille d’un VG revient à rajouter ou enlever des PV. Cela se fait avec les commandes vgextend et vgreduce :

# vgextend -v vg
# vgreduce -v vg

- Modifier la taille d’un LV revient à allouer plus ou moins de place à ce LV au sein du VG dont il dépend. Celà se fait avec la commande lvresize (ici augmentation de 32 Go de la taille de home, puis réduction de 16 Go) :

# lvresize -v -L+32G /dev/vg/home
# lvresize -v -L-16G /dev/vg/home

Attention, le fait qu’un LV soit agrandi ne signifie pas que le système de fichiers correspondant soit agrandi également. Il faut pour cela utiliser les commandes spécifiques au système de fichier employé, après avoir agrandi le LV :

- ext2/3 : resize2fs (package sys-fs/e2fsprogs, la partition doit être démontée pour être agrandie)
- ReiserFS : resize_reiserfs [-f] (package sys-fs/reiserfsprogs, la partition peut être démontée ou montée, dans ce cas utilisez l’option -f)
- XFS : xfs_growfs (package sys-fs/xfsprogs, la partition doit être montée, et c’est le point de montage qui est désigné)

De la même manière, il est nécessaire de réduire le système de fichiers avant de réduire la taille du LV. Seul ReiserFS et ext2/3 supportent d’être rétrécis.

- ext2/3 : resize2fs , la partition doit être démontée
- ReiserFS : resize_reiserfs -s- , la partition doit être démontée



Campus Numérique Francophone de Lomé
URL de l'article: http://tg.refer.org/HOWTO-mettre-en-place-LVM