Migrer une VM de Xen vers KVM

January 17, 2012 by nono
Catégories geekeries - Mots-clés KVM Linux virtualisation Xen

Un petit aide-mémoire sur la migration d'une machine virtuelle Linux de Xen (sur CentOS 5.x, mais ça ne doit pas jouer énormément) vers KVM (sur Scientific Linux 6.x, donc avec libvirt). L'essentiel de ce qui suit vient de cette page.

Préparation de la machine virtuelle

J'ai donc une VM Xen, appelons-la testxen1 (parce que c'est son nom), qui tourne sur l'ancien serveur. L'OS installé sur la VM est un CentOS 5. Sur cette machine virtuelle (qui tourne encore):

  • éditer /etc/inittab, enlever le getty(8) qui tourne sur la console Xen et décommenter ceux des terminaux virtuels habituels;
  • installer un noyau Linux «normal» (pas un noyau Xen);
  • éditer /etc/fstab et remplacer les disques virtuels Xen (xvda, xvdb et ainsi de suite) par des disques IDE (hda, hdb...). NB: pas évident que cette étape soit partout la même, ça dépend peut-être de la version du noyau; à tester.
  • enlever le paramètre console=xvc0 du nouveau noyau dans /boot/grub/menu.lst, et s'assurer que le nouveau noyau est bien sélectionné par défaut;
  • installer grub:
[root@testxen1 ~]# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> device (hd0) /dev/xvda
device (hd0) /dev/xvda
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
quit

C'est fini pour la machine virtuelle, on peut maintenant l'arrêter.

Sur la nouvelle machine physique

On commence, bien sûr, par copier l'ancien (ou les anciens) disque(s) virtuel(s) sur la nouvelle machine. Dans mon cas, il s'agit de volumes logiques LVM, on fait bêtement ça à grands coups de dd(1). Reste juste à créer la nouvelle VM:

virt-install --connect qemu:///system -n testxen1 -r 1024 --vcpus=1 \
 --disk /dev/vg00/testxen1 --vnc --os-type linux --accelerate \
 --network=bridge=br102,model=virtio,mac=12:00:02:e3:00:01 \
 --noreboot --keymap us --import

Quelques notes en vrac:

  • bien évidemment, remplacer le nom de la machine (ici testxen1) par ce qu'on veut;
  • idem pour la mémoire (option -r) et le nombre de processeurs (option --vcpus);
  • dans le cas où on a plusieurs disques virtuels, on peut répéter plusieurs fois l'option --disk, avec le disque de démarrage en premier;
  • pour l'option --network, replacer br102 par le nom du pont réseau qui va bien (si vous avez une config réseau différente, va falloir chercher :-)) et bien entendu l'adresse MAC par la bonne valeur.

Voilà, vous allez voir démarrer votre nouvelle VM sous vos yeux zébahis. Elle est pas belle, la vie? :-)