User Tools

Site Tools



Tricks and Techniques

Following are just some notes on how to “do things” with virtuals, especially converting from one form to another

Move VirtualBox images to KVM/Xen

Oracle VirtualBox uses their own format for the disk back end. In order to move the block device from VirtualBox to something something else, the image needs to be converted to a raw format, then optionally converted to a qcow2 format to conserve disk space. Note: in each case below, the commands need to be executed from a machine which has the virtualization tool installed. VBoxManage is only available on a VirtualBox machine, and qemu-img is only available on a machine which uses it, ie something that has had virt-manager, kvm, xen or qemu installed.

Also, note that neither of these commands modify the original disk image. They convert the image, copying the converted file to a new one.

The following code will take VirtualBox's sparse disk and convert it to a raw format, in essence a disk image with no compression. In other words, if you have a 40G disk image, but are only using 2.4G of disk space because VirtualBox realizes you are only using that much space, /target/disk.raw will require the full 40 gigabytes.

VBoxManage clonehd /source/disk.vdi /target/disk.raw --format raw

Virt-Manager can work with qcow2 formatted disk images, which are similar to VirtualBox's vdi (sparse) format, so we would really like to convert the raw image above to qcow2 whenever disk space is important. To do this, issue the following command:

qemu-img convert -f raw /path/to/raw/disk.raw -O qcow2 /path/to/qcow/disk.qcow2

You can now delete the original and intermediate files when you feel confident the process has gone well

Sticky IP's (Reservations) with virt-manager

virt-manager defaults to NAT on the networking. I find this useful on my laptop, where I don't always have a DHCP server available and the running virtuals should be private to my laptop. However, the dhcp server will occasionally give a different IP to the same machine.

To get around this, find the MAC address of the virtual, then set the network to always give it the same IP address. By default, the dhcp server built into virt-manager sets up an entire /24 range except for the primary IP, so we'll need to adjust that range also.

First, find the MAC address of the virtual you want to set up this way, and get the network list (usually “default”)

# get network name
virsh net-list
# get MAC address of a virtual's network interface
virsh  dumpxml  //vm_name// | grep 'mac address'

Now, edit the DHCP server

# change default to whatever you got in net-list, if it is different
virsh net-edit default

Look through this list and find the XML block which defines the DHCP server. Adjust the range for automatic assignments to give you room to add your reservations, then add a new line within the dhcp block to assign a sticky IP based on MAC address found above. Below, we have adjusted the range start address ufrom to .2-.99 are then available for sticky IP reservations. We then added three lines for vm1, vm2 and vm3, giving them an IP based on their mac addresses

  <range start='' end=''/>
  <host mac='52:54:00:6c:3c:01' name='vm1' ip=''/>
  <host mac='52:54:00:6c:3c:02' name='vm2' ip=''/>
  <host mac='52:54:00:6c:3c:03' name='vm3' ip=''/>

Save your work, then you need to do something to get it all to begin work., where I stole this idea, has a lot of things to do, but I just rebooted the damned thing and it began working just fine.

unix/virtualization/techniques.txt · Last modified: 2020/02/19 15:15 by rodolico