[[lvm]]
Piste: » lvm
LVM, une autre manière de partitionner
Introduction
LVM sont les initiales de Logical Volume Manager ou gestionnaire de volumes logiques en bon français. L’utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques. C’est un système beaucoup plus souple, qui permet par exemple de diminuer la taille d’un système de fichier pour pouvoir en agrandir un autre, sans se préoccuper de leur emplacement sur le disque.
Avantages de LVM
- Il n’y a pas de limitations « étranges » comme avec les partitions (primaire, étendue, etc.).
- On ne se préoccupe plus de l’emplacement exact des données.
- On peut conserver quelques giga-octets de libre pour pouvoir les ajouter n’importe où et n’importe quand.
- Les opérations de redimensionnement deviennent quasiment sans risques, contrairement au redimensionnement des partitions.
Inconvénients de LVM
- Une fois que LVM a « pris le contrôle » d’un disque ou d’une partition, Windows ne pourra plus y accéder (aucun pilote LVM sous Windows à ma connaissance).
- Toute l’administration de LVM se fait en ligne de commande (ce qui pour moi est un avantage mais bon
).
But de ce document
Découvrir le principe de LVM, créer un ou deux volumes logiques sans modifier son système existant.
La « conversion » de son système pour le migrer entièrement vers LVM ne fait donc pas partie de ce document pour l’instant, mais au moins, vous aurez les bases pour le faire.
Pré-requis
- Un disque ou une partition libre.
- Ne pas être allergique à la ligne de commande.
- Avoir un peu de temps et l’esprit grand ouvert.

Installation
Installez le paquet « lvm2 ».
Voilà… Ok j’avoue, c’était la partie la plus facile. Maintenant, avant d’utiliser réellement LVM, il faut comprendre un peu de vocabulaire. Ne vous inquiétez pas si tout n’est pas encore très clair, ça viendra au fur et à mesure, en passant à la pratique.
Notions et vocabulaire
Volume physique
Un volume physique ou « PV » pour « physical volume » est tout simplement un disque ou une partition. Bref, c’est un espace de stockage bien réel (autrement dit un périphérique de la forme /dev/hdc2 par exemple), que l’on va confier à LVM. Bien évidement, tout ce qui était présent sur la partition sera effacé.
Groupe de volume
Un groupe de volumes ou « VG » pour « volume group » est, comme son nom l’indique, un ensemble de volumes physiques. On a donc un ou plusieurs volumes physiques dans un groupe de volumes, et pour utiliser LVM, il faut obligatoirement au moins un groupe de volumes. Habituellement, sur les gros serveurs, on essaye de regrouper les disques en fonction de leur caractéristiques (capacités, performances, etc.). Pour un particulier, le fait de mettre plusieurs disques dans un même groupe de volume peut permettre « d’étaler » un système de fichiers sur plusieurs disques, et d’avoir donc /home par exemple qui utiliserait 2 disques. Une telle configuration est tout de même assez dangereuse en cas de perte d’un disque… De plus, cela n’apporterait aucun gain de performance contrairement à du RAID-0 par exemple.
Volume logique
Un volume logique ou « LV » pour « logical volume » est ce que nous allons utiliser au final. Un volume logique est un espace « quelque part dans un groupe de volume » où l’on peut mettre un système de fichiers. C’est donc ce qui remplace les partitions. On peut donc utiliser un volume logique pour mettre la mémoire virtuelle, un pour /home, etc. Peut-on mettre / sur un volume logique ? Oui et non. Techniquement, oui, ça fonctionne maintenant à peu près correctement. Mais Grub peut se montrer capricieux dans certaines configurations. Donc, à moins d’utiliser Lilo, je vous conseille vivement d’éviter les ennuis inutiles pour commencer et de ne pas tenter tout de suite d’installer votre système avec un / sur un volume logique. Plus tard peut-être ?
Création
Bien, passons à la pratique !
Puisque nous allons passer toutes les commandes en tant que root, je vous conseille de passer root « une bonne fois pour toute » :
sudo -s
Voilà, maintenant que votre prompt est un « # ». Cela m’évitera (et vous évitera) d’avoir à mettre sudo devant chaque commande.
Bonne nouvelle, les commandes LVM sont extrêmement simples à utiliser et elles intègrent toutes une aide en ligne très bien conçue, claire, courte, mais suffisante. De plus, leur nom se « devine » assez facilement :
- toutes les commandes agissant sur les volumes physiques commencent par pv ;
- toutes les commandes agissant sur les groupes de volumes commencent par vg ;
- toutes les commandes agissant sur les volumes logiques commencent par lv.
La première chose à faire est de créer un disque physique, en donnant une partition à LVM. Essayez la commande suivante pour connaitre la liste des commandes disponibles pour les volumes physiques :
man -k pv
Parmi toutes les commandes renvoyées, on remarque « pvcreate », ça doit être celle-là…
Cette astuce fonctionne avec toutes les commandes LVM et permet de les retrouver facilement.
Disque physique
J’utilise /dev/hdc2 pour l’exemple, adaptez à votre cas ! Toutes les données de cette partition seront effacées !
pvcreate /dev/hdc2
Si tout s’est bien passé, aucun message d’erreur n’apparait.
Si vous obtenez le message « No program "pvcreate" found for your current version of LVM. », c’est que le service LVM n’est pas actif. Lancez-le avec la commande suivante :
/etc/init.d/lvm start
Je veux utiliser la totalité d’un disque, hdc ou sda par exemple, puis-je fairepvcreate /dev/hdc(sans numéro de partition) ?
Oui et non… Techniquement, oui, pas de problème. Seulement, le fait que votre disque ne soit même plus partitionné pourrait vous poser problème un jour ou l’autre. Je vous conseille plutôt de faire une seule partition (primaire) utilisant tout le disque dur. Ensuite, lancez la commande en utilisant cette partition (pvcreate /dev/hdc1).
Groupe de volume
Il existe de nombreuses options lors de la création d’un groupe de volume… Mais continuons de faire au plus simple. Le seul paramètre indispensable sera de lui donner un nom, nous utiliserons les valeurs par défaut pour tout le reste. Pour une raison que j’expliquerai par la suite, donnons-lui un nom très court (2 ou 3 caractères). Par exemple : « mvg » pour « mon vg ».
Pour connaitre la syntaxe de la commande vgcreate (comme pour toutes les autres commandes LVM), tapez simplement son nom :
vgcreate
La syntaxe est donc :
vgcreate VolumeGroupName PhysicalVolume [optionnellement d’autres PhysicalVolume]
Allons-y :
vgcreate mvg /dev/hdc2
Si tout se passe bien, vous avez maintenant un groupe de volume, contenant un disque physique. Vous pouvez obtenir d’autres informations sur ce groupe de volume en tapant :
vgdisplay
Volume logique
Nous y voilà… Cette fois-ci, nous allons vraiment créer un espace que l’on pourra ensuite « formater » en ext3 par exemple.
Comme précédemment, le plus simple est de commencer par jeter un œil sur la syntaxe de la commande :
lvcreate
Les deux options vraiment importantes sont « -n » pour son nom, et « -L » pour sa taille. Le paramètre principal est « OriginalLogicalVolume ». Il s’agit peut-être d’une erreur dans le manuel (man). En fait, ce qu’il faut indiquer c’est bien le groupe de volume dans lequel nous allons créer le volume logique. Comme c’est un test, je fais un petit volume, 1 Gio seulement :
lvcreate -n toto -L 1g mvg
Système de fichiers
Avec les partitions, on avait des noms ressemblant à /dev/hda3, etc. Avec LVM, on utilise aussi des périphériques dans /dev, mais le chemin est de la forme /dev/nom_du_vg/nom_du_lv. Autrement dit, puisqu’on a décidé d’appeler notre volume logique « toto », le nom de périphérique de ce volume logique est /dev/mvg/toto. À partir de maintenant, /dev/mvg/toto peut être utilisé dans toutes les situations et avec toutes les commandes qui attendent quelque chose de la forme /dev/… Par exemple :
mkfs -t ext3 /dev/mvg/toto mkdir /essai mount /dev/mvg/toto /essai df -h
Et normalement, /dev/mvg/toto devrait être monté sur /essai. Regardez bien la ligne correspondante. Si on avait choisi un nom de VG ou de LV plus long, la sortie de df aurait été modifiée, car le nom aurait « touché » les valeurs… On aurait été obligé de passer des lignes et l’affichage aurait été plus difficile à lire. Techniquement, choisir des noms « longs » pour les VG et les LV ne pose aucun problème, mais c’est l’affichage qui sera parfois délicat. Pour cette raison uniquement, je préconise de se limiter à 7 caractères au total (donc par exemple 3 pour le vg et 4 pour le lv, ou 2 et 5, comme vous voulez).
Pourquoi est-il écrit/dev/mapper/mvg-totoet non/dev/mvg/toto?
Avec LVM en version 1, c’est bien /dev/mvg/toto qui aurait été affiché. Depuis la version 2, LVM utilise le périphérique mapper, ce qui permet pas mal de choses (comme crypter les volumes logiques, etc.). Pour simplifier, disons que ces deux notations « /dev/mvg/toto » et « /dev/mapper/mvg-toto » sont synonymes. Dans la pratique, je vous conseille quand même d’utiliser plutôt la forme « /dev/mvg/toto », certaines commandes ne passeront pas autrement.
Suppression
Rien de plus simple :
umount /essai lvremove /dev/mvg/toto
Attention, une fois un volume logique effacé, il est totalement impossible de récupérer les données qu’il contenait.
Redimensionnement
Il est très facile d’augmenter ou de diminuer la taille d’un volume logique. Mais attention, la taille d’un LV n’a pas de lien direct avec la taille de ce qu’il contient (swap ou système de fichier). Le LV est une boite, le système de fichier est le contenu de la boite. Augmenter la taille de la boîte sans augmenter la taille du contenu ne pose pas de problème, mais l’inverse…
Agrandissement
Dans l'ordre il faut démonter le système de fichier, augmenter la taille du volume logique (la "boite"), vérifier que tout est OK, puis augmenter la taille du système de fichier. Il ne reste plus qu'a le remonter.
Voila donc un exemple :
umount /essai fsck /dev/hdc3 lvresize -L 2g /dev/mvg/toto resize2fs /dev/mvg/toto mount /dev/mvg/toto /essai
Notez bien que :
- Si jamais vous indiquez une taille (ici 2 Gio) inférieure à celle de départ, vous détruirez le système de fichier (toute la partie qui ne « rentrera plus dans la boite dont vous venez de diminuer la taille ». Donc, indiquez bien une taille supérieure à celle qu'elle avait. (Vous pouvez aussi utiliser la notion «
+ng» cf. le man) - J'utilise resize2fs car le système de fichier est en ext2 (ou 3), il faudrait utiliser un autre programme pour reiserfs ou autre.
- Si vous obtenez un message d'erreur vous demander de refaire un fsck (ou un e2fsck alors que vous l'avez fait et qu'il n'y a pas d'erreur, il est possible de forcer le redimensionnement (option « -f »). N'utilisez pas cette option dans d'autres circonstances...
- Tous les systèmes de fichiers ne sont pas extensibles de cette façon !
- Certains supportent d'être agrandis « à chaud » sans avoir besoin d'être démontés, mais je vous conseille vivement d'éviter de le faire...
Rétrécissement
Diminuer la taille d'un système de fichier est un peu plus délicat. En effet, si jamais on commet l'erreur de diminuer la taille de la "boite" (le volume logique) avant de réduire la taille du contenu (le système de fichier lui même) alors on détruit son système de fichier... pareil si on réduit trop la taille du volume logique.
Pour éviter tout risque, je conseille d'utiliser la méthode suivante (un peu plus longue que la normale, mais beaucoup plus fiable) :
- Réduire la taille du système de fichier plus que nécessaire
- Réduire la taille du volume logique pour lui donner exactement la nouvelle taille souhaitée.
- Agrandir le système de fichier pour qu'il occupe tout l'espace disponible.
De cette façon, le risque d'erreur est beaucoup plus faible.
Attention, tous les systèmes de fichiers ne peuvent pas être "réduits". Pour ext3 et reiserfs, cela se fait très bien. Voila un exemple avec reiserfs...
df -h | grep ca /dev/mapper/svg-ca 512M 230M 283M 45% /home/ca
Dans cet exemple, le volume "ca", se trouve dans le groupe de volume svg. Sur ce volume logique existe un système de fichier en reiserfs d'une taille de 512 Mo. Or, je n'utilise que 230 Mo. De plus, je sais que je n'ajouterai jamais rien dans ce volume. Je désire donc diminuer sa taille à 256 Mo (pour se laisser une marge de sécurité, et parce que ca fait un compte rond ;) Je commence par démonter le système de fichier :
umount /home/ca
Ensuite je vais donc diminuer la taille du système de fichier, plus que nécessaire. Plutôt que de retirer 256 Mo, je vais donc en retirer 258. Je peux le faire, car il reste 283 Mo de libre... Evidement, retirer plus de place qu'il n'en reste serait suicidaire...
resize_reiserfs -s -258M /dev/svg/ca
ATTENTION : Si vous êtes en ext3, on ne peut pas indiquer la quantité d'espace à enlever, il faut donner la taille finale voulue (512-258). la bonne commande aurait été :
resize2fs -p /dev/svg/ca 254M
Maintenant que le système de fichier à diminué, il faut donner au volume logique sa nouvelle taille, 256 Mo au lieu de 512 :
lvresize -L -256M /dev/svg/ca WARNING: Reducing active logical volume to 256.00 MB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce ca? [y/n]: y Reducing logical volume ca to 256.00 MB
Plus qu'une derniere étape, on indique au système de fichier qu'il peut s'étendre automatiquement pour prendre tout l'espace disponible. Il devrait donc pouvoir grandir de 2 Mo. Il trouvera tout seul la taille exacte en nombre de bloc etc... On n'a pas pris le risque de faire une erreur en le réduisant "pile poile" de la même taille que le volume logique, car la moindre erreur aurait pu corrompre le système de fichier à quelques blocs prés.
resize_reiserfs /dev/svg/ca
ou, si vous utilisez ext3 :
resize2fs /dev/svg/ca
Il ne reste plus qu'a remonter le système de fichier :
mount /dev/svg/ca /home/ca df -h | grep ca /dev/mapper/svg-ca 256M 230M 27M 90% /home/ca
C'est gagné... Le système de fichier fait maintenant 256 Mo, et nous avons toujours nos 230 Mo de données à l'intérieur. Conclusion : Jouer avec la taille des volumes logiques fonctionne très bien, il faut juste prendre son temps et ne pas faire n'importe quoi :)
Mieux comprendre ou aller plus loin
Notion d’« extend »
Un extend, ou « physical extend » aussi appelé « PE », est un tout petit morceau d’un groupe de volumes. En fait, au moment de la création d’un groupe de volumes, le ou les disques sont découpés en morceaux de quelques Mio (4 Mio par défaut). Lorsqu’on crée un volume logique, LVM va utiliser autant de PE que nécessaires. La taille d’un volume logique sera donc toujours un multiple de la taille d’un PE.
LVM et RAID
Il est tout à fait possible d’utiliser LVM sur un volume en RAID logiciel. Une fois que le RAID a été créé (/dev/md0 par exemple), il suffit de le donner à LVM, avec la commande habituelle :
pvcreate /dev/md0
Bien qu'il soit possible de partitionner le raid /dev/md0 comme n'importe quel disque ordinaire (ce qui permet d'obtenir des devices de la forme /dev/md0p1, /dev/md0p2 etc), je vous le déconseille vivement. En effet le but est bien d'utiliser lvm pour découper l'espace, et plus l'ancienne notion de partition physique. De plus, l'utilisation de ces partitions nécessiterait des changements dans la configuration de lvm (filter dans /etc/lvm/lvm.conf). Bref, C'est se donner du mal pour pas grand chose.
Donc comme le montre la commande plus haut, le mieux est de donner l'intégralité du raid. Un exemple de création de RAID est donné sur la page ad hoc.
Vous pouvez aussi aller voir le tutoriel installation_raid_lvm
Références
- Article de Léa Linux un peu vieux (LVM 1) mais plus complet que le mien…
- Article de developpez.com excellent aussi (attention, sauf la partie réduction !)
Contributeurs : Hoper, merci à Ner0lph et à tous les autres correcteurs :)