qemu-img convert to VDI corrupts image
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:\
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) |
Changed in qemu: | |
status: | Fix Committed → Fix Released |
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.