Ticket #1504 (closed defect: fixed)

Opened 6 years ago

Last modified 4 years ago

Virtualbox 1.6 appears to be corrupting VMDK files

Reported by: nzchris73 Owned by:
Priority: major Component: virtual disk
Version: VirtualBox 1.6.0 Keywords:
Cc: Guest type: other
Host type: other


After upgrading to Virtualbox 1.6 I got the following error in Event Viewer when trying to mount the VMDK file used as a secondary HDD for one of my machines. I created a new VMDK file and tried it again but got the same result. After reverting back to 1.5.6 VMDK files worked ok. Windows XP SP3 host running Windows XP client.

Command ""C:\Program Files\VMware\VMware DiskMount Utility\vmware-mount.exe" V: "E:\Virtual Machines\UBCD4WIN\Windows XP Professional.vmdk" /y" failed with COM error: 0x80004005 (last partition extends past end of disk (2609:1023))

Change History

comment:1 Changed 6 years ago by kleinfelter

Some of the time there is a work-around available. If you're using a virtual disk with a descriptor file plus a data file (e.g. foo.vmdk and foo-flat.vmdk), VirtualBox adds three lines to the descriptor file.

To make the vmdk mountable again by vmware-mount, delete the 3 lines that begin with ddb.geometry.bios from the descriptor file.

Details are available at

comment:2 Changed 6 years ago by frank

  • Component changed from other to virtual disk

comment:3 Changed 5 years ago by frank

  • Status changed from new to closed
  • Resolution set to fixed

Please reopen if this problem persists with a recent version 2.1.4 or later.

comment:4 Changed 4 years ago by chriswolf

Since I am having this problem even with VirtualBox 3.1.2, I want to add some additional information. Not only does VirtualBox add three disk description entries prefixed with, ddb.geometry.bios, but VB also adds three more lines with the prefix, ddb.uuid, so those should be removed as well.

If your VMDK file is of type=0 (monolithicSparse), then you can't just edit the file because the ASCII disk descriptor is sandwiched between binary sections of the VMDK. In that case, for monolithicSparse type VMDK files, use this script:

# Strip out VirtualBox seetings from VMDK file
dd if=$1 bs=512 count=1 of=vm.hdr && \
dd if=$1 bs=512 skip=1 count=2 of=vm.ddesc && \
cat vm.ddesc | grep -a -v ddb.uuid.image \
       | grep -a -v ddb.uuid.modification \
       | grep -a -v ddb.uuid.parent \
       | grep -a -v ddb.uuid.parentmodification \
       | grep -a -v ddb.geometry.biosCylinders \
       | grep -a -v ddb.geometry.biosHeads \
       | grep -a -v ddb.geometry.biosSectors > vm.novb.ddesc && \
dd if=vm.novb.ddesc conv=sync,notrunc bs=512 count=2 && \
dd if=$1 bs=512 skip=3 of=vm.nohdr && \
cat vm.hdr vm.nohdr > $1.fixed

After the script is run, the original VMDK (with added VB settings) is left intact and a copy of the VMDK file is made whose name is suffixed with ".fixed", which you'll need to rename to boot with VMware.

If you want a procedure to be able to boot the VMDK with either VirtualBox or VMware, then you can reconfigure the guest OSs grub to not search for it's root device by UUID, as I outline in detail here:

Note: See TracTickets for help on using tickets.
ContactPrivacy policyTerms of Use