Hi,

I was debugging why my VMware products were able to accept an OVA but not
VirtualBox.
Turns out that the problem was that my underlying hard drive image was not
aligned to the grain size (128 sectors in my case) and that caused
VirtualBox to throw VERR_VD_VMDK_INVALID_FORMAT.
For the record, this is a stream optimized VMDK generated by qemu-img.

This is the code snippet from src/VBox/Storage/VMDK.cpp:vmdkFileInflateSync:

    if (cbActuallyRead != cbToRead)
        rc = VERR_VD_VMDK_INVALID_FORMAT;
    return rc;
}

cbToRead is set to VMDK_SECTOR2BYTE(pExtent->cSectorsPerGrain). In my VMDK
generated by qemu-img (qemu HEAD as of a few days back) this check fails
for the last grain:
cbActuallyRead: 50176, cbToRead: 65536

Removing this check seems to provide a working result. The VM boots at
least.
For now I made sure to align my underlying drive image to a 64KiB boundary
which solves the problem I'm having.

Long term however my question is: Is this a problem on qemu-img's side or
VirtualBox?
Even if qemu-img shouldn't generate these VMDK files, is there any merit to
removing the check out of compatibility with VMware products? Does the
standard take a stance in any direction?

Thanks,
Christian
_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev

Reply via email to