仮想化でプリセールスしてるSEの一日

VMware から Azure まで、インフラや仮想化の最新情報をベンダー色をできるだけ抑えて綴っていきます

Hyper-V で無償 P2V (2) - Disk2VHD による P2V の仕組み

f:id:ogawad:20190203195637p:plain:right

一昨日 のつづきです。
Disk2VHD による P2V の仕組みを紹介します。


Disk2VHD の P2V 機能が行っていること

最初に、Disk2VHD の P2V 機能、つまり「Prepare for use in Virtual PCチェックボックスを有効にすると、VHDファイルのビルド時に3つの処理が行われます。

  • system32 ディレクトリに 「ntkrnlpa.exe」*1 をコピー
  • system32 ディレクトリに 「halacpi.dll」*2 をコピー
  • boot.ini に、コピーした上記代理ファイルを利用する起動セクションを既定として追記


VHD ファイルの boot.ini を開いてみると、
通常の起動オプションに加えてもう一つ追加されているのが分かります。



                 ↓


ちなみに、boot.ini 上で /KERNEL=/HAL= スイッチは、通常明示的に指定しません。このスイッチを省略すると、次のファイルを利用してブートしています。

  • %SYSTEMROOT%\system32\ntoskrnl.exe
  • %SYSTEMROOT%\system32\hal.dll


特に HAL については、ハードウェア環境や CPU 搭載数によって、
halaacpi.dll や halmacpi.dll など最適なもの異なります。
しかし、ブートローダは明示的に指定しない限り hal.dll で起動しようとするため、
halaacpi.dll → hal.dll といったように名前を変えて格納されています。



移行元で利用している HAL によって、P2V できない場合がある

実は、P2V できない*3 ハードウェアがあります。

P2V できないハードウェアは何かと言うと、ACPI 未対応のハードウェアです。といっても分かりにくいと思いますので、簡単に見分ける方法を2つ紹介します。

一つは、上記 hal.dll のプロパティ画面です。
ここで正式ファイル名の値が 「hal.dll」 そのままの場合、そのコンピューターは ACPI 非対応と認識されています。このコンピューターは P2V できないでしょう。

もう一つ見分ける方法は、デバイスマネージャです。
「デバイス(接続別)」に並べた状態で、下図の赤枠の部分が 「標準 PC」 と表示されている場合は、そのコンピューターは ACPI 非対応と認識されています。



移行元が Windows Vista / 2008 以降の場合

boot.ini という言葉から推察できるとおり、Disk2VHD の「Prepare for use in Virtual PC」機能は boot.ini の無い Windows Vista / 2008 以降では動作しません。

但し、Windows Vista / 2008 以降では、Disk2VHD のこの機能が boot.ini に行っている内容を BCD*4 に手動で行えば OK です(代理 HAL のコピーは不要)。


手順については、次回の Disk2VHD による P2V 手順 で紹介したいと思います。

*1:PAEを有効にしたOSカーネル

*2:ACPI PC 用の標準 HAL

*3:「0x0000007b」STOP エラーで起動しない

*4:Boot Configuration Data の略で boot.ini の後継技術