preload preload preload preload

LVM : étendre un Volume Groupe par ajout d'un nouveau disque dur


Le vendredi 07 décembre 2012 par madpellzo Système, Linux, LVM Aucun commentaire
Cet article va vous expliquer comment étendre une partition montée au dessous de LVM (un logical volume) par extension du volume group sur lequel il est posé, par ajout d'un disque dur supplémentaire (et oui, LVM est en fait un jeu de poupée russe !)

LVM (pour Logical Volume Manager) est un formidable outil de gestion de l'espace de stockage. LVM est un véritable jeu de poupée russe.
Commençons par un peu de vocabulaire. Dans l'ordre, de la couche la plus basse (les disques durs) vers la couche la plus haute : le file système.
- Vos disques durs câblé dans votre serveur ou dans un SAN
- Physical Volume : ce sont vos disques durs ou un volume RAID ou un volume provenant d'un SAN
- Volume Group : concaténation des volumes physiques
- Logical Volume : découpage des volumes groupes
- File system : système de fichier posé au dessus des volumes groupes

Rentrons dans le vif du sujet : on a un disque dur déjà en place avec une distribution Linux qui tourne dessus :
- un physical volume : /dev/vda5
- un volume groupe qui prend tout ce physical volume : /dev/vg00
- un volume logique sur leqquel l'OS est installé appartenant /dev/vg00 : /dev/vg00/root sur lequel est montée la partition root (le /)
On souhaite étendre / par ajout d'un nouveau disque dur. On éteint donc la machine, on rajout le nouveau disque et on redémarre la machine. On se retrouve alors avec un nouveau disque : /dev/vdb On va commencé par créer une partition LVM qui va occuper tout ce nouveau disque :

# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x3657f1c2.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

On affiche la table de pratition (vide évidemment) :

Command (m for help): p

Disk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3657f1c2

   Device Boot      Start         End      Blocks   Id  System

On crée une nouvelle parition

Command (m for help): n

On choisit une partition type "primary"

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

On lui donne un numéro (c'est la première donc "1"):

Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039

On va "typer" la partition, c'est a dire que l'on va indiquer que cette partition est une partition LVM, elle sera donc prise en charge par LVM.

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

8e est le code pour LVM, vu qu'il n'y a qu'une partition, pas besoin de la sélection, fdisk l'a fait pour vous. On affiche la table de partition :

Command (m for help): p

Disk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3657f1c2

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    41943039    20970496   8e  Linux LVM

On a bien une partition de type "LVM" Enfin, on écrit la table:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

Voilà pour la partie "bas niveau". Maintenant, occupons-nous de LVM
Nous allons commencer par étendre le volume groupe vg00 sur ce nouveau physical volume

# vgextend vg00 /dev/vdb1
  No physical volume label read from /dev/vdb1
  Physical volume "/dev/vdb1" successfully created
  Volume group "vg00" successfully extended

La commande "vgdisplay /dev/vg00" va vous montrer que la taille de vg00 a augmenter avec le nouveau disque.
Nous allons maintenant étendre le volume groupe à la totalité de l'esapce libre de vg00:

# lvextend -l +100%FREE /dev/vg00/root
  Extending logical volume root to 37.85 GiB
  Logical volume root successfully resized

Un petit coup de "lvdisplay /dev/vg00/root" vous montre qu'en effet la taille du locial volume a augmenté (de la taille du disque que vous avez insérer dans votre serveur). Vous pouvez bien évidemment étendre le logical volume à la taille souhaitée si vous souhaitez ajouter un autre logical volume par la suite sur l'espace disponible.
Il nous reste plus qu'à étendre le file système du logical volume :

# resize2fs /dev/vg00/root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg00/root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/vg00/root to 9921536 (4k) blocks.
The filesystem on /dev/vg00/root is now 9921536 blocks long.

Et voilà ! Le tout n'a nécessité qu'un reboot pour installer le nouveau disque dur, ensuite, tout ce fait en "live" !

Mots clés : aucun