Created attachment 1039343 [details] virt-v2v debug info Description of problem: Virt-v2v failed to convert Esx guest with 2 disks configured Version-Release number of selected component (if applicable): libvirt-1.2.16-1.el7.x86_64 libguestfs-1.28.1-1.38.el7.x86_64 virt-v2v-1.28.1-1.38.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1. Prepare a health guest on Esx server, and add another hard disk for it: # virsh -c vpx://root.72.112/data/10.66.72.49/?no_verify=1 dumpxml test-juzhou Enter root's password for 10.66.72.112: ... <disk type='file' device='disk'> <source file='[datastore1] test-juzhou/test-juzhou.vmdk'/> <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='disk'> <source file='[datastore1] test-juzhou/test-juzhou_1.vmdk'/> <target dev='sdb' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> ... 2. Use virt-v2v convert this guest to local kvm host: # virt-v2v -ic vpx://root.72.112/data/10.66.72.49/?no_verify=1 test-juzhou --password-file /tmp/passwd2 [ 0.0] Opening the source -i libvirt -ic vpx://root.72.112/data/10.66.72.49/?no_verify=1 test-juzhou [ 1.0] Creating an overlay to protect the source from being modified [ 2.0] Opening the overlay [ 201.0] Initializing the target -o libvirt -os default [ 201.0] Inspecting the overlay virt-v2v: error: libguestfs error: part_get_parttype: unknown signature, of the output: BYT; If reporting bugs, run virt-v2v with debugging enabled and include the complete output: virt-v2v -v -x [...] Actual results: Convert guest failed as above. Expected results: Can convert guest to local kvm successfully. Additional info: I will attach virt-v2v debug info.
The bug is that virt-v2v chokes on a blank disk. Here's an easier way to reproduce it that doesn't require root or VMware: $ virt-builder centos-6 $ rm -f blank.img $ truncate -s 1G blank.img Put the following XML into a file called 'test.xml': <domain type='kvm'> <name>test</name> <memory>1048576</memory> <vcpu>2</vcpu> <os> <type>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='centos-6.img'/> <target dev='hda' bus='ide'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='blank.img'/> <target dev='hdb' bus='ide'/> </disk> <interface type='network'> <mac address='52:54:00:01:02:03'/> <source network='default'/> <model type='rtl8139'/> </interface> </devices> </domain> Then run virt-v2v: $ virt-v2v -i libvirtxml test.xml -o null [ 0.0] Opening the source -i libvirtxml test.xml [ 0.0] Creating an overlay to protect the source from being modified [ 0.6] Opening the overlay [ 11.7] Initializing the target -o null [ 11.7] Inspecting the overlay virt-v2v: error: libguestfs error: part_get_parttype: unknown signature, of the output: BYT; If reporting bugs, run virt-v2v with debugging enabled and include the complete output: virt-v2v -v -x [...]
The reason the error message is oddly corrupted, is because of a further and unrelated bug in parted. I filed that separately (bug 1232241).
Upstream fix: https://github.com/libguestfs/libguestfs/commit/4c73d1d4f142c6f6211c963beea68773e11fd3ef
I can reproduce this issue with old package in a simple way: virt-v2v-1.28.1-1.38.el7.x86_64 libguestfs-1.28.1-1.38.el7.x86_64 libvirt-1.2.16-1.el7.x86_64 Steps to reproduce: 1. On you local host, there is a health guest. # virsh list --all Id Name State ---------------------------------------------------- - rhel6.7-snap5-clone1 shut off 2. Create a empty disk and add it to this guest. # truncate -s 1G /tmp/blank.img # virsh dumpxml rhel6.7-snap5-clone1 ... <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/rhel6.7-snap5-clone1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/tmp/blank.img'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </disk> ... 3. Save guest xml file then undefine guest. # virsh dumpxml rhel6.7-snap5-clone1 >rhel6.7-snap5-clone1.xml # virsh undefine rhel6.7-snap5-clone1 4. Run virt-v2v cmd: # virt-v2v -i libvirtxml rhel6.7-snap5-clone1.xml -o null [ 0.0] Opening the source -i libvirtxml rhel6.7-snap5-clone1.xml [ 0.0] Creating an overlay to protect the source from being modified [ 1.0] Opening the overlay [ 163.0] Initializing the target -o null [ 163.0] Inspecting the overlay virt-v2v: error: libguestfs error: part_get_parttype: unknown signature, of the output: BYT; If reporting bugs, run virt-v2v with debugging enabled and include the complete output: virt-v2v -v -x [...] Then try to verify this bug with new build: virt-v2v-1.28.1-1.40.el7.x86_64 libguestfs-1.28.1-1.40.el7.x86_64 libvirt-1.2.16-1.el7.x86_64 Steps as above: 1. # virt-v2v -i libvirtxml rhel6.7-snap5-clone1.xml -o null [ 0.0] Opening the source -i libvirtxml rhel6.7-snap5-clone1.xml [ 0.0] Creating an overlay to protect the source from being modified [ 0.0] Opening the overlay [ 107.0] Initializing the target -o null [ 107.0] Inspecting the overlay [ 118.0] Checking for sufficient free disk space in the guest [ 118.0] Estimating space required on target for each disk [ 118.0] Converting Red Hat Enterprise Linux Server release 6.7 Beta (Santiago) to run on KVM virt-v2v: This guest has virtio drivers installed. [ 161.0] Mapping filesystem data to avoid copying unused and blank areas [ 161.0] Closing the overlay [ 161.0] Copying disk 1/2 to /var/tmp/null.tp85vi/sda (raw) (100.00/100%) [ 235.0] Copying disk 2/2 to /var/tmp/null.tp85vi/sdb (raw) (100.00/100%) [ 237.0] Creating output metadata [ 237.0] Finishing off 2. Always test again with guest on Comment 0: # virt-v2v -ic vpx://root.72.112/data/10.66.72.49/?no_verify=1 test-juzhou --password-file /tmp/passwd2 [ 0.0] Opening the source -i libvirt -ic vpx://root.72.112/data/10.66.72.49/?no_verify=1 test-juzhou [ 1.0] Creating an overlay to protect the source from being modified [ 2.0] Opening the overlay [ 106.0] Initializing the target -o libvirt -os default [ 106.0] Inspecting the overlay [ 163.0] Checking for sufficient free disk space in the guest [ 163.0] Estimating space required on target for each disk [ 163.0] Converting Red Hat Enterprise Linux Server release 6.6 (Santiago) to run on KVM virt-v2v: This guest has virtio drivers installed. [ 530.0] Mapping filesystem data to avoid copying unused and blank areas [ 532.0] Closing the overlay [ 532.0] Copying disk 1/2 to /var/lib/libvirt/images/test-juzhou-sda (raw) (100.00/100%) [ 598.0] Copying disk 2/2 to /var/lib/libvirt/images/test-juzhou-sdb (raw) (100.00/100%) [ 618.0] Creating output metadata Pool default refreshed Domain test-juzhou defined from /tmp/v2vlibvirt03b511.xml [ 620.0] Finishing off Since virt-v2v can convert guest with no error, move this bug from ON_QA to VERIFIED.
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/RHBA-2015-2183.html