• E
    blockcopy: allow block device destination · b7e73585
    Eric Blake 提交于
    To date, anyone performing a block copy and pivot ends up with
    the destination being treated as <disk type='file'>.  While this
    works for data access for a block device, it has at least one
    noticeable shortcoming: virDomainGetBlockInfo() reports allocation
    differently for block devices visited as files (the size of the
    device) than for block devices visited as <disk type='block'>
    (the maximum sector used, as reported by qemu); and this difference
    is significant when trying to manage qcow2 format on block devices
    that can be grown as needed.
    
    Of course, the more powerful virDomainBlockCopy() API can already
    express the ability to set the <disk> type.  But a new API can't
    be backported, while a new flag to an existing API can; and it is
    also rather inconvenient to have to resort to the full power of
    generating XML when just adding a flag to the older call will do
    the trick.  So this patch enhances blockcopy to let the user flag
    when the resulting XML after the copy must list the device as
    type='block'.
    
    * include/libvirt/libvirt.h.in (VIR_DOMAIN_BLOCK_REBASE_COPY_DEV):
    New flag.
    * src/libvirt.c (virDomainBlockRebase): Document it.
    * tools/virsh-domain.c (opts_block_copy, blockJobImpl): Add
    --blockdev option.
    * tools/virsh.pod (blockcopy): Document it.
    * src/qemu/qemu_driver.c (qemuDomainBlockRebase): Allow new flag.
    (qemuDomainBlockCopy): Remember the flag, and make sure it is only
    used on actual block devices.
    * tests/qemuxml2argvdata/qemuxml2argv-disk-mirror.xml: Test it.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    b7e73585
libvirt.c 650.8 KB