Virtual Machine Manual Migration

If you have several Ravada servers you may want to copy a virtual machine from one to another.


The easiest way to migrate Virtual Machines is using the new Backup Virtual Machines tool added in release 1.5.

In this example we use the old manual procedure to copy the base for a virtual machine called Lubuntu-1704.

Check the storage pools directories

If the filesystem layout of both servers is different, the migration can be complicated. You have to bear in mind the disk volumes may have backing files in a different location and you need to rebase it.

Check first the directory where the volumes are stored, if you can’t have them in both servers you have to create a clone, spin if off and migrate it to the new server.

In this example we inspect first the full path of the volumes.

root@origin:~# virsh dumpxml Lubuntu1704 | grep "source file"

    <source file='/var/lib/libvirt/images/lubuntu-vda-k1dj.qcow2'/>

For each source file, check its backing file:

root@origin:~# qemu-img info /var/lib/libvirt/images/lubuntu-vda-k1dj.qcow2 | grep "backing file"

  backing file: /var/lib/libvirt/images.2/

So we now know we have to move one file to _/var/lib/libvirt/images/_ and another one to _/var/lib/libvirt/images.2/_ . Check if the new server has these directories in storage pools.

root@destionation:~# virsh pool-list

  Name          State    Autostart

  default active yes
root@destination:~# virsh pool-dumpxml default | grep path

In this case migrate the virtual machine as it is will be difficult. We have to rebase the volumes. The easiest way would be to create a clone, spin off the volumes from the web frontend administration and migrate it then.

Import the Base

Copy the Base definition

First copy the base definition file from server origin to destination. You need an user in the destination machine and ssh connection from each other.

root@origin:~# virsh dumpxml Lubuntu1704 > Lubuntu1704.xml
root@origin:~# scp Lubuntu1704.xml root@dst.domain:

Copy the volumes

The volumes have a backing file, you must find out what it is so you can copy to destination.

root@origin:~# grep source Lubuntu1704.xml
<source file='/var/lib/libvirt/images/Lubuntu1704-vda-X18J.img'/>
root@origin:~# qemu-img info /var/lib/libvirt/images/base-vda-X18J.img | grep -i backing
backing file: /var/lib/libvirt/images/
root@origin:~# rsync -avPS /var/lib/libvirt/images/ root@dst.domain:/var/lib/libvirt/images
root@origin:~# rsync -avPS /var/lib/libvirt/images/Lubuntu1704-vda-X18J.img root@dst.domain:/var/lib/libvirt/images

Define the base on destination

Go to the destination server and define the virtual machine base with the XML config you copied before

root@dst:~# virsh define Lubuntu1704.xml
Domain base defined from Lubuntu1704.xml

Import the base to Ravada on destination

Run this command and you should see the base on the Ravada web admin page.

root@dst:~# rvd_back --import-domain Lubuntu1704
This virtual machine has 3 backing files. Do you want to import it as a base ? Please answer y/n [yes]:

Importing clones

Now if you want to import a clone too, first you have to ask the clone owner to start and stop the machine on destination. Then you have to copy the volumes from origin and overwrite what has just been created on destination.

Create a clone

The owner of the original clone must create a clone in destination using Ravada. That will create a basic virtual machine with the same name owned by the correct user. Stop the domain on destination:

root@dst:~# virsh shutdown Lubuntu1704-juan-ramon

Make sure it is stopped

root@dst:~# virsh dominfo Lubuntu1704-juan-ramon

Copy the clone volumes

Find out what are the clone volume files, and copy them to the temporary space in destination:

root@origin:~# virsh dumpxml Lubuntu1704-juan-ramon | grep "source file" | grep -v ".ro."
<source file='/var/lib/libvirt/images/Lubuntu1704-juan-ramon-vda-kg.qcow2'/>
root@origin:~# rsync -av /var/lib/libvirt/images/Lubuntu1704-juan-ramon-vda-kg.qcow2 root@dst:/var/lib/libvirt/images

Start the clone on destination

First move the volumes to the right place, notice in destination the volumes have different names. Check the XML configuration matches the place where you stored the qcow files.

Hopefully then you can start the clone. It is a delicate procedure that must be followed carefully, please consider helping with this document if you have any suggestions.

Importing Standalone Machine

Dumping data

To export the necessary data you need the XML file and the volume files.

XML file

root@src:# virsh dumpxml Lubuntu1704 > Lubuntu1704.xml

Volume Files

Find out the volume files searching for “source file” in the XML. Copy these files to the destination server.

root@origin:~# virsh dumpxml Lubuntu1704 | grep "source file" | grep -v ".ro."
<source file='/var/lib/libvirt/images/Lubuntu1704-vda-kg.qcow2'/>
root@origin:~# rsync -av /var/lib/libvirt/images/Lubuntu1704-vda-kg.qcow2 root@dst:/var/lib/libvirt/images/

Importing data

First of all you need to check the storage directory in the destination server matches the source. Check for “source file” lines in the XML and change it if you will place the qcow files elsewhere.

Then define the virtual machine base with that XML config file.

root@dst:~# virsh define Lubuntu1704.xml
Domain base defined from Lubuntu1704.xml

Then try to start the virtual machine:

root@dst~# virsh start Lubuntu1704

Once you have verified the machine is running, import it into Ravada:

root@dst~# rvd_back --import-domain Lubuntu1704