Red Hat Bugzilla – Bug 1168453
Disk should be removed while using no-exist 'file' type volume with startupPolicy='optional'
Last modified: 2016-11-03 14:11:19 EDT
Description of problem: For specified storage volume is of 'file' type which represents a disk , if it is not accessible with startupPolicy='optional' .the disk should be removed. version: libvirt-1.2.8-8.el7.x86_64 qemu-kvm-rhev-2.1.2-12.el7.x86_64 kernel-3.10.0-208.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1.prepare a pool in which the volume is of 'file' type # virsh vol-list netfs-nfs-pool --details Name Path Type Capacity Allocation ------------------------------------------------------------------------------------------------------- disk.img /var/lib/libvirt/images/netfs-nfs/disk.img file 1.00 GiB 0.00 B qcow2.img /var/lib/libvirt/images/netfs-nfs/qcow2.img file 1.00 GiB 0.00 B 2.add the volume to domain # virsh dumpxml r7q2 | grep disk -A 10 <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/r7q2.img' startupPolicy='optional'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> <disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='netfs-nfs-pool' volume='qcow2.img' startupPolicy='optional'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </disk> 3.remove the volume # virsh vol-list netfs-nfs-pool --details Name Path Type Capacity Allocation ---------------------------------------------------------------------------------------------------- disk.img /var/lib/libvirt/images/netfs-nfs/disk.img file 1.00 GiB 0.00 B qcow2.img.bak /var/lib/libvirt/images/netfs-nfs/qcow2.img.bak file 1.00 GiB 196.00 KiB 4.reboot the domain , fail to start . cannot find volume # virsh destroy r7q2 ; virsh start r7q2 Domain r7q2 destroyed error: Failed to start domain r7q2 error: Storage volume not found: no storage vol with matching path '/var/lib/libvirt/images/qcow2.img' Actual results: as steps 4 , guest fail to start . Expected results: the volume disk with startupPolicy='optional' should be removed and guest can start successfully. Additional info:
Fixed upstream with v2.1.0-rc1-30-ge2705cfb6e50..v2.1.0-rc1-32-ga2b97a8d912a: commit e2705cfb6e50039a5f1d1c620f7ed18b37eca36d Author: Martin Kletzander <mkletzan@redhat.com> Date: Mon Aug 1 17:52:02 2016 +0200 qemu: Make qemuDomainCheckDiskStartupPolicy self-contained commit 779a4ea9066560b92b0df462b5a6d5c127c15920 Author: Martin Kletzander <mkletzan@redhat.com> Date: Mon Aug 1 17:56:26 2016 +0200 qemu: Remove unnecessary label and its only reference commit a2b97a8d912a37ba1935bf98be4c332f42332236 Author: Martin Kletzander <mkletzan@redhat.com> Date: Mon Aug 1 17:51:28 2016 +0200 qemu: Fix support for startupPolicy with volume/pool disks
Verified on libvirt-2.0.0-4.el7.x86_64n & qemu-kvm-rhev-2.6.0-17.el7.x86_64 PASSED steps: # virsh dumpxml --inactive virtlab_test | grep disk -a10 ... <disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='tmpdir' volume='qcow2.img' startupPolicy='optional'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </disk> ... # virsh vol-list tmpdir Name Path ------------------------------------------------------------------------------ qcow2.img /tmp/dir/qcow2.img # virsh dumpxml virtlab_test | grep disk -a10 ... <disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='tmpdir' volume='qcow2.img' startupPolicy='optional'/> <backingStore/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </disk> ... # mv /tmp/dir/qcow2.img /tmp/dir/qcow2.img.bkup # virsh pool-refresh tmpdir Pool tmpdir refreshed # virsh vol-list tmpdir Name Path ------------------------------------------------------------------------------ qcow2.img.bkup /tmp/dir/qcow2.img.bkup # virsh destroy virtlab_test Domain virtlab_test destroyed # virsh start virtlab_test Domain virtlab_test started # virsh dumpxml virtlab_test | grep disk -a10 ... <the volume not listed as not existed anymore > ... #virsh edit virtlab_test //change the pool name to a non-existing name ... <disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='non-exiting-pool' volume='qcow2.img' startupPolicy='optional'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </disk> ... # virsh destroy virtlab_test virDomain virtlab_test destroyed # virsh start virtlab_test Domain virtlab_test started # virsh dumpxml virtlab_test | grep disk -a10 ... <the volume not listed as the pool not existed> ...
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://rhn.redhat.com/errata/RHSA-2016-2577.html