[libvirt-users] Proper way to reference a disk

Eric Blake eblake at redhat.com
Wed May 6 21:14:46 UTC 2015

On 05/06/2015 02:05 PM, Michael Schwager wrote:
> Hi,
> We are running on CentOS 7.0. We want to move our VMs (kvm/qemu) from
> qcow/image files to logical volumes under LVM.
> I have moved one of them but I had a little trouble editing the disk
> properly and I wonder what is the correct way to do it. Specifically, in
> the XML under the devices/disk section why does the source say "source file=",
> and not "source dev="?  The reason I ask is that I have a number of other
> machines to move and I don't want to mess them up.
> The source file entry for the disk was like this in our xml file:
> <source file='/var/lib/libvirt/images/pxetest.qcow2'/>
> I got the vm to work by converting the image to raw, then dumping via dd
> into the LV, and editing the XML using virsh as follows:
>     <disk type='file' device='disk'>
>       <driver name='qemu' type='raw' cache='none'/>
>       <*source file*='/dev/kvm_temp/pxetest'/>

The key for what <source> looks like is the <disk type='...'> attribute
a couple lines earlier.  When type='file', then <source> lists a
file='...' absolute path, and libvirt treats it as a file (which sort of
works, except when querying for how much of the file is actually
allocated, because it assumes that stat() alone is good enough)

> By comparison I have a test machine on another real host upon which I
> loaded a VM and put its disk into a logical volume. Its disk section looks
> like this:
>     <disk type='block' device='disk'>
>       <driver name='qemu' type='raw' cache='none' io='native'/>
>       <*source dev*='/dev/kvm_hosts/pxetest2'/>

And here, you used type='block', so <source> must list dev='...' and
give an absolute path to a block device (and here, when libvirt is
computing how much of the device is allocated, it relies on more than
just stat(), which can give more accurate numbers when doing things like
qcow2 format atop an LVM block device).

>       <target dev='hda' bus='ide'/>
>       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>     </disk>
> The source file / source dev thing really has me wondering.

Hopefully I answered it.  As a rule of thumb, if it is a block device,
use type='block' (or type='lun' if you need sgio passthrough support)
and <source dev='...'>); otherwise use type='file' and <source file='...'.

Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20150506/1975cb20/attachment.sig>

More information about the libvirt-users mailing list