自宅の検証環境の 1 台は Windows Server 2008 R2 をインストールしていたパーティションを削除して、そのパーティションに対して 2012 をインストールしています。
このようなインストール方法をしていますので、E ドライブに格納していたゲスト OS のファイルは一通り残っているのですが、Hyper-V では認識していない状態となっています。
Hyper-V 3.0 ではエクスポートしていないゲスト OS をインポートすることができるようになっていますので、再インストール前に E ドライブに格納していたゲスト OS を取り込むことができます。
Windows Server 2012 では Hyper-V 関連の PowerShell のコマンドレットが充実しているので GUI で [Import-VM] を使用して、コマンドラインからインポートすることも可能です。
GUI からとコマンドラインからのインポートですが私が試した限りでは以下の状態に注意する必要があるようでした。
- 起動中の OS のイメージ (保存状態 / 起動中のスナップショット) が含まれていない
- 新規インストールにより仮想スイッチの ID が変わってしまっているため、ゲスト OS のネットワークアダプターを再割り当て
起動中の OS のイメージが含まれているゲスト OS についてはインポートしようとすると以下のようなエラーとなります。
保存された状態を削除することで、インポート作業を進めることができるようになります。
作業を進めるとネットワークアダプターの再割り当てが発生し、現状のどの仮想スイッチを割り当てるかを選択することでインポートすることができるようになります。
仮想スイッチ (仮想ネットワーク) の情報はレジストリの[HKLMSYSTEMCurrentControlSetserviceVMSMPParametersSwitchList] に格納されているので、事前にこのレジストリの情報をエクスポートしておくと対応付けができてよいかもしれないですね。
仮想スイッチの情報に関しては以下が参考になります。
Hyper-V: Virtual Networking Survival Guide
PowerShell で実行する場合はインポートするに際してのこれらの問題をコマンドラインで解決する必要があります。
Compare-VM というコマンドレットを使用することで、インポートしようとしているゲスト OS の構成ファイル (XML) からインポート時の問題がないかをレポートすることができます。
問題に応じた解決を実施し、解決した状態をインポートすることで PowerShell から再インストール前の Hyper-V 2.0 のゲスト OS をインポートすることができます。
サンプルとしては以下のような内容になるでしょうか。
$vmpath = "E:Virtual Machine" foreach($vmconfig in $xml){ |
特定のディレクトリ内にある、ゲスト OS の構成ファイルの XML を読み込み発生していた問題を解消して、解消状態のレポートを使用してインポートをするスクリプトになっています。
起動中の状態とネットワークを未接続にする対応しかしていませんが、これらの問題だけであればこのスクリプトでインポートできるかと思います。
# 2012/9/17 追記 : ネットワークに接続するような処理を追加し、未接続にするのはコメント化しています。
インプレースアップグレードをする場合にはこのようなスクリプトは不要だと思いますが、今回の環境は新規インストールでインストール前のドライブ文字と合わせた状態で一括でインポートをする必要があったので荒い作りの内容ではありますが作成してみました。
Handling Import-VM errors in Server 2012 Hyper-V がとても参考になりましたのでこちらも合わせて確認してみるとよいかもしれないですね。
[…] ざっくりとですが以下のような方法でインポートすることができます。 Windows Server 2012 の新規インストールをした場合の Hyper-V 2.0 のゲスト OS のイ… […]
検証環境の整備 « SE の雑記
15 9月 12 at 18:17