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

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

Шаги включают

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

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

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

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

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

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

  7. Теперь я копирую этот VHD на машину с гипер 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++;

}

Спасибо

0

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]