VHD无法在超V启动V
问题描述:
我正在为有多个分区的磁盘创建一个动态vhd。VHD无法在超V启动V
涉及的步骤
首先,我通过创建页眉和页脚,计算球棒(块分配表)的大小创建VHD。
然后我使用Win32 API
我带卷
我读父磁盘的MBR的快照,并改写行业偏移,然后我写的多分区的MBR获得磁盘的大小和分区的详细信息VHD。
现在,每一个卷影副本我读快照和写入VHD文件
这个过程成功完成,然后我打开diskmgmt.msc。它的VHD显示两个分区,我可以看到那些数据分区。
现在我将这个vhd复制到超V机器,然后创建一个新的vm并将此vhd添加到该机器。
它启动时会给我一个错误“磁盘读取错误”,但是当我将此vhd添加到现有的操作系统并在引导装载程序中添加启动项时,它会启动正常。
我不知道发生了什么问题。如果有人给我指点一下。
下面是代码编写MBR
/* Stream out the first data block which contains only the MBR */
BYTE zerosector[512] = {0};
zerosector[0] = 0x80;
assert(0 != WriteFile(hFile, zerosector, 512, &nWritten, NULL)); /* here goes the first block's block bitmap */
zerosector[0] = 0x00;
unint16 mcount = 0;
unint64 indexOffset = 0;
memcpy(&mbr,mbrbuff,512);
for(vector<PartOffset*>::iterator pTemp = pPart.begin();pTemp!=pPart.end();pTemp++)
{
mbr.partition[mcount].type = 0x07;
mbr.partition[mcount].start_sector = 4096 + indexOffset ;
mbr.signature = 0xAA55;
mbr.partition[mcount].total_sectors = (((*pTemp)->total_sectors)) + 1 ;
indexOffset += ((((*pTemp)->total_sectors))) + 1;
//if(mcount==0)
// indexOffset += ((((*pTemp)->start_sector)/512));
mcount++;
}
感谢
你的代码在哪里? – Gabe 2013-03-08 08:14:32
我ahove发布代码写入mbr – singh 2013-03-08 08:43:07
你在哪里写你的'mbr'变量到磁盘? – Gabe 2013-03-08 09:44:51