Twee weken geleden lieten we je zien hoe je een fysieke Linux-machine migreert naar een virtuele machine, wat we physical-to-virtual (P2V) conversie noemen. Een soortgelijk proces is het migreren van een virtuele machine van één hypervisor naar een andere, wat virtual-to-virtual (V2V) genoemd wordt. Zo kun je bijvoorbeeld virtuele machines op Xen hebben draaien onder Red Hat, CentOS of Fedora, en Red Hat willen volgen in zijn voorkeur voor KVM.

Virtual-to-virtual

Een V2V-migratie is ongeveer gelijk aan een P2V-migratie, en daarbij kunnen zich dan ook dezelfde problemen voordoen. Hardgecodeerde namen van partities, een andere virtuele processorarchitectuur, verschillende drivers, ... Het oplossen van problemen gaat ook op dezelfde manier: met een rescue-systeem en een chroot of met guestfish kun je de benodigde aanpassingen meestal eenvoudig doorvoeren. We verwijzen je hiervoor naar het P2V-artikel.

De algemene procedure is dus ook dezelfde als we voorheen al toonden, maar er komen een aantal zaken bij waarop je moet letten. Allereerst geldt dat Xen images vaak geen kernel geïnstalleerd hebben, noch de bootloader GRUB. De virtuele omgeving van Xen zorgt namelijk zelf voor de bootloader. Zomaar het disk image klonen en dat in KVM proberen op te starten zal dus niet lukken. De details verschillen ook afhankelijk van of je virtuele machine in Xen geparavirtualiseerd of met hardwarevirtualisatie (HVM) draait. Maak in ieder geval eerst een reservekopie van het disk image van je Xen gast, voor als je later toch wilt terugkeren naar Xen.

Van geparavirtualiseerde Xen naar KVM

Start je virtuele machine in Xen op en installeer een standaard kernel, dus geen Xen DomU kernel. Installeer dan ook GRUB en pas de bootconfiguratie (/boot/grub/menu.lst) aan zodat de standaard kernel in het vervolg opgestart wordt. Verander ook, indien dit voorkomt, in /boot/grub/device.map de aanduiding /dev/xvda. Wil je KVM met virtio-drivers gebruiken, dan moet dit /dev/vda worden. Gebruik je geen geparavirtualiseerde drivers, dan wordt dat bijvoorbeeld /dev/hda voor een virtuele IDE-schijf.

Verwijder in de GRUB-configuratie op de regel van de kernel de optie console=xvc0, want die console hebben we op KVM niet. In /etc/inittab vervang je de console xvc0 door ttyS0.

In /etc/modprobe.conf (of de plaats in je distributie waarin kernelmodules een alias krijgen) zal er waarschijnlijk iets als het volgende staan:

alias eth0 xennet

alias eth1 xennet

alias scsi_hostadapter xenblk

Voor KVM met virtio-drivers vervang je dit door:

alias eth0 virtio_net

alias eth1 virtio_net

alias scsi_hostadapter virtio_blk

Kopieer nu de XML-configuratie van de gast met "virsh dumpxml xengast > kvmgast.xml"

Wijzig nu dit configuratiebestand kvmgast.xml. Het moet op het volgende lijken:

<domain type='kvm'>

<name>kvmgast</name>

<uuid>87b39a08-d6bb-11de-9894-0800279c86c0</uuid>

<memory>524288</memory>

<currentMemory>524288</currentMemory>

<vcpu>1</vcpu>

<os>

<type>hvm</type>

<boot dev='hd'/>

</os>

<clock offset='utc'/>

<on_poweroff>destroy</on_poweroff>

<on_reboot>restart</on_reboot>

<on_crash>restart</on_crash>

<devices>

<disk type='file' device='disk'>

<source file='/var/lib/libvirt/images/guest.img'/>

<target dev='vda' bus='virtio'/>

</disk>

<interface type='bridge'>

<mac address='00:16:3e:58:f3:0a'/>

<source bridge='br0'/>

</interface>

<input type='mouse' bus='ps2'/>

<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>

</devices>

</domain>

Belangrijk hier is dat het type OS op 'hvm' staat en dat je het boot-device onder OS toevoegt. Bij de netwerkinterface wordt de bridge vervangen van xenbr0 door br0. Misschien moet je deze bridge nog aanmaken op de gastheer. Hou wel het MAC-adres identiek. En het disk-type verander je natuurlijk ook. Geen "<target dev='xvda' bus='xen'/>" zoals in Xen maar bijvoorbeeld "<target dev='vda' bus='virtio'/>" voor een geparavirtualiseerde schijf.

Na het aanpassen van de configuratie definieer je een nieuwe virtuele machine en start je ze op in KVM (nadat je in de gastheer KVM geïnstalleerd en geladen hebt):

virsh define kvmgast.xml

virsh start kvmgast.

Als alles goed is, krijg je nu de bootloader GRUB te zien in een VNC-venster.

Van Xen HVM naar KVM

Gebruiken je virtuele machines onder Xen hardwarevirtualisatie, dan gaat het migreren naar KVM eenvoudiger. De gast gebruikt dan immers al een normale kernel, zodat je de bootconfiguratie niet hoeft aan te passen. Gebruikt de gast geparavirtualiseerde drivers, verwijder de verwijzingen hiernaar dan wel in /etc/modprobe.conf en voeg eventueel aliassen toe voor netwerkdrivers zoals e1000. Pas ook het configuratiebestand aan zoals hierboven.

Conclusie

Een virtuele Linux-machine van Xen naar KVM migreren is meestal niet zo moeilijk, als je let op de zaken die we hier aanstipten. Wil je een Windows-machine van Xen naar KVM migreren, dan moet je dezelfde stappen uitvoeren als in ons artikel over het virtualiseren van een fysieke Windows-installatie, rekening houdend met de verschillen tussen Xen en KVM. In Fedora 13 zou bovendien een tool moeten komen die migratie van een Linux-gastheer van Xen naar KVM automatisch kan uitvoeren: virt-v2v.

Bron: Techworld