Hyper-V を長年使っておりますが、エクスポートとインポートの互換性が徐々にややこしくなっているので、整理を兼ねて一度まとめておこうと思います。
今回は、Windows Server 2012 以前の Hyper-V にてホストしていた仮想マシンを 2012 R2 環境へと移行する場合を想定して、異なる OS 間での Hyper-V 仮想マシンのエクスポート / インポートがどこまで可能なのかについて検証しました。”結論だけ知りたい” という方は、表 2 をご確認ください。
[検証 1] 実際に仮想マシンを作成して、エクスポート / インポートを試してみました
Hyper-V マネージャーから仮想マシンを新規作成し、エクスポートを実行します。
以下は 2012 R2 での画面です。

なお、今回利用したホスト OS は以下の通りとなります。
- Windows Server 2008 SP2
- Windows Server 2008 R2 SP1
- Windows Server 2012
- Windows Server 2012 R2
上記の 4 つの Hyper-V ホストにてエクスポートを行いました。
2012 R2 では 2012 以前で作成していた “第一世代 仮想マシン” と ”第二世代 仮想マシン” という 2 種類の仮想マシンの作成が行えるため、Gen1, Gen2 として 2 種類を作成しています。
エクスポートした 5 つの仮想マシンを、4 つの OS にてインポートを試みた結果、以下のようになりました。
- 新しい OS にて作成した仮想マシンを古い OS のホストにインポートする事は不可
- Windows Server 2012 R2 でインポート可能なのは 2012 / 2012 R2 で作成した仮想マシンのみ
(こちらについては検証 2 もご覧ください)
Export元\Import先 |
2008 |
2008 R2 |
2012 |
2012 R2 |
2008 |
○ |
○ |
○ |
× |
2008 R2 |
× |
○ |
○ |
× |
2012 |
× |
× |
○ |
○ |
2012 R2 (Generation 1) |
× |
× |
×(*1) |
○ |
2012 R2 (Generation 2) |
× |
× |
×(*1) |
○ |
表 1 : エクスポート / インポート 実施結果
[検証 2] Windows Server 2012 R2 に 2008 / 2008 R2 上の仮想マシンをインポートする方法を模索
Hyper-V マネージャー からエクスポート / インポートを行った場合については上記のような結果となりましたが、何らかの方法で 2008 / 2008 R2 → 2012 R2 を行う事は出来ないのか検証しました。
そもそも、Windows Server 2012 ではインポート出来るのに、なぜ 2012 R2 でインポートが出来ないのか。
その原因については こちら (英語) *2 にて解説されていました。
要約すると、Windows Server 2012 より、仮想マシンのインポート / エクスポートの方式に改善が加えられており、2008 / 2008 R2 と 2012 /2012 R2 では利用されている WMI 名前空間 (内部の管理用 API のようなもの) が異なる(ざっくり言うと、インポート / エクスポート方式が異なる)という事のようです。そして、Windows Server 2012 では 2008 / 2008 R2 以前の方式もサポートされていましたが、2012 R2 より削除されたため、検証 1 のような結果となっています。(*3)
Windows Server 2012 以降で行われた、インポート / エクスポート方式の改善というのは、エクスポートの処理を実行していない場合であっても、構成ファイルや仮想 HDD ファイルが揃っていればインポートが可能というものです。裏を返すと、それ以前(2008 R2 以前)の環境では、Hyper-V マネージャーよりエクスポートを実行していないと、インポートを行う事は出来ませんでした。
それならばという事で、2008 / 2008 R2 の仮想マシンをファイル コピーでインポートが可能か試します。
Windows Server 2008 / 2008 R2 から 2012 R2 へファイルをコピーします。
- 仮想ハード ディスク ファイル (VHD ファイル)
- 構成ファイル、スナップショット一式
既定ではそれぞれ以下に保存されていますが、設定を変更されている場合は Hyper-V の設定を確認してください。
- C:UsersPublicDocumentsHyper-VVirtual hard disks
- C:ProgramDataMicrosoftWindowsHyper-V
Windows Server 2012 R2 へコピーが完了したら、Hyper-V マネージャーの [仮想マシンのインポート] よりインポートを行います。
フォルダーの検索にて、コピーした Virtual Machines フォルダを指定して [次へ] を選択すると、2008 / 2008 R2 の仮想マシンが表示されます。


そのまま進むと、仮想ハード ディスクが見つからない等のエラーが表示される場合がありますが、コピーした VHD ファイルを選択して進みます。

問題なくインポート出来るかと思いきや…
2008 R2 のものは問題なくインポートできましたが、2008 のものは以下のようなエラーになりました。

イベント ビューアーを開き、イベント ログを確認してみます。
[アプリケーションとサービス ログ] – [Microsoft] – [Windows] – [Hyper-V-VMMS] – [Admin] に、以下のエラー イベントが表示されています。
- 14242 (仮想マシン <仮想マシン名> の VM バージョン 1.0 はサポートされていません。)
- 14236 (仮想マシン <仮想マシン名> の VM バージョンをアップグレードできませんでした: エラーを特定できません (0×80004005)。)
- 19600 (<仮想マシン名> は認識できませんでした。)

どうやら 2008 は VM のバージョン(2012 R2 より導入された ”世代” とは異なります。)がサポートされないという事のようです。
[結果]
以上をまとめると仮想マシンのエクスポート / インポートは表 2 のような結果となります。
(あくまでも検証した結果であり、動作が保障されるものではない事をご了承ください)
Export元\Import先 |
2008 |
2008 R2 |
2012 |
2012 R2 |
2008 |
○ |
○ |
○ |
×(?) |
2008 R2 |
× |
○ |
○ |
△(検証2) |
2012 |
× |
× |
○ |
○ |
2012 R2 (Generation 1) |
× |
× |
×(*1) |
○ |
2012 R2 (Generation 2) |
× |
× |
×(*1) |
○ |
表 2 : 今回の検証結果
まあ、ぶっちゃけエクスポート / インポートじゃなくて、VHD だけコピーして仮想マシン作り直せばいいよねっていう話もあるのですが。構成情報とかスナップショット維持したままとなると、そうもいかないわけで。
[補足]
ホスト OS によって、サポートされるゲスト OS が異なります。詳しくは以下の URL をご確認ください。
[参考 URL]
(*1)
Importing a VM that is exported from Windows Server 2012 R2 into Windows Server 2012 is not supported
http://support.microsoft.com/kb/2868279/en-us (英語)
http://support.microsoft.com/kb/2868279/ja (機械翻訳版)
(*2)
Windows Hyper-V 2012 & 8.1 Hyper-V Did Not Find Virtual Machine to Import
http://blogs.technet.com/b/rmilne/archive/2013/10/22/windows-hyper-v-2012-amp-8-1-hyper-v-did-not-find-virtual-machine-to-import.aspx (英語)
(*3)
Features Removed or Deprecated in Windows Server 2012 R2 – WMI rootvirtualization namespace v1 (in Hyper-V)
http://technet.microsoft.com/en-us/library/dn303411.aspx (英語)