User Tools

Site Tools


kvm:convert_qcow2_to_raw

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
kvm:convert_qcow2_to_raw [2019/11/30 12:57] – removed peterkvm:convert_qcow2_to_raw [2020/07/21 16:50] (current) – old revision restored (2016/07/04 10:58) 91.121.7.147
Line 1: Line 1:
 +====== KVM - Convert qcow2 to raw ======
  
 +Convert qcow2 disk images to raw disk images for performance.
 +
 +The **qcow2** disk format has some decent features like encryption, compression and copy to write support.  However, the compression and the copy processes make it quite a bit slower than raw disk images.  Sometimes you want to convert the disk images so that the VM will perform better.
 +
 +===== Benchmark =====
 +
 +For me it has a performance boost. Using a RAID 1 setup with two 5900 RPM disks and the **deadline** on the host and the **noop** scheduler without caching on a raw image in the guest resulted in a boost over the default **deadline** scheduler on a qcow2 image on the guest:
 +
 +Test command:
 +
 +<code bash>
 +dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
 +</code>
 +
 +Default Ubuntu 12.04 vmbuilder created vm on a qcow2 image without caching and with the deadline scheduler in the VM:
 +
 +<code>
 +1073741824 bytes (1.1 GB) copied, 658.396 s, 1.6 MB/s
 +</code>
 +
 +The same VM, disk image converted to raw image without caching and using the noop scheduler in the VM:
 +
 +<code>
 +1073741824 bytes (1.1 GB) copied, 13.646 s, 78.7 MB/s
 +</code>
 +
 +That's quite a performance boost.  The KVM host has the following result with the **dd** command:
 +
 +<code>
 +1073741824 bytes (1.1 GB) copied, 10.4034 s, 103 MB/s
 +</code>
 +
 +
 +===== Converting the image =====
 +
 +I'll convert the disk image for the example vm **vm1**.  Change the name and disk paths for your setup.
 +
 +First shut down the VM:
 +
 +<code bash>
 +virsh shutdown vm1
 +</code>
 +
 +Then convert all the disk images using this command for each disk image:
 +
 +<code bash>
 +qemu-img convert /var/lib/libvirt/images/vm1/ubuntu-kvm/tmp20ePgc.qcow2 /var/lib/libvirt/images/vm1/ubuntu-kvm/tmp20ePgc.raw
 +</code>
 +
 +Edit the VM config:
 +
 +<code bash>
 +virsh edit vm1
 +</code>
 +
 +Change the **disk** section to point to the new raw image:
 +
 +Change the lines **<driver name='qemu' type='qcow2'/>** and **<source file='/var/lib/libvirt/images/vm1/ubuntu-kvm/tmp20ePgc.qcow2'/>** to **<driver name='qemu' type='raw'/>** and **<source file='/var/lib/libvirt/images/vm1/ubuntu-kvm/tmp20ePgc.raw'/>**. Like so:
 +
 +<code bash>
 +&lt;disk type='file' device='disk'&gt;
 +  &lt;driver name='qemu' type='raw' cache='none'/&gt;
 +  &lt;source file='/var/lib/libvirt/images/vm1/ubuntu-kvm/tmp20ePgc.raw'/&gt;
 +  &lt;target dev='hda' bus='ide'/&gt;
 +  &lt;address type='drive' controller='0' bus='0' unit='0'/&gt;
 +&lt;/disk&gt; 
 +</code>
 +
 +That's it.  Start the VM:
 +
 +<code bash>
 +virsh start vm1
 +</code>
 +
 +If it all works, remove the qcow2 image:
 +
 +<code bash>
 +rm /var/lib/libvirt/images/vm1/ubuntu-kvm/tmp20ePgc.qcow2
 +</code>
 +
 +===== Disk scheduler =====
 +
 +To change the default disk scheduler in your VM, you can use the following command:
 +
 +<code bash>
 +echo $scheduler > /sys/block/$device/queue/scheduler
 +</code>
 +
 +To check the current scheduler:
 +
 +<code bash>
 +cat /sys/block/sda/queue/scheduler
 +</code>
 +
 +Output:
 +
 +<code>
 +noop [deadline] cfq
 +</code>
 +
 +Here the **deadline** scheduler is being used.  To change it:
 +
 +<code bash>
 +echo noop > /sys/block/sda/queue/scheduler
 +</code>
 +
 +Now the **noop** scheduler is being used:
 +
 +<code bash>
 +cat /sys/block/sda/queue/scheduler
 +[noop] deadline cfq
 +</code>
 +
 +Remember to add this command to /etc/rc.local to make it survive a reboot. On ubuntu you can also define it in /etc/default/grub. Change GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" to GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop" and run an update-grub2 to make it permanent
kvm/convert_qcow2_to_raw.1575118655.txt.gz · Last modified: 2020/07/15 09:30 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki