RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Bug 1459113 - [RFE] Add a flag for virDomainBlockCopy on persistent domains
Summary: [RFE] Add a flag for virDomainBlockCopy on persistent domains
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: libvirt
Version: 7.4
Hardware: Unspecified
OS: Unspecified
unspecified
high
Target Milestone: rc
: ---
Assignee: Peter Krempa
QA Contact: Han Han
URL:
Whiteboard:
Depends On:
Blocks: 1458548 1459183
TreeView+ depends on / blocked
 
Reported: 2017-06-06 10:37 UTC by Milan Zamazal
Modified: 2017-08-02 01:34 UTC (History)
11 users (show)

Fixed In Version: libvirt-3.2.0-9.el7
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
: 1459183 (view as bug list)
Environment:
Last Closed: 2017-08-02 01:34:35 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHEA-2017:1846 0 normal SHIPPED_LIVE libvirt bug fix and enhancement update 2017-08-01 18:02:50 UTC

Description Milan Zamazal 2017-06-06 10:37:42 UTC
virDomainBlockCopy works only for transient domains and refuses to run on persistent domains. This is due to technical reasons related to inability to restore block-copy operations after shutting off a VM and starting it again.

However if the block-copy operation was marked as temporary, without its recovery after VM restart, then the operation could be run also on persistent domains, with the same non-recovery limitation. So please add a flag to virDomainBlockCopy for that purpose.

Comment 6 Peter Krempa 2017-06-06 14:47:02 UTC
Patches proposed upstream:
https://www.redhat.com/archives/libvir-list/2017-June/msg00289.html

Comment 8 Peter Krempa 2017-06-07 11:20:39 UTC
Upstream added this by:

commit 880b1a2e25fc7b76581b1115a5ab538d74193159
Author: Peter Krempa <pkrempa>
Date:   Tue Jun 6 15:32:49 2017 +0200

    virsh: Add support for VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB
    
    Allow using the new flag with virsh.

commit b7e534c651bfa28c65f7b11661b478613c96598c
Author: Peter Krempa <pkrempa>
Date:   Tue Jun 6 15:13:51 2017 +0200

    qemu: Conditionally allow block-copy for persistent domains
    
    Allow starting the block-copy job for a persistent domain if a user
    declares by using a flag that the job will not be recovered if the VM is
    switched off while the job is active.
    
    This allows to use the block-copy job with persistent VMs under the same
    conditions as would apply to transient domains.

Comment 11 Han Han 2017-06-08 08:53:28 UTC
Verify it on libvirt-3.2.0-9.el7.x86_64 qemu-kvm-rhev-2.9.0-8.el7.x86_64

Check blockcopy could be completed on persistent domains with --transient-job.
1. Define and start an VM with vda like following:
# virsh domblklist V
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/V.qcow2

2. blockcopy with --transient-job
#  virsh blockcopy V vda /var/lib/libvirt/images/V-clone.qcow2 --transient-job --wait --verbose --pivot
Block Copy: [100 %]
Successfully pivoted
# virsh destroy V
Domain V destroyed

# virsh dumpxml V
...
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/V-clone.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...
Blockcopy completed.



Interrupt blockcopy on persistent domains with --transient-job, check the job doesn't recover and inactive xml doesn't be changed.
1. Define an VM like following:
# virsh dumpxml V --inactive 
...
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/V.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
....

2. Start the VM with different disk xml:
# virsh create V.xml
# virsh dumpxml V
...
<disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <source protocol='nbd'>
        <host name='10.66.5.92' port='10801'/>
      </source>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...

3. Do blockcopy and interrupt it before finish
# virsh blockcopy V vda /var/lib/libvirt/images/V-clone.qcow2 --transient-job --wait --verbose --async        
Block Copy: [  5 %]^C

Then check blockjob and active/inactive xml
# virsh blockjob V vda        
No current block job for vda
# virsh dumpxml V --inactive
...
 <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/V.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...
# virsh dumpxml V |less
...
 <disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <source protocol='nbd'>
        <host name='10.66.5.92' port='10801'/>
      </source>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...
After blockcopy interrupted: No blockjob. Active/inactive XMLs are not changed.

Comment 12 errata-xmlrpc 2017-08-02 01:34:35 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2017:1846


Note You need to log in before you can comment on or make changes to this bug.