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.