Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.
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

Summary: [RFE] Add a flag for virDomainBlockCopy on persistent domains
Product: Red Hat Enterprise Linux 7 Reporter: Milan Zamazal <mzamazal>
Component: libvirtAssignee: Peter Krempa <pkrempa>
Status: CLOSED ERRATA QA Contact: Han Han <hhan>
Severity: high Docs Contact:
Priority: unspecified    
Version: 7.4CC: bmcclain, dyuan, jsuchane, lcheng, lmen, lmiksik, mtessun, rbalakri, salmy, snagar, xuzhang
Target Milestone: rcKeywords: FutureFeature
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: libvirt-3.2.0-9.el7 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 1459183 (view as bug list) Environment:
Last Closed: 2017-08-02 01:34:35 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1458548, 1459183    

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