本文書は「Running Nested VMs」Ver.55の私訳です。原文が改版されている場合、Internet Archiveで2016年3月12日時点の原文を確認できます。
用語
"running nested VMs"は仮想マシンを別の仮想マシン内で実行することを指します。外側のゲスト_は物理ハードウェア上で稼動する仮想マシンです。内側のゲスト(あるいは_入れ子のゲスト/Nestedゲスト)は別の仮想マシン上で稼動する仮想マシンです。_ホストハイパーバイザ_は物理ハードウェア上で稼動するハイパーバイザです。_ゲストハイパーバイザ_は仮想マシン内で稼動するハイパーバイザです。混乱を避けるため、ここではそれ以上の深い入れ子については考えないことにします。
どのVMware製品でも、Type 1ハイパーバイザはゲストOSとしてサポートされていないことには注意してください。具体例を挙げると、ESXiはゲストOSとしてサポートされておらず、本番環境でゲストハイパーバイザとしてESXiを稼動させることは禁止しています。(ゲストハイパーバイザーとしてのESXiの稼動に関するVMwareの公式のポリシーについては http://kb.vmware.com/kb/2009916 参照。)
仮想化されたHVを使用するゲストハイパーバイザの実行
ほとんどのハイパーバイザーはハードウェアによる仮想化アシスト(HV)を必要とします。VMware製品では、Intelハードウェア上で64bitゲストを使用する際にハードウェアによる仮想化アシストが必要です。AMDハードウェア上で64bitゲストを使用する際にもハードウェアによる仮想化アシストが必要です。物理CPUのハードウェアによる仮想化アシスト機能は、(VMware製であれ他社製であれ)ほとんどのハイパーバイザーはHVを仮想化しないので、一般には仮想マシン内では利用できません。ですが、Workstation 8、Player 4、Fusion 4、ESXi 5.0(またはそれ以降)はHVの仮想化を提供するので、ハードウェアによる仮想化アシストを必要とするゲストハイパーバイザーを実行することができます。
外側のゲストで仮想化されたHVが有効にされていれば、ハードウェアによる仮想化アシストを必要とするゲストハイパーバイザーを実行することができます。より具体的にいえば、これは64bitのNestedゲストをVMwareゲストハイパーバイザー上で実行できるということです。
ESXi 6.0
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン9以降の仮想マシンでは、仮想化HVが完全サポートされています。仮想化HVを有効にするにはWebクライアントを使用してCPUの設定画面に移動します。「ハードウェアアシストによる仮想化をゲストOSに公開」の前にあるチェックボックスにチェックを入れます。この設定は旧来のC#クライアントでは利用できません。
Workstation 11 / Player 7 / Fusion 7
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン9以降の仮想マシンでは、仮想化HVが完全サポートされています。仮想化HVを有効にするには、VM->Settingsを選択し、CPUの設定画面に移動します。「Virtualize Intel VT-x/EPT or AMD-V/RVI.」の前にあるチェックボックスにチェックを入れます。
Workstation 10 / Player 6 / Fusion 6
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン9または10の仮想マシンでは、仮想化HVが完全サポートされています。仮想化HVを有効にするには、VM->Settingsを選択し、CPUの設定画面に移動します。「Virtualize Intel VT-x/EPT or AMD-V/RVI.」の前にあるチェックボックスにチェックを入れます。
ESXi 5.5
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン9または10の仮想マシンでは、仮想化HVが完全サポートされています。仮想化HVを有効にするにはWebクライアントを使用してCPUの設定画面に移動します。「ハードウェアアシストによる仮想化をゲストOSに公開」の前にあるチェックボックスにチェックを入れます。この設定は旧来のC#クライアント(訳注:Windowsアプリケーション版の「vSphere Client」)では利用できません。
Workstation 9 / Player 5 / Fusion 5
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン9の仮想マシンでは、仮想化HVが完全サポートされています。仮想化HVを有効にするには、VM->Settingsを選択し、CPUの設定画面に移動します。「Virtualize Intel VT-x/EPT or AMD-V/RVI.」の前にあるチェックボックスにチェックを入れます。
ESXi 5.1
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン9の仮想マシンでは、仮想化HVが完全サポートされています。仮想化HVを有効にするにはWebクライアントを使用してCPUの設定画面に移動します。「ハードウェアアシストによる仮想化をゲストOSに公開」の前にあるチェックボックスにチェックを入れます。この設定は旧来のC#クライアントでは利用できません。
Workstation 8 / Player 4
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン8の仮想マシンでは、仮想化HVが利用可能です。仮想化HVを有効にするには、VM->Settingsを選択し、CPUの設定画面に移動します。「Virtualize Intel VT-x/EPT or AMD-V/RVI.」の前にあるチェックボックスにチェックを入れます。仮想化HVを有効化するとこの仮想マシンがほかのVMware製品との互換性を失う旨の警告が表示されるでしょう。具体的には、この仮想マシンをESXi 5.0ホストに移動すると、仮想化HVは追加設定なしでは利用できません。
Fusion 4
Intel VT-xとEPT、またはAMD-VとRVIがサポートされたホスト上の仮想ハードウェアバージョン8の仮想マシンでは、仮想化HVが利用可能ですが、ユーザーインターフェースからは選択できません。仮想化HVを有効にするには、ゲスト構成ファイル(訳注:.vmxファイル)を直接編集し以下の行を追加します:
vhv.enable = TRUE
ESXi 5.0
ESXi 5.0では、デフォルトでは仮想化HVが禁止されています。この機能はVMware社内部で試験目的で使用されていますが、製品環境には推奨されません。Intel VT-xまたはAMD-Vがサポートされたホスト上で利用可能ですが、Second Level Address Translation(EPTまたはRVI)がないシステムでは、SLATなしではパフォーマンスが出ないため推奨されません。残念ながらAMD "Bulldozer" CPU上のESXi 5.0ではこの機能が働きません。
この機能の利用を許可するには、ESXiの管理者が物理ホスト上の/etc/vmware/configファイルに以下の構成オプションを追加する必要があります。
vhv.allow = TRUE
ESXi管理者が許可していれば、仮想ハードウェアバージョン8の、ゲストOS種別が"ESX Server 4"または"ESX Server 5"の仮想マシンではデフォルトで仮想化HVが有効になります。他のゲストOSに対して仮想化HVを有効にするには、外側のゲストの構成ファイル(訳注:.vmxファイル)に以下の行を追加します:
cpuid.1.ecx="----:----:----:----:----:----:--h-:----"
cpuid.80000001.ecx.amd="----:----:----:----:----:----:----:-h--"
cpuid.8000000a.eax.amd="hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh"
cpuid.8000000a.ebx.amd="hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh"
cpuid.8000000a.edx.amd="hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh"
仮想化HVなしでのゲストハイパーバイザーの実行
ESXi 5.0、Workstation 8、またはFusion 4より前のVMware製品は、物理CPUのハードウェアによる仮想化アシスト(あるいはAMDプロセッサの64ビットセグメント制限チェック)機能を仮想化しませんでした。ホストハイパーバイザが古いVMware製品であるか、ホストがEPTまたはRVIをサポートしない(けれどIntel VT-xまたはAMD-Vをサポートする)としても、仮想化HV抜きでnested guestを実行することは可能です。しかしながら、可能なのはVMwareゲストハイパーバイザ上でバイナリトランスレーションを使って、32ビットのnestedゲストを動作させることに限られます。あるいはWindows Virtual PCまたはVPC2007のバイナリトランスレーション機能を使って、32ビットのnestedゲストを動作させることです。
この構成でも、実行されるnested VMはホストのハードウェアによる仮想化アシストを必要とします。さらに、他のゲストもハードウェアによる仮想化アシストを使用するように構成しなければいけません。ハードウェアによる仮想化アシストを他のゲストで有効にするには、VMware Products and Hardware-Assisted Virtualization (VT-x/AMD-V)を参照してください。
特記事項
nestedゲストでのネットワーク
nestedゲストでネットワークを利用可能にするには、外側のゲストのネットワークインターフェースは無差別(promiscuous)モードにする必要があります。詳細はKB 287 (Linuxホスト)またはKB 1004099 (ESXホスト)を参照してください。Windowsホストには特別な設定は必要ありません。
EVC Clusters
EVCクラスタではすべてのCPUが同様の動作をするように機能マスクがされているため、EVCクラスタに所属しているホストでは仮想化HVは機能しないことがあります。
VMware Tools
ESXi 5.0、Workstation 8およびFusion 4以降のVMwareハイパーバイザでは、ホストハイパーバイザとゲストハイパーバイザ間のハンドシェークが実装され、内側のゲストと外側のゲストの両方でVMware Toolsの実行が可能になりました。両方のハイパーバイザがこれ以降のものであることが必要なことに注意してください。
どちらかのハイパーバイザがより古いものの場合、VMware Toolsは内側のゲストでしか実行できません。VMware Toolsが正常に動作させるには、外側のゲストOS種別を"ESX Server 4"または"ESX Server 5"にするか、外側のゲストの構成ファイルに以下の行を追加する必要があります:
monitor_control.restrict_backdoor = TRUE
この設定はESX 3.0ホストでは使用できないことに注意してください。ホストハイパーバイザがESX 3.0の場合、内側のゲストではVMware Toolsを使用できません。
ゲストハイパーバイザ
ESX(i)
VMwareのサーバー製品の学習、サーバー構築の経験、トレーニングの提供、デモの提示、構成の試験などでESX(i)がゲストハイパーバイザとして利用されるでしょう。VMwareはnested ESX(i)サーバーを製品環境としてはサポートしません。nest構成のESXi実行時に起きた問題は、VMwareのサポート及びサービスレベルアグリーメントの範囲外です。あなたが何かの問題に当たったとしても、VMware社は問題を受け付ける、即座に調査する、対応策を提供するといった義務を負いません。ですが、弊社のエンジニアが調査できる再現可能なシナリオを提供できるように、Nested Virtualizationコミュニティフォーラムでの議論に参加しています。
Windows Virtual PC (XP mode)
Windows 7でXPモード仮想マシンを実行するのに必要なファイルはhttp://www.microsoft.com/windows/virtual-pc/download.aspxから入手できます。Windows Virtual PCをバイナリトランスレーションで利用するには、このダウンロードファイルがすべて必要です。バイナリトランスレーションを使わない場合、Windows Virtual PCはハードウェアによる仮想化アシストを必要とします。
Windows Virtual PCにはIntel VT-x上で使用した場合に省電力状態に関連するバグがあります。nestされたWindows Virtual PC仮想マシンを稼働させたまま外側のWindows仮想マシンをスリープまたはハイバネートさせようとすると、外部ゲストが復帰した時点で様々な問題を経験することになります。この問題を解決するには、http://support.microsoft.com/?kbid=977632からhotfixをインストールする必要があるでしょう。仮にこれの記述が適用を指示しているように見えなくても、このhotfixはスリープ/ハイバネートに関するいくつかの問題を解消してくれます。
Hyper-V
Hyper-Vはハードウェアによる仮想化アシストを必要とするため、ESXi 5.0、Workstation 8、Player 4、Fusion 4(またはそれ以降)でのみ実行できます。ESXi 5.0下でゲストハイパーバイザーとした場合、Hyper-Vのパフォーマンスは比較的低くなりますが、Workstation 8、Player 4、Fusion 4(またはそれ以降)下でのパフォーマンスはまあまあ良好です。
Workstation 9、Player 5、Fusion 5では、ゲストOS種別を"Hyper-V"としてください。
これより前の製品でHyper-Vを使うには、外側のゲストで以下の追加設定が必要です:
hypervisor.cpuid.v0 = FALSE
このオプションなしでは、Hyper-V R2でnestされた仮想マシンを起動しようとすると、以下のエラーで失敗します:
Failed to create partition: Unspecified error (0x80004005)
このオプションなしでは、Hyper-V R3のインストールが以下のメッセージで失敗します:
Hyper-V cannot be installed: A hypervisor is already running.
Hyper-V R4は仮想ハードウェアバージョン11以降が必要です。これより古い仮想ハードウェアバージョンでは、Hyper-V R4は以下のエラーで失敗します:
Hypervisor launch failed; The hypervisor was unable to initialize successfully (phase 0x2), and was not started. This initialization failure may be the result of a platform configuration or firmware issue. Contact your system vendor for more information or updated firmware.>
Xen
Xenはハードウェアによる仮想化アシストを必要とするため、ESXi 5.0、Workstation 8、Player 4、Fusion 4(またはそれ以降)でのみ実行できます。大半のLinuxディストリビューションが提供するバージョンのXenは、ゲストハイパーバイザーとした場合のパフォーマンスは比較的低くなります。Citrix XenServer 5.6はまあまあ良好なパフォーマンスがでます。
KVM
KVMはハードウェアによる仮想化アシストを必要とするため、ESXi 5.0、Workstation 8、Player 4、Fusion 4(またはそれ以降)でのみ実行できます。Intel VT-xを使用するIntel CPU上でゲストハイパーバイザーとした場合、KVMのパフォーマンスは比較的低くなります。パフォーマンスはLinuxカーネルバージョン3.0以降で改善されています。
いくつかのVMware製品下では、libvirtdがawaiting completion of a dmidecode child processによりハングします。これが生じると、ローカルハイパーバイザーにアクセスできなくなります。ワークアラウンドとして、外側のVMで以下の構成オプションによりCPUのホットアドを無効化してください:
vcpu.hotadd = FALSE
他ハイパーバイザー下でのゲストハイパーバイザとしてのVMware
他ハイパーバイザ下で実行されていることを検出したとき、VMware製品はnestされたゲストの起動方法に困ることになります。この制約を回避するために、nestされたゲストの構成ファイルに以下のオプションを追加してください:
vmx.allowNested = TRUE
Hyper-V下のVMware Workstation
ホストがSLATをサポートしている場合、Hyper-V下のVMwareでバイナリトランスレーションを(32ビットゲストに対して)実行できます。SLATのサポートがない場合、VMware Workstation下でnestされた仮想安心を実行用とすると、Hyper-VはホストでマシンチェックとBSODを起こします。
Hyper-Vの役割が有効になっている場合、WorkstationインストーラーはWorkstationのインストールを許可しないので、インストールを実行するにはHyper-Vを無効化する必要があるでしょう。Hyper-Vを削除してしまうのではなく、Hyper-Vを無効化した状態でWindows 2008を起動するための構成方法は、http://blogs.msdn.com/b/virtual_pc_guy/archive/2008/04/14/creating-a-no-hypervisor-boot-entry.aspxを参照してください。
本ページ内容は投稿者の個人的なメモです。内容を保証するものではありません。また投稿者の所属組織等とは一切かかわりがありません。