[vbox-dev] VDCopy() fix for VHD

Klaus Espenlaub Klaus.Espenlaub at Sun.COM
Wed Oct 7 21:02:43 GMT 2009


Huihong Luo wrote:
> after the fix, VHD->VMDk seems to be working fine, but VHD->VDI still 
> not working, the generated vdi disk throws invalid header error.

Don't think it's a good idea to apply the change before understanding 
what's still going wrong in the VDI case. Should be pretty easy to 
figure out, by running "VBoxManage internalcommands dumphdinfo 
/path/to/broken.vdi", and setting a breakpoint on vdiValidateHeader. 
With a little bit of single stepping one should immediately see what's 
causing trouble. The VDI code is very paranoid.

Klaus

> 
> --- On *Wed, 10/7/09, Huihong Luo /<huisinro at yahoo.com>/* wrote:
> 
> 
>     From: Huihong Luo <huisinro at yahoo.com>
>     Subject: [vbox-dev] VDCopy() fix for VHD
>     To: vbox-dev at virtualbox.org
>     Date: Wednesday, October 7, 2009, 12:30 AM
> 
>     Can you guys add the following code to function VDCopy() in
>     VBoxHDD.cpp? right before VDCreateBase() is called.
>      
>     It resets the geometry if cSectors > 63, VHD disk somehow has more
>     than 63 sectors.
>      
>      
>         /* vmlite, fix converting error from VHD */
>         if (PCHSGeometryFrom.cHeads > 16 || PCHSGeometryFrom.cSectors > 63)
>         {
>          Assert(RT_MIN(cbSize / 512 / 16 / 63, 16383) -
>             (unsigned int)RT_MIN(cbSize / 512 / 16 / 63, 16383) == 0);  
>          PCHSGeometryFrom.cCylinders = (unsigned int)RT_MIN(cbSize / 512
>     / 16 / 63, 16383);
>          PCHSGeometryFrom.cHeads = 16;
>          PCHSGeometryFrom.cSectors = 63;
>         }
>         /* vmlite */
>                     rc = VDCreateBase(pDiskTo, pszBackend, pszFilename,
>     cbSize,
>                                       uImageFlags, szComment,
>                                       &PCHSGeometryFrom, &LCHSGeometryFrom,
>                                       NULL, uOpenFlagsFrom &
>     ~VD_OPEN_FLAGS_READONLY, NULL, NULL);
>                     if (RT_SUCCESS(rc) && !RTUuidIsNull(&ImageUuid))
>                         
>     pDiskTo->pLast->Backend->pfnSetUuid(pDiskTo->pLast->pvBackendData,
>     &ImageUuid);
>                     if (RT_SUCCESS(rc) && !RTUuidIsNull(&ParentUuid))
>                         
>     pDiskTo->pLast->Backend->pfnSetParentUuid(pDiskTo->pLast->pvBackendData,
>     &ParentUuid);
>      
>      
>     - Huihong
> 
> 
>     -----Inline Attachment Follows-----
> 
>     _______________________________________________
>     vbox-dev mailing list
>     vbox-dev at virtualbox.org
>     <http://us.mc343.mail.yahoo.com/mc/compose?to=vbox-dev@virtualbox.org>
>     http://vbox.innotek.de/mailman/listinfo/vbox-dev
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> vbox-dev mailing list
> vbox-dev at virtualbox.org
> http://vbox.innotek.de/mailman/listinfo/vbox-dev




More information about the vbox-dev mailing list