Dans un précédent article je vous parlais de ma mésaventure et j'y ai abordé LVM.
Il est maintenant temps de voir cela un peu plus en profondeur.
1) Qu'est-ce que LVM
Avant de commencer il est évident qu'il faut définir ce qu'est LVM. Il s'agit d'une suite logicielle (plusieurs commandes et un module noyau) qui permettent de gérer ses disques dur de manière plus souple. Les disques dur seront utilisé par LVM qui exposera ensuite au système des disques logiques plutôt que physiques. Vous trouverez plus d'informations sur la page de
wikipedia.
2) Le partitionnement classique
Dans un cas classique, sans LVM, un disque dur peut être découpé en 4 partitions. Ce nombre est limité parce que la table des partition est écrite en tout début de disque dans un espace très limité. On a trouvé une parade à cette limite, les partitions étendues. En fait, pour faire simple, il s'agit d'une partition qui sera considérée comme un nouveau disque dur et donc possédant sa propre table de partition et donc que l'on peu découper tout comme un vrai disque. On peux donc créer bien plus que 4 partitions.
Le partitionnement classique est très rigide. En effet, vous devez a l'avance prévoir la taille de vos partitions. Admettons un disque de 100Go, vous en prenez 25Go pour la partition racine, 5Go pour la swap et le reste (donc 70Go) pour /home.
Au début tout fonctionne comme sur des roulettes. Mais très vite, vous vous rendez-compte qu'il aurait été judicieux de mettre plus d'espace pour la racine. En effet, vous êtes un joueurs pas le seul utilisateur de la machine, donc vous installez les jeux dans /usr/local/games, plutôt que dans votre home, afin que chaque utilisateur puisse jouer. Seulement voilà, votre World of Wacraft pèse à lui tout seul plus de 14Go. Conclusion, vous allez manquer de place.
Dans un cas comme celui là, vous n'avez pas grand choix, vous ne pouvez redimensionner facilement vos partitions car pour ce faire il faut d'abord réduire une autre partition, et ce en empiétant sur son début et non sa fin. Une des seules solutions sans risque de perdre des données est d'avoir un autre disque aussi grand ou plus grand que l'actuel, y envoyer le contenu complet de chacune des partitions (avec préservation des droits et sans dé-référencer les liens), puis refaire complètement le partitionnement du disque avant de ramener les données.
C'est long, fastidieux, il faut avoir suffisamment d'espace pour faire un backup complet d'un disque et le risque d'erreur de manipulation est grand (et donc le risque de perte de données, voir du système si cela se produit avec votre disque contenant la partition racine). C'est la qu'intervient LVM. En effet, avec lui vous auriez pu ajouter de l'espace libre a votre partition en quelques lignes de commandes.
3) Installer LVM
Pour installer LVM il faut tout d'abord configurer son kernel pour le rendre compatible. Si votre distribution est un binaire (Ubuntu, Debian, Fedora, Mandriva, ...) vous devez d'abord installer le paquet correspondant aux sources utilisées pour votre kernel. Vous avez également la possibilité de les télécharger sur
www.kernel.org mais je vous le déconseil. En effet, les distributions modifient souvent le kernel qu'elles utilisent, donc se servir des sources de ce site c'est se passer des modifications spécifiques à votre distribution et donc risquer des problèmes. Votre distribution est en tout les cas tenue de vous fournir les sources modifiées du kernel qu'elles utilisent, donc ne tentez pas le diable.
Une fois les sources installées, on se rend dans le répertoire de celles-ci :
Dans ce répertoire vous trouverez des sous répertoires portant la version du kernel qu'elle produiront. Le nom exacte de ces répertoires dépend de la distribution. Généralement, les sources que vous installez correspondent au kernel que vous êtes en train d'utiliser en ce moment même. Pour en connaitre la version, utilisez la commande :
desktop src # uname -r
2.6.31-gentoo-r2
Allez dans le répertoire du kernel et utilisez votre configurateur préféré, dans mon cas j'utilise menuconfig.
desktop linux-2.6.31-gentoo-r2 # make menuconfig
Maintenant, il vous faut activer le support de LVM. Pour ce faire, il faut inclure dans le kernel ou en module le Device-mapper support, accessible une fois l'option Multiple devices driver support (RAID and LVM) activée.

Personnellement, je préfère inclure directement dans le noyau ce genre d'éléments. Cela évite d'avoir besoin d'un initramfs ou de configurer le module pour qu'il soit chargé automatiquement. Évidemment, c'est moins souple qu'en module puisque celui-ci ne peux pas être déchargé, mais franchement, l'utilité de décharger un module, sans lequel vous ne pourrez plus utiliser la grande majorité de vos partitions, me paraît franchement limitée.
Une fois le kernel configuré, il ne vous reste plus qu'a le compiler et l'installer. un redémarrage est nécessaire pour prendre en compte ce nouveau kernel, sauf si vous avez activé ces deux options en modules, auquel cas vous avez juste besoin de l'activer.
Ensuite, il faut installer la suite logicielle de LVM, c'est à dire les commandes spécifiques. Elles sont fournies par un paquet généralement nommé lvm2. Utilisez votre gestionnaire de paquet pour l'installer.
4) Configuration
La première chose à faire est de configurer lvm via /etc/lvm/lvm.conf.
Dans ce fichier il y a une ligne filter qui ressemble à cela :
filter = [ "r|/dev/nbd.*|", "a/.*/" ]
Cette ligne filtre les périphérique que LVM va scanner via l'utilisation de certaines commandes destinées à recenser les partitions LVM. Comme on peux le voir cette option est un tableau de 2
expressions rationnelles indiquant quels sont les périphériques à rejeter ou a accepter dans le scan. L'expression débutant par r| est celle des rejets tandis que celle débutant par a| est celle des acceptations. Je vous conseil de configurer cette ligne de façon à ce qu'elle ne s'occupe que de vos disques durs contenants au moins une partition LVM. Par exemple, moi je possède 3 disques dur, seuls les deux premiers ont au moins une partition LVM, ma ligne filter est donc la suivante :
filter = [ "a|/dev/sd[ab]|", "r/.*/" ]
De cette manière, seul /dev/sda et /dev/sdb seront scannés par LVM. Une fois la configuration effectuée, et chaque fois que vous changerez le nombre de partitions LVM disponibles, lancez cette commande afin qu'elles soient prises en compte :
5) Fonctionnement de LVM
Avant de continuer, étudions un peu le fonctionnement de LVM. Le but de LVM est de créer un espace logique partitionnable a souhait sans tenir compte de l'organisation physique des disques dur. La première fonction de LVM est donc de réunir les disques dur au sein d'un groupe afin d'agréger leurs espaces. On parle alors de VG (Volume Group).
On peu donc agréger plusieurs volumes physiques (PV, partitions de type LVM), au sein d'un seul VG. On peux créer plusieurs groupes de volume, mais les volumes physiques ne peuvent appartenir qu'a un seul groupe. Généralement, on ne créer qu'un seul groupe de toute façon.
Une fois les volumes physiques ajoutés à un groupe, on dispose alors d'un espace logique dans lequel on peux créer des partitions. Celles-ci seront alors exposées au kernel comme n'importe quelle autre partition sous la forme d'un fichier dans /dev. On parle de volume logique (LV) car ces partitions sont vues comme des partitions normales, alors qu'elles n'ont pas de représentation physique sur le disque. En effet, un volume logique est créé dans un groupe de volume, celui-ci contenant différeent volumes physiques, conclusion, un LV peut être répartit sur plusieurs partitions physiques. Imaginons, nous avons deux disques dur de 25go chacun. On créer sur chaque disque une seule et unique partition de type LVM, ces partitions sont donc des volumes physiques (PV). On les réunit dans un groupe (VG), on peux maintenant créer une partition logique (LV) de 50Go qui prendra donc l'espace complet des deux disques dur. Cette partition peut être formatée en ext2/3/4 ou n'importe quel autre système de fichier, puis montée et utilisée de manière transparente.
Le VG peux donc être vu comme un disque dur classique, sauf qu'il a une taille variable et qu'on peux créer autant de partitions qu'on le souhaite.
6) Création d'un volume physique
Comme on vient de le voir, pour disposer d'un groupe de volume, il faut avoir un volume physique à mettre dedans.
Tout d'abord, on partitionne un disque dur pour y créer une partition de type LVM via fdisk.
desktop ~ # fdisk -l /dev/sda
Disk /dev/sda: 500.1 GB, 500106780160 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x06a606a6
Device Boot Start End Blocks Id System
/dev/sda1 1 13 104391 83 Linux
/dev/sda2 14 1230 9775552+ 83 Linux
/dev/sda3 1231 2204 7823655 82 Linux swap / Solaris
/dev/sda4 2205 60801 470680402+ 8e Linux LVM
Pour obtenir cela, il faut créer la partition avec la commande n, puis il faut modifier son type avec la commande t. Le code d'une partition LVM est 8e comme indiqué dans la liste :
desktop ~ # fdisk /dev/sda
The number of cylinders for this disk is set to 60801.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): t
Partition number (1-4): 4
Hex code (type L to list codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Hex code (type L to list codes): 8e
Une fois la partition créée, il faut préparer la partition pour qu'elle soit utilisable en volume physique :
desktop ~ # pvcreate /dev/sda4
No physical volume label read from /dev/sda4
Physical volume "/dev/sda4" successfully created
7) Création d'un groupe de volume
Maintenant que vous disposez d'au moins un PV, il faut créer un groupe de volume. Pour ce faire, il suffit d'utiliser la commande suivante :
desktop ~ # vgcreate vg /dev/sda4
Volume group "vg" successfully created
Ceci créé un groupe nommé vg avec le volume physique /dev/sda4. Si vous avez déjà plusieurs volumes physiques, vous pouvez les ajouter à ce groupe de la manière suivante :
desktop ~ # vgextend vg /dev/sdb1
Volume group "vg" successfully extended
8) Création de volumes logiques
Il ne reste plus qu'à créer des volumes logiques. C'est on ne peux plus simple :
desktop ~ # lvcreate -L10G -nhome vg
Logical volume "home" created
Voila, vous disposez maintenant d'une partition de 10Go dans votre VG, elle est nommée home, et comme votre VG se nomme vg, le device correspondant est /dev/[u]vg[/u]/[u]home[/u].
Vous pouvez donc le formater, par exemple en ext4, et le monter :
desktop ~ # mkfs -t ext4 /dev/vg/home
desktop ~ # mount /dev/vg/home /home
Et voila, le tour est joué.
9) Les différentes commandes
Volumes physiques
pvck - Vérifie les métadonnées d'un volume physique pour s'assurer de son bon état.
pvdisplay - Affiche les attributs des volumes physiques.
pvremove - Retire un volume physique du groupe de volume, les données seront déplacée sur l'espace disponible dans le groupe de volume.
pvs - Affiche des informations formatées sur les volumes physiques.
pvchange - Change des attributs des volumes physiques.
pvcreate - Créer un volume physique.
pvmove - Permet de déplacer les données d'un volume physique à un autre.
pvresize - Redimensionne un volume physique si la partition correspondante à été redimensionnée.
pvscan - Recherche les volumes physiques sur tous les disques.
Groupes de volume
vgcfgbackup - Sauvegarde l'organisation du groupe de volume.
vgconvert - Convertit un groupe de volume d'un format à un autre (LVM1, LVM2)
vgextend - Étend un groupe de volume avec un volume physique supplémentaire.
vgmknodes - Recréer les fichiers devices correspondant à la structure des groupes de volumes.
vgs - Affiche des informations formatées sur les groupes de volumes.
vgcfgrestore - Restaure l'organisation du groupe de volume.
vgcreate - Créer un groupe de volume.
vgimport - Importe des groupes de volumes exportés.
vgreduce - Réduit un groupe de volume en retirant des volumes physiques.
vgscan - Recherche les groupes de volumes sur tous les disques.
vgchange - Change les attributs des groupes de volume.
vgdisplay - Affiche les attributs des groupes de volume.
vgimportclone - Importe et renomme une duplication de groupe de volume.
vgremove - Supprime un groupe de volume.
vgsplit - Coupe un groupe de volume en deux.
vgck - Vérifie l'intégrité d'un groupe de volume.
vgexport - Exporte un groupe de volume.
vgmerge - Fusionne deux groupes de volume.
vgrename - Renomme un groupe de volume.
Volumes logiques
lvchange - Change les attributs d'un volume logique.
lvdisplay - Affiche les attributs d'un volume logique.
lvmdump - Créer un dump d'information dans un but de diagnostique.
lvreduce - Réduit la taille d'un volume logique.
lvresize - Redimensionne un volume logique.
lvconvert - Convertit un volume logique.
lvextend - Étend la taille d'un volume logique.
lvremove - Supprime un volume logique.
lvs - Affiche des informations formatées à propos des volumes logiques.
lvcreate - Créer un volume logique.
lvmdiskscan - Cherche tous les devices visibles par LVM2.
lvrename - Renomme un volume logique.
lvscan - Recherche des volumes logiques sur tous les disques.
10) Recommendations
Pour clore cet article, il est bon de faire quelques recommendations.
Il est déconseillé de mettre sur une partition LVM les répertoires suivants : /etc, /lib, /mnt, /proc, /sbin, /dev, /boot et /root.
De cette manière, si votre LVM ne fonctionne plus pour une raison ou pour une autre, votre système sera toujours utilisable et donc vous pourrez rectifier le tir.
De plus, bien que booter sur une partition LVM n'est pas impossible, cela demande des manipulation supplémentaires dont on peu se demander l'utilité pour une telle partition. Elle n'a en effet pas vocation à avoir une grande taille, être déplacée, ou même voir sont contenu modifié régulièrement.
Commentaires
Poster un nouveau commentaire