24 mars 2012

Resize d'un volume LVM


Que faire si tous l'espace disque de votre système Linux est attribué et que vous ayez besoin de place pour créer un nouveau point de montage ou creer un nouveau périphérique ? Si vous avez pris soin d’installer votre système Linux en utilisant les volumes logiques (LVM ) vous pouvez garder espoir, sinon vous pouvez arrêter la lecture ici !.

Dans mon cas il me fallait récupérer de la place pour créer des devices qui seront ensuite utilisées pour y stoker des machines virtuelles. (C'est plus efficace que de stoker la machine virtuelle dans un gros fichier)

1) ANALYSE
Vérifiez la configuration avec la commande “vgdisplay
On obtient des infos sur chaque groupe (VG) ce qui correspond en gros aux ancienne partitions
.Le résultat ressemble à ceci :

 --- Volume group ---
 VG Name               vg_srv0
 Format                lvm2
 VG Access             read/write
 VG Status             resizable     
 MAX LV                0
 Cur LV                3
 Open LV               3
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               929.12 GiB
 PE Size               32.00 MiB
 Total PE              29732
 Alloc PE / Size       29732 / 929.12 GiB
 Free  PE / Size       0 / 0   <== PAS DE PLACE LIBRE ! C'EST LE PROBLÈME

Pour plus détails sur ce qui il y a dans le(s) groupe(s) utiliser la commande "lvdisplay" qui donnera l’info sur chaque volume (LV) se situant dans chaque groupe.

 --- Logical volume ---
 LV Name                /dev/vg_srv0/lv_swap
 VG Name                vg_srv0
 LV Write Access        read/write
 LV Status              available
 LV Size                5.44 GiB
  
 --- Logical volume ---
 LV Name                /dev/vg_srv0/lv_home
 VG Name                vg_srv0
 LV Write Access        read/write
 LV Status              available
 LV Size                873.69 GiB
  
 --- Logical volume ---
 LV Name                /dev/vg_srv0/lv_root
 VG Name                vg_srv0
 LV Write Access        read/write
 LV Status              available
 LV Size                50.00 GiB

Ici les “LV Name” donnent une idée de ce qu’il y a dans ces volumes. Ce n'est pas toujours le cas ... Mais on peut le vérifier avec la commande mount, (et un peut de filtrage)

mount | grep  ^/dev/ | awk '{print $1 "  " $3}'

Le résultat ressemble alors à ceci:

/dev/mapper/vg_srv0-lv_root   /
/dev/sda2                     /boot
/dev/mapper/vg_srv0-lv_home   /home

On constate que la racine du système est dans le volume lv_root et que /home est dans le volume lv_home.

lvmdisplay nous a montré que lv_home fait 873.69 GiB
C’est ce volume qu’on va diminuer pour faire de la place.
IMPORTANT: On ne peut pas diminuer la taille d’un volume qui est monté. On ne peut donc pas diminuer la taille de la racine, pour cela il faudrait booter sur un cd de rescue.

2) DIMINUTION

Donc on va commencer par retirer le volume lv_home de /home
Ce qui sous entend qu’aucun process ou utilisateur n’utilise /home
(le vérifier avec “lsof | grep /home” qui ne doit rien afficher.)

   unmount /home

Vérifier que le volume est sain avec la commande e2fsck
  e2fsck -f /dev/mapper/vg_srv0-lv_home

On va ramener la taille lv_home de 873.69 Go à 200Go libérant ainsi 673Go

On commence par diminuer le file-system (regrouper les fichiers)
(cela peut prendre plus ou moins de temps suivant le nombre de fichiers à déplacer)
  resize2fs -p /dev/mapper/vg_srv0-lv_home 200G

Enfin on réduit la taille du volume
  lvreduce -L 200G /dev/mapper/vg_srv0-lv_home

Avec la commande ‘vgdisplay’ on vérifie qu’il y a bien de la place libre et avec ‘lvdisplay’ que la taille du volume réduit est bien la valeur attendue.

Dernier test
  e2fsck -f /dev/mapper/vg_srv0-lv_home

On réactive /home
  mount /home

3) AJOUT

Maintenant on a de la place, on va pouvoir ajouter de nouveau volumes. Commençons par un volume de 20G, nommé lv_vm1 et qui sera dans le groupe vg_srv0,  donc accessible via le device /dev/vg_srv0/lv_vm1 ou /dev/mapper/vg_srv0-lv_vm1

  lvcreate -L 20G -n lv_vm1 vg_srv0

Puis un second volume lv_vm2
  lvcreate -L 20G -n lv_vm2 vg_srv0

Ces 2 volumes lv_vm1 et lv_vm2 seront utilisé pour y installer 2 machines virtuelles d’où leur nom vm.... Dans ce cas le travail s’arrête là. 


Pour pouvoir les monter et y stoker des fichiers il faut les formater avec:


mkfs.ext4 /dev/mapper/vg_srv0-lv_vm1