0

I am experimenting with KVM-based VMs on my home server. The host runs Ubuntu Server 16.04.1 LTS, and so would the guests.

I was able to create a guest using vmbuilder. It outputs a qcow2 image, which I then converted to raw image on a LVM logical volume to improve performance. The total size of this image is about 900MB, and it works well for what I need.

However, when I manually create a VM and install Ubuntu from the ubuntu server ISO onto it, I am able to expose my logical volume to the VM guest as a block raw device rather than file raw image. In my testing, this seems to generally improve disk performance even further, by not insignificant margins, depending on how I test. However, this VM is not nearly as lean (installed 1.8GB or so) and boot time is much slower (the block device VM created by vmbuilder boots in about 5 seconds, the file-based VM that I manually installed in about 15 seconds).

So my goal is to have a VM that is like the one vmbuilder installs, fewer packages, fast boot, etc, but to have it use a raw block device as storage instead of the file-based raw image.

Questions:

  1. How is the VM created by vmbuilder different from when I manually install it?

  2. I see that Ubuntu (used to ) have Ubuntu JeOS and see references that it can be installed from the Server iso, but I can't find out how. Is this still an option? If so, is that what the vmbuilder installs?

  3. How can I create a vmbuilder-like system manually OR how can I convert the qcow2 image to raw block rather than raw file image.

1 Answer 1

0

This has not gotten an answer, but I was able to find a partial solution. What I found is this article, which describes how to convert the Qcow2 image to a raw block device, rathern than raw file image.

Basic steps:

  1. VM needs to be off
  2. Convert qcow2 to raw image file using:

    qemu-img convert [qcow2] [rawimg]

  3. Get size of raw image in bytes:

    ls -l [rawimg]

    123456789

  4. Create LV and match size of raw image exactly:

    lvcreate -L 123456789b -n [lvname] [vgroup]

  5. Write raw image to LV:

    dd if=[rawimg] of=[path/to/lv]

Change the XML definition of the VM accordingly, for example from:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
  <source file='/srv/virtual/vm_web/tmp5GWO4q.qcow2'/>
  <target dev='hda' bus='virtio'/>
</disk>

to:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vgroup/lv_disk'/>
  <target dev='vda' bus='virtio'/>
</disk>

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .