2013-03-08 5 views
0

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

Стадии является

  1. Сначала я создать виртуальный жесткий диск путем создания верхних и нижних колонтитулов и вычисления летучей мыши (блок таблица размещения) размера.

  2. Тогда я получить размер диска и раздела деталей с использованием Win32 API

  3. я делать снимки томов

  4. я прочитал МУРЗ родительского диска и перезапись смещения сектора, то я пишу 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

Где ваш код? – Gabe

+0

i ahove написал код для записи mbr – singh

+0

Где вы пишете переменную 'mbr' на диск? – Gabe

ответ

0

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

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