Windows 10 Insider Previewを試す(第34回) - 仮想マシン上で仮想マシンが動く「Nested Hyper-V」
Windows 10 Insider Preview ビルド10565には「Nested Hyper-V」のプレビュー版を実装している。端的に説明すると、"Hyper-V上でHyper-Vを動かす"というものだ。この背景はMicrosoftがDockerで注目を集めているコンテナ型仮想化を、現在開発中のWindows Server 2016に実装しようとしているからである。将来的にWindows 10のクライアントHyper-VがNested Hyper-Vをサポートするか不明だが、今回はビルド10565上でNested Hyper-Vを試した結果をご報告したい。
○今注目のコンテナ型仮想化とは
Nested Hyper-Vに取りかかる前準備としてコンテナ型仮想化について学んでおこう。そもそも仮想化技術は複数の手法が用いられてきた。例えば「Windows XPモード」で使われていたWindows Virtual PCや、限定的に無償使用可能なVMware Playerなどはホスト型仮想化に類する。物理的には1台のPCをあたかも複数PCのように見せるハイパーバイザー型仮想化に類するのがHyper-Vだ。
そして、近年はDockerが持てはやされているようにコンテナ型仮想化に注目が集まっている。
こちらはOS機能の一部をホストOSと共有するため仮想マシンが存在しない。ハードウェアリソースの指定は難しいものの、OSのインストールといった手間がかからず、すぐに利用できるという利点を持つ。それでもユーザーから見れば独立したPCであるかのよう振る舞うため、利用者も増加傾向にある。
だが、代表的なDockerはLinux上で利用するのが一般的だ。そこでMicrosoftは現在開発中のWindows Server 2016の新機能として、「Windows Server Container」「Hyper-V Container」という2つのコンテナ技術を搭載する予定である。この技術をいち早く試せるのがWindows 10 Insider Preview ビルド10565という訳だ。
ただし、Windows 10は既定でクライアントHyper-Vが無効になっている。
コントロールパネルの「プログラムと機能」のナビゲーションウィンドウにある<Windowsの機能の有効化または無効化>から各機能を有効にして、PCを一度再起動しなければならない。特に難しい操作ではないが、Hyper-Vを有効にすると次のビルドへアップグレードする際に支障を来す可能性がある。現にビルド10525からビルド10532へアップグレードするとシステムファイルのコピープロセスでロールバックする現象が発生した。今後も同じトラブルが発生する訳ではないが、ビルド10565以降へのアップグレード時はHyper-Vを一度無効にすることをお薦めしたい。また、Hyper-Vを有効にするとホスト型仮想化ソフトウェアは使えなくなるので、使用中の方は注意してほしい。
●Nested Hyper-V環境構築を行う
○Nested Hyper-V環境構築を行う
Windows 10 Insider Preview ビルド10565でNested Hyper-Vを使用する手順は、こちらの公式ブログにまとめられている。こちらでもNested Hyper-Vの仕組みを図で示しているので引用しておこう。ご覧のとおりNested Hyper-Vは入れ子構造で動作する仕組みだが、これは従来のHyper-V上で動作する仮想マシンに、Intel-VTなどに代表されるハードウェア仮想化支援機能を見せることで実現している。
最終的にMicrosoftはコンテナ型仮想化機能の実現を目指しているので、その第一歩を踏み出したところだ。
そのためWindows 10 Insider Preview ビルド10565のNested Hyper-Vはいくつかの制限がある。先の公式ブログの説明をまとめると「動的メモリーは無効」「動作中のメモリーサイズ変更は不可能」「動作中のチェックポイントは作成不可能」「ライブマイグレーションも不可能」「<保存><復元>も不可能」だ。なお、ネットワーク機能を使うためには<MACアドレスのスプーフィングを有効にする>のチェックを外さなければならない。それでは仮想マシンを作成し、先頃リリースしたWindows 10 Insider Preview ビルド10565をインストールする。
続いて仮想マシンを一度終了し、公式ブログからPowerShellスクリプトをダウンロードしたら、先ほど作成した仮想マシン名を指定してスクリプトを実行すればNested Hyper-Vが有効になる仕組みだ。この際確認メッセージが現れた場合は[Y]キーを押して有効化を実行する。なお、執筆中に公式ブログの内容が更新され、Nested Hyper-Vに関する情報はMSDNのページで更新するそうだ。
続いて仮想マシンを起動したら、その上でHyper-Vを有効化して仮想スイッチを作成する。こちらもPowerShellで制御できると先のMSDNに書かれていたが、前準備が必要だったため、素直に仮想マシン内で操作した方が簡単だろう。
少々煩雑だが上図のように、仮想マシンのWindows 10 Insider Preview ビルド10565上で動作する仮想マシン上で、Windows 10 Insider Preview ビルド10565が動作する環境が完成した。繰り返しになるが、MicrosoftはHyper-V Containerを構成する機能の1つとしてNesting Hyper-Vの完成を目指している。現時点でWindows 10をクライアントOSとして使っているユーザーにとって、大きなメリットにならないものの、Windows 10 Insider Previewの進捗状況として今回紹介することにした。
最後に余談だが、一連の検証を終えてHyper-Vを無効にするためPCを再起動したところ、PROCESS1_INITIALIZATION_FAILEDエラーが発生し、セーフモードの起動もできなくなってしまった。現時点で原因は不明だが「Update Windows 10 Insider Preview October Update for x64-based Systems(KB3105208)」を提供するとセキュアブート環境で正しく動作しないようである(筆者の環境だけかもしれない)。
一方のWindows 10 Insider Preview 10565 PCはUEFIからセキュアブートを無効にすると、Windows 10が起動することを確認できたため、もう一方のPCは回復ドライブからコマンドプロンプトを起動し、「dism /Image:C:\ /Remove-Package /PackageName:Package_for_KB3105208~31bf3856ad364e35~amd64~~10.0.1.0」でアンインストールを実行。
合わせて「dism /Image:C:\ /Disable-Feature /FeatureName:Microsoft-Hyper-V」を実行して、Hyper-Vの削除も行うことで無事起動を確認できた。その後セキュアモードを無効にして起動を確認したPCも、再びセキュアモードを有効にしてKB3105208を再適用してみたが、再び起動しないトラブルに出くわした。redditなど海外のBBSに目を通すと、問題が発生しない環境もあるようだが、当方の環境では再現性を確認したので、万が一トラブルが発生した場合は上記の手順を試してほしい。
阿久津良和(Cactus)