VirtualBox 5.0 for Linux(Nested VirtualBox編)


VirtualBoxはマルチプラットフォーム対応仮想化ソフトの代表格として長く使用されています。
2015年7月9日にはそのVirtualBox 5.0がリリースされました。
更に2015年11月10日にはそのメンテナンスリリース版であるVirtualBox 5.0.20がリリースされました。
今回はVirtualBox 5.0.20とSUSE Linux Enterprise Server 11 SP4(SLES 11 SP4)を使用してESXi上でNested VirtualBox環境を構築してみました。
以下にそのVirtualBox 5.0.20(以下5.0と略)を使用したNested VirtualBox環境の構築手順を中心に紹介します。
※Windows版VirtualBox 5.0やCentOS 7上でのVirtualBox 5.0についても若干触れています。

今回使用したPCのハードウェア/ソフトウェア構成は以下の通りです。



■ Nested VirtualBoxについて
VirtualBoxのインストール時にそのカーネルと整合性のとれたvboxdrvというカーネルドライバが自動生成されます。
VirtualBoxをインストールしたシステムをブートするとVirtualBoxソフトを起動しなくてもvboxdrvが自動起動されます。
VirtualBoxはHypervisor型の仮想化ソフトではありませんがブート時に自動起動されるvboxdrvというカーネルドライバがHypervisor的な役割を一部担っています。
そのvboxdrvを擬似的なHypervisorと考えるとVirtualBoxも「Nested Virtualizatin(仮想化ネスト)」対応と言えるかも知れません。
厳密な意味での「Nested Virtualization」の環境では最低限3個のレイヤが連携して動くことが必要となります。

今回はSUSE Linux Enterprise Server 11 SP4(SLES 11 SP4)を使用してESXi上でNested VirtualBox環境を構築してみました。
「Nested Virtualization」の厳密な意味でのL0は実際のハードウェア上で動作するHypervisorであり今回その上で動作する仮想マシン(SLES 11 SP4のVirtualBox)は仮想的なL0なのですがここではESXiを透過扱いとして仮想L0を通常のL0とみなすことにします。
L0, L1, L2, ...というレイヤ区分ごとの仮想マシン名を下表に示します(VirtualBoxの最大ネスト数:2)。
Lx仮想マシン名OS備考
L0
vssles11base
(ESXi上の仮想マシン名)
SLES 11 SP4(64ビット)VirtualBoxで64ビット仮想マシンの作成・実行可
L1
l2vbsles11
(VirtualBox上の仮想マシン名)
SLES 11 SP4(64ビット)VirtualBoxで64ビット仮想マシンの作成不可
(VirtualBoxで32ビット仮想マシンのみ作成・実行可)
L2
l3vbsles11
(VirtualBox上の仮想マシン名)
SLES 11 SP4(32ビット)VirtualBoxで32ビット仮想マシンのみ作成可
(L3用ゲストOSインストール時にエラー発生)
L3
l4vbsles11
(VirtualBox上の仮想マシン名)
SLES 11 SP4(32ビット)-

VirtualBox 5.0を使用したNested Virtualization全般に関する留意事項は以下の通りです。


■ L0(vssles11base)の作成とVirtualBoxの導入
  1. L0(vssles11base)の作成/ゲストOSインストール
    ここでのL0はオープンギャラリー:Xen 4.4.2(ESXi 6.0/SLES 11利用による完全仮想化対応「仮想Xenホスト」の構築編)で作成したvssles11xs(ESXi環境でのSLES 11 SP4仮想マシン定義以降ご参照)とほぼ同様ですが、vssles11baseでは以下のようにしています。
    (1)ESXi上での仮想マシン名:vssles11base
    (2)仮想マシンのメモリ:12GB
    (3)CPU数:2
    (4)サーバベースシナリオ:[物理マシン(完全仮想化ゲスト向けも)]
    (5)「インストールの設定」の「ソフトウェア」では以下のものを追加しました(KVM,Xenの導入なし)。
    ・ファイルサーバ
    ・WebおよびLAMPサーバ
    ・C/C++コンパイラとツール(VirtualBoxのインストールで必要)
    (6)ホストおよびドメイン
    ・ホスト名:vssles11base
    ・ドメイン名:mydomain.net
    (7)eth0に対する固定IPアドレスの割り当て
    (8)VMware Toolsの導入実施
    (9)仮想マシンへのハードウェア仮想化支援機能特性付与(L0のVirtualBoxで64ビット仮想マシンの作成に必要)
    以下の手順で仮想マシンにハードウェア仮想化支援機能特性を付与します。
    まず仮想マシン(vssles11base)のVMXファイル(データストア中に存在するファイル)の中に以下の2行を追加します。
    VMXファイルの変更はデータストア中に存在するVMXファイル(vssles11base.vmx)をダウンロード([データストアの参照])、変更、アップロード([データストアの参照])で実施します。
    vhv.enable = "TRUE"
    featMask.vm.hv.capable = "Min:1"
    次に、VMXファイルで指定した仮想化情報が有効になっているかどうかについてvSphere Web Clientで確認します。
    具体的にはWebブラウザでhttps://実ESXiホストアドレス/uiを開いてESXiホストのrootでログインします。
    仮想マシン(vssles11base)の[設定の編集]のCPUセクションを展開して仮想化情報を確認します。
    [ハードウェアアシストによる仮想化をゲストOSに公開]:onになっていなければonにします。
    尚、「CPU/MMU仮想化」の値はデフォルトの[自動]のままとします。


  2. L0(vssles11base)の動作確認
    (1)「cat /proc/cpuinfo | grep vmx」でvmxを含む行が表示されます。

  3. L0(vssles11base)へのVirtualBoxの導入


■ L1(l2vbsles11)の作成とVirtualBoxの導入
  1. L1(l2vbsles11)の定義
    L0(vssles11base)のVirtualBoxを起動して以下のようにL1(l2vbsles11)を定義します。
    (1)名前:l2vbsles11
    (2)タイプ:Linux
    (3)バージョン:[openSUSE (64-bit)]選択 ※SUSE Linux Enterprise Serverというバージョン選択肢なし
    (4)メモリサイズ:6144MB
    (5)仮想ハードディスク:/root/l2vbsles11.vdi, 可変サイズ:127GB
    (6)「アクセラレーション」確認;
    ・仮想化支援機能-[VT-x/AMD-Vを有効化]:on
    ・仮想化支援機能-[ネステッドページングを有効化]:on
    (7)光学式ドライブ:sr0選択 ※事前にSLES-11-SP4-DVD-x86_64-GM-DVD1.isoのDVDアイコンをデスクトップに表示しておきます
    (8)ネットワークアダプタ1
    ・割り当て:[ブリッジアダプタ]選択
    ・名前:eth0(自動設定)
    ・高度-アダプタタイプ:Intel PRO/1000 MT Desktop (82540EM) ※デフォルトのまま
    ・高度-プロミスキャスモード:[すべて許可]選択

  2. L1(l2vbsles11)へのゲストOSインストール
    インストールポイントは以下の通りです。
    (1)サーバベースシナリオ:[物理マシン(完全仮想化ゲスト向けも)]
    (2)「インストールの設定」の「ソフトウェア」での追加ソフトウェアは以下の通りです。
    ・ファイルサーバ
    ・WebおよびLAMPサーバ
    ・C/C++コンパイラとツール(VirtualBoxのインストールで必要)
    (3)ホストおよびドメイン
    ・ホスト名:l2vbsles11
    ・ドメイン名:mydomain.net
    (4)eth0に対する固定IPアドレスの割り当て

  3. L1(l2vbsles11)の動作確認
    (1)「cat /proc/cpuinfo | grep vmx」でvmxを含む行が表示されません(ハードウェア仮想化支援機能は使用できません)。

  4. VirtualBox Guest Additionsのインストール
    (1)デスクトップ上のSLES 11 SP4用DVDアイコンの[取り出し]
    (2)L1(l2vbsles11)実行ウィンドウの[デバイス]-[Guest Additions CD イメージの挿入]
    ※この時点でネットワークが一時的に切断状態になります。
    (3)実行確認ダイアログで<実行する>クリック



    (4)Guest Additionsのインストールが実行されます。



    (5)手動でL1(l2vbsles11)を再起動します。
    (6)必要に応じて画面解像度を変更します。

  5. L1(l2vbsles11)へのVirtualBoxの導入


■ L2(l3vbsles11)の作成とVirtualBoxの導入
  1. L2(l3vbsles11)の定義
    L1(l2vbsles11)のVirtualBoxを起動して以下のようにL2(l3vbsles11)を定義します。
    (1)名前:l3vbsles11
    (2)タイプ:Linux
    (3)バージョン:[openSUSE (32-bit)]選択 ※ハードウェア仮想化支援機能は使用不可のため64-bitというバージョン選択肢なし
    (4)メモリサイズ:3072MB
    (5)仮想ハードディスク:/root/l3vbsles11.vdi, 可変サイズ:127GB
    (6)「アクセラレーション」はグレー表示
    (7)光学式ドライブ:sr0選択 ※事前にSLES-11-SP4-DVD-i586-GM-DVD1.iso(32ビット版)のDVDアイコンをデスクトップに表示しておきます
    (8)ネットワークアダプタ1
    ・割り当て:[ブリッジアダプタ]選択
    ・名前:eth0(自動設定)
    ・高度-アダプタタイプ:Intel PRO/1000 MT Desktop (82540EM) ※デフォルトのまま
    ・高度-プロミスキャスモード:[すべて許可]選択

  2. L2(l3vbsles11)へのゲストOSインストール
    インストールポイントは以下の通りです。
    (1)サーバベースシナリオ:[物理マシン(完全仮想化ゲスト向けも)]
    (2)「インストールの設定」の「ソフトウェア」での追加ソフトウェアは以下の通りです。
    ・ファイルサーバ
    ・WebおよびLAMPサーバ
    ・C/C++コンパイラとツール(VirtualBoxのインストールで必要)
    (3)ホストおよびドメイン
    ・ホスト名:l3vbsles11
    ・ドメイン名:mydomain.net
    (4)eth0に対する固定IPアドレスの割り当て

  3. L2(l3vbsles11)の動作確認
    (1)実ネットワークへの接続も問題なく行えます。




  4. VirtualBox Guest Additionsのインストール
    (1)デスクトップ上のSLES 11 SP4用DVDアイコンの[取り出し]
    (2)L2(l3vbsles11)実行ウィンドウの[デバイス]-[Guest Additions CD イメージの挿入]
    ※この時点でネットワークが一時的に切断状態になります。
    (3)実行確認ダイアログで<実行する>クリック
    (4)Guest Additionsのインストールが実行されます。
    (5)手動でL2(l3vbsles11)を再起動します。
    (6)必要に応じて画面解像度を変更します。

  5. L2(l3vbsles11)へのVirtualBoxの導入


■ L3(l4vbsles11)の作成:不可
  1. L3(l4vbsles11)の定義
    L2(l3vbsles11)の32ビット版VirtualBoxを起動して以下のように32ビット版L3(l4vbsles11)を定義します。
    (1)名前:l4vbsles11
    (2)タイプ:Linux
    (3)バージョン:[openSUSE (32-bit)]選択
    (4)メモリサイズ:1536MB
    (5)仮想ハードディスク:/root/l4vbsles11.vdi, 可変サイズ:127GB
    (6)「システム」設定
    ・「マザーボード」では拡張機能[PAE/NXを有効化]:on
    ・「アクセラレーション」はグレー表示
    (7)光学式ドライブ:sr0選択 ※事前にSLES-11-SP4-DVD-i586-GM-DVD1.iso(32ビット版)のDVDアイコンをデスクトップに表示しておきます
    (8)ネットワークアダプタ1
    ・割り当て:[ブリッジアダプタ]選択
    ・名前:eth0(自動設定)
    ・高度-アダプタタイプ:Intel PRO/1000 MT Desktop (82540EM) ※デフォルトのまま
    ・高度-プロミスキャスモード:[すべて許可]選択

  2. L3(l4vbsles11)へのゲストOSインストールでのエラー発生
    ゲストOSインストールメニューで言語選択して[インストール]EnterでLinuxカーネル読み込み後、重大エラー発生メッセージがL2(l3vbsles11)ではなくL1(l2vbsles11)によって表示されます。
    結局VirtualBox仮想マシンの最大ネスト数は2個ということになりました。


■ ESXi on VirtualBox
ESXi 6.0上の仮想マシン(vssles11base)のVirtualBoxでESXi 6.0のVirtualBox仮想マシン(vbesxi)を作成してみました。
結論としてはESXi 6.0をVirtualBox仮想マシン(vbesxi)にインストールしてVMware vSphere Clientからの接続もできるのですがESXi仮想マシンへのゲストOSのインストールがエラーとなります。
Windows上のVirtualBoxでESXi 6.0のVirtualBox仮想マシン(vbesxi)を作成しても同じ現象となります。
VirtualBox上でのESXi 6.0では仮想マシンを実行できませんがVMware vSphere ClientからのESXi接続ができるためESXiの導入+α(アルファ)の確認がVirtualBoxで可能となります。

ESXi 6.0上のSLES 11 SP4 Xen上で完全仮想化ドメインにESXi 6.0をインストールした際はVMware vSphere Clientからの接続が不可でした(インベントリのロードがタイムアウト:詳細)。

  1. ESXi仮想マシン(vbesxi)の定義
    L0(vssles11base)のVirtualBoxを起動して以下のようにESXi仮想マシン(vbesxi)を定義します。
    (1)名前:vbesxi
    (2)タイプ:Linux
    (3)バージョン:[Other Linux (64-bit)]選択
    (4)メモリサイズ:6144MB
    (5)仮想ハードディスク:/root/VirtualBox VMs/vbesxi.vdi, 可変サイズ:256GB
    (6)「アクセラレーション」確認;
    ・仮想化支援機能-[VT-x/AMD-Vを有効化]:on
    ・仮想化支援機能-[ネステッドページングを有効化]:on
    (7)光学式ドライブ:sr0選択 ※事前にVMware-VMvisor-Installer-6.0.0.update02-3620759.x86_64.iso(ESXi 6.0インストーラ)のDVDアイコンをデスクトップに表示しておきます
    (8)ネットワークアダプタ1
    ・割り当て:[ブリッジアダプタ]選択
    ・名前:eth0(自動設定)
    ・高度-アダプタタイプ:Intel PRO/1000 MT Server (82545EM) ※デフォルトのIntel PRO/1000 MT Desktop (82540EM)では動作しません
    ・高度-プロミスキャスモード:[すべて許可]選択

  2. ESXi仮想マシン(vbesxi)へのゲストOSインストール
    インストールポイントは以下の通りです。
    (1)Select a Disk to Install or Upgrade:デフォルトのまま
    (2)Please select a keyboard type:[japanese]選択
    (3)Enter a root password:rootユーザのパスワード設定
    (4)ハードウェア仮想化支援機能が使用できない旨の警告に対しては「(Enter) Continue」応答
    (5)インストール完了後の再起動
    (6)ESXiのトップ画面にはDHCPで取得されたIPアドレスが表示されます。

  3. ネットワーク設定のカスタマイズ
    (1)ESXiのトップ画面で<F2> Customize System/View Logs - [Configure Management Network]
    (2)vmnic0に対する[IPv4 Configuration]:固定IPアドレスの設定
    (3)[DNS Configuration]:DNSサーバアドレス及びESXiホストのホスト名(vbesxi.mydomain.net)設定

  4. 仮想マシン(vbesxi)の動作確認と基本設定


■ Windows vCenterサーバの構築
Active Directoryドメインに属さないWindows ServerにvCenterサーバ機能を導入してみました。
vCenter Server Applianceのデプロイ版と違ってWindows版vCenter Serverの導入はとても簡単です。
  1. ESXiサーバの用意
    上記の■ ESXi on VirtualBoxで紹介した仮想マシン(vbesxi)をESXiサーバとしてそのまま使用しても構いませんがWindowsに閉じた環境でのESXiサーバとvCenterサーバの手頃な利用を考えて今回はWindows Server 2016 TP4上にESXiサーバとvCenterサーバを構築してみました。
    (1)実機のWindows Server 2016 TP4のホスト名をws16tp4hvhostとします。
    (2)Windows Server 2016 TP4(ws16tp4hvhost)へのWindows版VirtualBox 5.0のインストール
    (3)そのWindows版VirtualBox 5.0への機能拡張パッケージのインストール
    ※上記で紹介したOracle_VM_VirtualBox_Extension_Pack-5.0.20-106931.vbox-extpackがWindows環境でもそのまま使用できます。
    (4)上記の■ ESXi on VirtualBoxで紹介した仮想マシン(vbesxi)と同じ仮想マシンを定義します。
    (5)仮想マシン(vbesxi)にESXi 6.0をゲストOSとしてインストールします。
    (6)仮想マシン(vbesxi)に固定IPアドレスを割り当てます。
    (7)VMware vSphere Clientから仮想マシン(vbesxi)に接続して[ESXiシェル]と[SSH]サービスの起動及び自動起動設定を実行します。
    (8)仮想マシン(vbesxi)のライセンスは評価モードライセンスのままとします。
    (9)仮想マシン(vbesxi)のライセンス関連ファイルのバックアップ
    ライセンス関連ファイルの破損に備えて仮想マシン(vbesxi)の/etc/vmware下のライセンス関連ファイルをSCPクライアントソフト等で外部マシンにバックアップしておきます。
    どのESXiサーバ用のライセンス関連ファイルかが分かるように名称変更しておくといいかも知れません(例:license.cfg.vbesxi, vmware.lic.vbesxi)。
    尚、バックアップしたライセンス関連ファイルを破損したライセンスファイルのESXiサーバ側の/etc/vmwareにSCPクライアントソフト等でアップロードして以下のコマンドを実行すればライセンスファイルの修復が行えます(ライセンス修復対象ESXiサーバはvbesxi以外のサーバでも構いません)。
    cd /etc/vmware
    cp license.cfg license.cfg.org
    cp vmware.lic vmware.lic.org
    cp license.cfg.vbesxi license.cfg
    cp vmware.lic.vbesxi vmware.lic
    cd
    [補足]
    Xen上でもESXiのインストールはできますがVMware vSphere Clientからの接続がタイムアウト(インベントリロードのタイムアウト:詳細はこちら)となるためESXiサーバのSSHサービス自体を有効化できません。
    このためXen上のESXiサーバからライセンス修復用ファイルを取りだすことは困難です(その仮想ハードディスクをループバックマウントできれば取り出しは可能でしょうが...)。
    つまりESXiのライセンス修復用ファイルを容易に取り出せるESXiサーバを仮想マシンとして作成できるのはVirtualBoxを用いるのがベストかと思います。
    (10)仮想マシン(vbesxi)上に仮想マシン(vsvbsles11x86)を定義します(実行はできません)。
    (11)仮想マシン(vbesxi)にSSH接続して仮想マシン(vbesxi)内の/etc/hostsに「IPアドレス ws16tp4hvhost.mydomain.net ws16tp4hvhost」を追加します。

  2. vCenterサーバの構築
    (1)Windows Server 2016 TP4(ws16tp4hvhost)側のhostsに以下の行を追加します。
    「IPアドレス vbesxi.mydomain.net vbesxi」
    (2)Windows Server 2016 TP4(ws16tp4hvhost)側にVMware vCenter Server 6.0 Update 2用のVMware-VIMSetup-all-6.0.0-3634788.isoをダウンロードします。
    (3)VMware-VIMSetup-all-6.0.0-3634788.isoを[マウント]します。
    (4)マウントされたドライブ中のautorun.exeを起動します。
    (5)「VMware vCenterインストーラ」で[Windows版vCenter Server]を選択して<インストール>をクリックします。



    (6)「VMware vCenter Server 6.0.0インストーラへようこそ」以降の設定ポイントは以下の通りです(下記以外はデフォルトのままでOKです)。
    (7)「インストールの準備の完了」で<インストール>をクリックします。
    (8)「セットアップの完了」で<完了>をクリックします。
    (9)Windows Server 2016 TP4(ws16tp4hvhost)側にはVMware vSphere Clientはインストールしません。
    実ESXiサーバを管理するWindows 8.1側のVMware vSphere Clientをそのまま使用します。
    (10)vCenter Serverをインストールするとコントロールパネルの「プログラムと機能」の中で「vCenter Serverと組み込みPlatform Services Controller」が追加表示されます。
    (11)vCenter Serverのインストールで組み込まれたサービス群はこちらです。

  3. vCenterサーバ接続操作
    (1)実ESXiサーバを管理するWindows 8.1側のhostsに以下の2行を追加します。
    「IPアドレス1 vbesxi.mydomain.net vbesxi」
    「IPアドレス2 ws16tp4hvhost.mydomain.net ws16tp4hvhost」
    (2)Windows 8.1側のWindows 8.1側でVMware vSphere Clientを起動して下記情報を指定してvCenterサーバに接続します。
    ・接続先:ws16tp4hvhost.mydomain.net
    ・ユーザ名:administrator@vsphere.local
    ・パスワード:vCenter Single Sign-ON構成で設定したパスワードを指定



    (3)ws16tp4hvhost.mydomain.netに対して「myDC1」というデータセンタを定義します。
    (4)myDC1の右クリックメニューから[ホストの追加]を選択します。
    (5)ホストの追加ウィザードでの設定
    ・ホスト:vbesxi.mydomain.net
    ・ユーザ名:root
    ・パスワード:rootのパスワード
    ・ライセンスの割り当てでは[ライセンスキーなし]のままとします。
    ・仮想マシンの場所:myDC1を選択
    (6)データセンタ(myDC1)を展開するとvbesxi.mydomain.netが表示されます。
    (7)そのvbesxi.mydomain.netを展開すると仮想マシン(vsvbsles11x86)が表示されます。
    (8)仮想マシン(vsvbsles11x86)に対してvCenterならではの操作(例えば:「クローン作成」)を実行してみます。
    ※実行できない仮想マシンであってもその仮想マシンからのクローン作成やテンプレート作成は可能です。
    下記は仮想マシン(vsvbsles11x86)からのクローン仮想マシン(vsvbsles11x86clone1)作成例です。
    (9)仮想マシン(vsvbsles11x86)からテンプレート(vsvbsles11x86templ1)作成も実行してみました。

    当然ですがWindows vCenterサーバホストにVMware vSphere ClientをインストールすることでWindows vCenterサーバホスト側からvCenterサーバを管理することも可能となります。



  4. vSphere Web Client接続
    (1)Webブラウザ(IE)からhttps://ws16tp4hvhost.mydomain.net/vsphere-clientを開きます。
    (2)下記でログインします。
    ・ユーザ名:administrator@vsphere.local
    ・パスワード:vCenter Single Sign-ON構成で設定したパスワードを指定
    (3)vSphere Web Client操作をしてみます。



  5. VMware Postgresのpsqlによる管理データのSQL確認
    Windows版vCenter Serverには組み込みデータベース(VMware Postgres 9.3.9.0)が付属しています。
    VMware Postgresのデータベース中のテーブルやビューは通常のPostgreSQL同様にpsqlコマンドで簡単に確認できます。
  6. VMware Postgresに対するpgAdmin IIIによる管理データ確認
    Windows版vCenter Server環境にpgAdmin IIIを導入すればGUIベースでVMware Postgresで管理しているvCenter管理データを確認できます。





■ Xen on VirtualBox on KVM
VirtualBox 5.0を使用したHypervisor混在型Nested Virtuualizationの一例として以下の構成で「Xen on VirtualBox on KVM」環境を構築してみました。
L0, L1, L2, ...というレイヤ区分ごとのレイヤ構成を下表に示します。
下表での仮想LxとはESXiを透過扱いとした場合の仮想的レイヤを表しています。
[実Lx]仮想Lx仮想マシン名OSHypervisor(等)
[L0]
-
-
(実機上のOS)
ESXi 6.0(64ビット)ESXi(VMKernel)
[L1]
L0
vssles11kx
(ESXi上の仮想マシン名)
SLES 11 SP4(64ビット)VirtualBox on KVM
[L2]
L1
l2vbsles11kx
(VirtualBox上の仮想マシン名)
SLES 11 SP4(64ビット)Xen
(準仮想化32ビット仮想マシン作成のみのサポート)
[L3]
L2
l3pvvbsles11x86
(Xen上の準仮想化マシン名)
SLES 11 SP4(32ビット)-

以下に仮想LxとしてのL0, L1, L2の作成手順を紹介します。


■ CentOS 7でのVirtualBox利用
実機上のCentOS 7(64ビット)にもVirtualBox 5.0を導入して利用してみました。
ここでのCentOS 7環境はオープンギャラリー:CentOS 7によるNested KVM環境の構築で紹介しているKVM導入済みの環境です。