What if you want to migrate a VM that’s been living on Citrix Xenserver to a different linux machine running vanilla Xen? The process isn’t as straightforward as you might think. Fortunately thanks to Eriklax over at github there is a fairly easy way to convert xenserver’s .xva virtual machines to other formats, via xva-img.
The first step is to download and install xva-img from github.
wget https://github.com/eriklax/xva-img/archive/master.zip
unzip master.zip
cd xva-img-master
cmake .
sudo make install
When trying to compile this on my Linux Mint Cinnamon machine I ran into the following errors:
CMake Error: your CXX compiler: "/usr/bin/c++" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
xva-img-master/src/sha1.cpp:20:25: fatal error: openssl/sha.h: No such file or directory
#include <openssl/sha.h>
I had to install the build-essential and libssl-dev packages in order to successfully compile and install xva-img.
Now that it’s installed, create a directory and extract your .xva file into it.
mkdir my-virtual-machine
tar -xf <.xva file> -C my-virtual-machine
chmod -R 755 my-virtual-machine
Once that’s finished (it might take a while – it took over an hour for me) the last step is to convert the extracted directories into a raw disk file.
Note: when you extract your VM tar creates subfolders for each hard disk attached to the VM. You will have to run this command for each Ref folder that was generated as part of the image extraction process.
xva-img -p disk-export my-virtual-machine/Ref\:1/ disk.raw
It took a while for some reason, but it did eventually generate the desired image.
Now that I have a raw disk image I can transfer it to an LVM partition for use with xen:
sudo dd if=win8.1.img of=/dev/desktop-xen/Win8.1 bs=64M
Success.