LVM

Portrait de ctxnop

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 :
  1. desktop ~ # cd /usr/src

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 :
  1. desktop src # uname -r
  2. 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.
  1. 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 :
  1. 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 :
  1. 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 :
  1. desktop ~# vgchange -a y

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.
  1. desktop ~ # fdisk -l /dev/sda
  2.  
  3. Disk /dev/sda: 500.1 GB, 500106780160 bytes
  4. 255 heads, 63 sectors/track, 60801 cylinders
  5. Units = cylinders of 16065 * 512 = 8225280 bytes
  6. Disk identifier: 0x06a606a6
  7.  
  8.    Device Boot      Start         End      Blocks   Id  System
  9. /dev/sda1               1          13      104391   83  Linux
  10. /dev/sda2              14        1230     9775552+  83  Linux
  11. /dev/sda3            1231        2204     7823655   82  Linux swap / Solaris
  12. /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 :
  1. desktop ~ # fdisk /dev/sda
  2.  
  3. The number of cylinders for this disk is set to 60801.
  4. There is nothing wrong with that, but this is larger than 1024,
  5. and could in certain setups cause problems with:
  6. 1) software that runs at boot time (e.g., old versions of LILO)
  7. 2) booting and partitioning software from other OSs
  8.    (e.g., DOS FDISK, OS/2 FDISK)
  9.  
  10. Command (m for help): t
  11. Partition number (1-4): 4
  12. Hex code (type L to list codes): L
  13.  
  14.  0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
  15.  1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
  16.  2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
  17.  3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
  18.  4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
  19.  5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
  20.  6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
  21.  7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
  22.  8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
  23.  9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
  24.  a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
  25.  b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
  26.  c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
  27.  e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
  28.  f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
  29. 10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
  30. 11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
  31. 12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
  32. 14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
  33. 16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
  34. 17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
  35. 18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
  36. 1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
  37. 1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
  38. 1e  Hidden W95 FAT1
  39. 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 :
  1. desktop ~ # pvcreate /dev/sda4
  2. No physical volume label read from /dev/sda4
  3. 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 :
  1. desktop ~ # vgcreate vg /dev/sda4
  2. 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 :
  1. desktop ~ # vgextend vg /dev/sdb1
  2. 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 :
  1. desktop ~ # lvcreate -L10G -nhome  vg
  2. 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 :
  1. desktop ~ # mkfs -t ext4 /dev/vg/home
  2. 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

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <br> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <h2> <h3> <img> <pre> <p>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <asm>, <bash>, <c>, <cil>, <cmake>, <cpp>, <cppqt>, <csharp>, <diff>, <drupal5>, <drupal6>, <ini>, <java>, <javascript>, <latex>, <lisp>, <lua>, <make>, <mysql>, <perl>, <php>, <plsql>, <powershell>, <prolog>, <python>, <reg>, <ruby>, <sql>, <tcl>, <tsql>, <vb>, <vbnet>, <xml>. The supported tag styles are: <foo>, [foo], [[foo]].

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet de bloquer les robots et l'envoie automatisé de spam.