VHD не загружается в Hyper V

Я создаю динамический vhd для диска, имеющего несколько разделов.

Необходимые шаги:

  1. Сначала я создаю VHD, создавая верхний и нижний колонтитулы и вычисляя размер bat (Block Allocation Table).

  2. Затем я получаю информацию о размере диска и разделе с помощью Win32 API.

  3. Я делаю снимки томов

  4. Я читаю mbr родительского диска и перезаписываю смещения секторов, затем записываю mbr с несколькими разделами на VHD.

  5. Теперь для каждой теневой копии я читаю снимок и записываю в файл VHD.

  6. Этот процесс завершается успешно, и затем я открываю vhd в diskmgmt.msc. Он показывает оба раздела, и я могу видеть данные в этих разделах.

  7. Теперь я копирую этот vhd на машину Hyper V, а затем создаю новую vm и добавляю этот vhd на эту машину.

  8. Когда он запускается, он выдает ошибку «Ошибка чтения диска», но когда я добавляю этот 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++;

 }

Спасибо


person singh    schedule 08.03.2013    source источник
comment
Я опубликовал код для записи mbr   -  person singh    schedule 08.03.2013
comment
Куда вы записываете свою mbr переменную на диск?   -  person Gabe    schedule 08.03.2013
comment
для смещения vhd составляет 1536 байт + sizeof (таблица распределения блоков) в байтах + 512 байтов для растрового изображения, при этом смещении я записываю mbr в файл vhd   -  person singh    schedule 08.03.2013


Ответы (1)


DiscUtils предоставляет справочник по доступу и записи файлов .VHD, совместимых с Hyper-V.

Посмотрите, как он создает VHD, начиная с DiskFactory

person Donal Lafferty    schedule 09.12.2013