qemu-img convert to VDI corrupts image

Bug #919242 reported by jbthiel
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Stefan Weil
qemu-kvm (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

Hello, thanks to all for the great work on qemu, an excellent technology.

There appears to be a serious bug in qemu-img 1.0, yielding silent corruption when converting an image to VDI format. After conversion to VDI, an image with WinNT4sp6 (NTFS) yields a boot failure (details below) -- presumably due to some corruption, since the image works fine as the source .vhd (from virtualPC6), and also when converted to QCOW2 or VMDK format.

TEST CASE:
OS X 10.6.8 on Intel i5
Qemu 1.0 from mac "ports" (macports.org)
The source BaseDrive.vhd image is from VirtualPC6 (Mac)
$ qemu-img info BaseDrive.vhd
image: BaseDrive.vhd
file format: vpc
virtual size: 2.0G (2096898048 bytes)
disk size: 190M

The image has a fresh Windows NT4sp6 NTFS installation. It's from VirtualPC6 (Connectix) inside a .vhdp package directory on OS X. Convert via:
  qemu-img convert -f vpc -O vdi BaseDrive.vhd BaseDrive.vdi

Now run the resulting vdi file with:
  qemu-system-i386 -cpu pentium BaseDrive.vdi
On boot, NT4 crashes with
STOP: c000026c {Unable to Load Device Driver}
\??\C:\WINNT\system32\win32k.sys device driver could not be loaded.
Error Status was 0xc0000221

Both qemu 1.0, and VirtualBox 4.1.8 yield the same error on this VDI.

Conversion of the exact same image to QCOW2 or VMDK format yields a working image (ie. qemu and VirtualBox boot fine):
  qemu-img convert -f vpc -O qcow2 BaseDrive.vhd BaseDrive.qcow2
  OR
  qemu-img convert -f vpc -O vmdk BaseDrive.vhd BaseDrive.vmdk

Furthermore, I tested converting from raw, qcow2, and vmdk to vdi, and in all these cases the original format boots, but the converted VDI fails to boot as above.

Along the way, I think I also tested a VDI natively created and installed from VirtualBox, which did boot fine in qemu. Thus the problem appears to be not in qemu-system-i386 reading the VDI, rather in the qemu-img conversion to VDI.

SEVERITY: CRITICAL
The severity of this bug is critical as it appears to produce a silently corrupted VDI image. (which is presumably the cause of the boot failure; though I have not explicitly check-disked the resulting VDI image). It also impedes easy inter-use between qemu and VirtualBox.

WORKAROUND:
The workaround is to use the VMDK format instead of VDI.
VMDK is supported by both qemu and VirtualBox (and vmWare).

I can supply a test VHD/QCOW2/VMDK image if desired to reproduce the bug. (but it's large, 190M)

-- jbthiel

Changed in qemu:
assignee: nobody → Stefan Weil (ubuntu-weilnetz)
Revision history for this message
Stefan Weil (ubuntu-weilnetz) wrote :

There is a bug in the VDI code of all current QEMU versions:

when two new blocks (1 MiB clusters) were allocated in sequence and the
2nd new block was only partially filled with data, the unused parts of the
new block still contained data of the 1st block instead of 0.

http://patchwork.ozlabs.org/patch/137186/ fixes this bug.

Changed in qemu:
status: New → Fix Committed
Changed in qemu-kvm (Ubuntu):
status: New → Fix Committed
Revision history for this message
Serge Hallyn (serge-hallyn) wrote :

Hi Stefan,

thanks for the fix. Should I queue it up in the Ubuntu package, or should I wait on that?

Changed in qemu:
status: Fix Committed → Fix Released
Revision history for this message
Stefan Weil (ubuntu-weilnetz) wrote :

Hi Serge,

yes, please queue it up. The fix was committed to QEMU git master,
but it is still missing in QEMU 1.0.1 and older versions.
So if you have a QEMU patch queue for Ubuntu , it's needed there.

Thanks,

Stefan

Revision history for this message
Serge Hallyn (serge-hallyn) wrote :

Thanks very much, Stefan. New package pushed.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package qemu-kvm - 1.0+noroms-0ubuntu6

---------------
qemu-kvm (1.0+noroms-0ubuntu6) precise; urgency=low

  [ Stefan Weil ]
  * debian/patches/block_vd_zero_unused_parts: Zero unused parts when
    allocating a new block (LP: #919242)
 -- Serge Hallyn <email address hidden> Mon, 20 Feb 2012 13:33:05 -0600

Changed in qemu-kvm (Ubuntu):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.