Affichage des articles dont le libellé est lvm. Afficher tous les articles
Affichage des articles dont le libellé est lvm. Afficher tous les articles

15 novembre 2012

virt-clone

Par souci de performance on utilise des volumes logiques (LV) pour installer les machines virtuelle. Ce gain de performance se paye par un système de backup un peut moins habituel que dans le cas d’un fichier. Voici comment proceder.
Commencons par obtenir la description du LV utilisé par la machine virtuelle actuelle.

# lvdiplay

  --- Logical volume ---
  LV Name                /dev/vg_srv0/lv_vm2
  VG Name                vg_srv0
  LV UUID                MIzDop-R7NY-qvQP-kmN1-C9hT-jD1p-7zQFTP
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             640
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4


Le LV /dev/vg_srv0/lv_vm2, qui contient la machine virtuelle vm2, fait donc exactement 20Go.

On va créer, une fois pour toute, le LV /dev/vg_srv0/lv_vm2_back, de la même taille, pour y stoker un clone de la machine existante vm2.

 lvcreate -L 20G -n lv_vm2_back vg_srv0

Ensuite il suffit de faire le clonage, en prenant soin d’arreter la machine virtuelle vm2 pendant le clonage.

 virsh shutdown vm2 
 virt-clone  -o vm2 -n vm2_back -f /dev/vg_srv0/lv_vm2_back
 virsh start vm2

-o donne le nom de la machine virtuelle Originale
-n donne le nom de la Nouvelle machine virtuelle
-f désigne la destination du clonage (le LV crée avec lvcreate)

Il faut environ 6 min pour : arrêter, cloner 20Go, redémarrer.

Notez que virt-clone a créé le fichier /etc/libvirt/qemu/vm2_back.xml en personnalisant l’adresse mac et le uuid pour éviter les conflits avec l’original mais il n’a pas changer les fichiers dans le clone. Des paramètres, comme l’adresse ip, restent donc les mêmes.

Si on veut exécuter vm2_back en parallèle de son origianl vm2, il faudra eviter les conflits et donc reconfigurer certains fichiers de vm2_back avec des commandes du type :

  guestfish -d vm2_back  -i edit xxxxx

Pour plus d'info sur l'utilisation de guestfish voir ce post.

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