KVM - Offline Migration

1. (Optional) Save the guest.

If the machine is currently running and you can't just shut it down for the migration, then save the machine's state which we will use later.

virsh save [guest-id] [filename]  


virsh save dns.technostu.com dns.technostu.com.state  

Note: I just chose the state suffix to makes sense for me. The img suffix is already being used for the disk image. You can use any suffix you like.

2. Grab the Config

virsh dumpxml --migratable [guest-id] > [guest-id].xml  


virsh dumpxml --migratable dns.technostu.com > dns.technostu.com.xml  

Moving Data: If you are not using shared storage between the two hosts, and are actually moving the data of the guest as well, you will need to update the source file part of the xml file to point to where the .img will now be.

Networking: Your KVM guest will be configured exactly the same, including any network bridges etc. Thus you may need to either alter the xml file, or ensure that the host you are transferring to has the same bridge setup etc.

3. Copy the XML file to the new host.

4. Create a guest with the guest.xml file

virsh create [guest-id].xml  


virsh create dns.technostu.com.xml  

Ubuntu users

When trying to perform the previous step, you may run into permission issues, if that is the case then try running the following commands from this posted workaround.

sudo apt-get install apparmor-profiles apparmor-utils -y  
sudo aa-complain /usr/lib/libvirt/virt-aa-helper  

5. Optional Define the Guest

You need to "define" the guest on the new system if you want to be able to:

  • start the guest by name/ID, and not by using the xml file.
  • See guests as "offline" when they are not running, rather than not being listed at all, with the command sudo virsh list --all.
sudo virsh define [guest-id].xml  

6. Start The Guest

If you didn't save the machine state, then you can simply run the command sudo virsh start [guest-id] or sudo virsh start [guest-id].xml if you didnt bother to define the guest.

If you did have a running guest, then run the following command to restore the guest from save.

virsh restore [guest-id].state  


virsh restore dns.technostu.com.state  

Notice - Migrating to ZFS

Please be aware that when I was migrating my guests from an ext4 mdadm RAID system to ZFS, I had to remove the cache=none from the xml configs for the disk settings before the machines could start.




Stuart is a software developer with a passion for Linux and open source projects.

comments powered by Disqus
We are a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for us to earn fees by linking to Amazon.com and affiliated sites. More info.