0

複数のパーティションを持つディスクの動的 vhd を作成しています。

必要な手順は次のとおりです。

  1. まず、ヘッダーとフッターを作成し、バット (ブロック割り当てテーブル) のサイズを計算して VHD を作成します。

  2. 次に、win32 API を使用してディスク サイズとパーティションの詳細を取得します

  3. ボリュームのスナップショットを作成します

  4. 親ディスクの mbr を読み取り、セクター オフセットを上書きしてから、複数のパーティションを含む mbr を VHD に書き込みます。

  5. シャドウ コピーごとに、スナップショットを読み取り、VHD ファイルに書き込みます

  6. このプロセスは正常に完了し、diskmgmt.msc で vhd を開きます。両方のパーティションが表示され、それらのパーティションのデータを確認できます。

  7. 次に、この vhd を hyper V マシンにコピーしてから、新しい vm を作成し、この vhd をそのマシンに追加します。

  8. 起動すると「ディスク読み取りエラー」というエラーが表示されますが、このvhdを既存のOSに追加し、ブートローダーにブートエントリを追加すると、正常に起動します。

何がうまくいかないのかわかりません。もし誰かが来たら、私にいくつかの指針を教えてください。

ここに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++;

 }

ありがとう

4

1 に答える 1