Xen 4.4.2(Xen on Hyper-V編)


2008年6月にリリースされたHyper-VではLinuxとしてSUSE Linux Enterprise Server 10(SLES 10)をサポートしていました。
その後のHyper-V環境ではXen Domain0も動作するようになりました。
ここではWindows Server 2016 TP4のHyper-V環境でSLES 11 SP4(無料評価版)のXen Domain0を実行する手順を紹介します。
尚、SLES 11 SP4付属のXenはXen 4.4.2でHyper-V仮想マシンにSLESのXen環境を構築する場合の留意点は次の通りです。
  • 仮想ハードディスクのExt2/Ext3初期化問題回避
    SLES 11ではファイルシステムとしてExt2, Ext3, BtrFSの中から選択することになりますがBtrFSではブートローダのインストールに失敗することがある(BtrFS選択時に警告が出ます)ためExt2かExt3を使用することになります。
    「仮想マシンの新規作成ウィザード」で作成される仮想ハードディスクは「フォーマット:VHDX, 種類:容量可変」となっておりExt2/Ext3初期化で問題が発生します。
    この仮想ハードディスクを使用したHyper-V仮想マシンでExt2/Ext3ファイルシステムで初期化すると仮想ハードディスク容量が肥大化してフォーマットエラーとなる可能性が高いです。
    どうしても「フォーマット:VHDX, 種類:容量可変」という仮想ハードディスクを使用したい場合はPowerShellでNew-VHDコマンドレットを使用して小さいブロックサイズ(例:1MB)の仮想ハードディスクを作成して利用します。
    今回は「フォーマット:VHD, 種類:容量可変」である仮想ハードディスクを利用することにしました。
    またSLES 11でのファイルシステムはExt3を選択しました。
    ※SLES 12からサポートされているExt4ではこの初期化問題は発生しません。

  • Xenカーネルブート問題回避
    Hyper-V仮想マシンにSLES 11をインストールするとルートパーティションのデフォルトデバイス(/dev/sda2)は「 /dev/disk/by-id/scsi-xxx...-part2」となりそれが/etc/fstabや/boot/grub/menu.lstに登録されます。
    ※/etc/mtabは/dev/sda2となります。
    通常カーネルのブートでは「 /dev/disk/by-id/scsi-xxx...-part2」指定のGRUBでも正常ブートできます。
    しかしXenカーネルのブートでは「 /dev/disk/by-id/scsi-xxx...-part2」を見つけられずにブートが失敗します。
    Could not find /dev/disk/by-id/scsi-xxx...-part2.
    Wnt me to fall back to /dev/disk/by-id/scsi-xxx...-part2? (Y/n)
    ※y, n どちらの応答でもブート続行不可となります。
    この問題の対策は通常カーネルでブートした状態で/etc/fstab及び/boot/grub/menu.lst内の記述を以下のように変更して再起動することです。
    ・「 /dev/disk/by-id/scsi-xxx...-part1」を「/dev/sda1」に変更
    ・「 /dev/disk/by-id/scsi-xxx...-part2」を「/dev/sda2」に変更
    ※SLES 12では「 /dev/disk/by-id/scsi-xxx...-part2」ではなく「UUID=...」が使用されるためXenカーネルブート問題は発生しません。

  • Xenカーネルブートでの物理ネットワーク接続問題
    Hyper-V標準のネットワークアダプタまたはレガシーネットワークアダプタ使用では以下の問題が発生します。
    (1)通常カーネルでブートした場合はSLES 11をゲストOSとするHyper-V仮想マシンから物理ネットワークへの接続は問題なく行えます。
    (2)しかしXenカーネルでブートした場合はSLES 11をゲストOSとするHyper-V仮想マシンから物理ネットワークへの接続はできません。
    (3)SLES 11をインストールするHyper-V仮想マシンに対してEnable-NestedVm.ps1を使用してNested Virtualization(実態としてはNested Hyper-V)機能を有効にしてもしなくてもこのネットワーク接続問題は発生します。
    (4)レガシーネットワークアダプタだけを使用した場合のネットワーク状態;
    通常カーネルでブートした場合:物理ネットワーク接続OK
    Xenカーネルでブートした場合:物理ネットワーク接続不可
    ※SLES 12 SP1でもXenカーネルブートでの物理ネットワーク接続問題は発生します。

  • 完全仮想化未サポート(準仮想化サポート限定)
    SLES 11をインストールするHyper-V仮想マシンに対してEnable-NestedVm.ps1を使用してNested Virtualization(実態としてはNested Hyper-V)機能を有効にしてもしなくても準仮想化しかサポートされません
    したがって今回Hyper-V環境で構築するXen仮想化ホストは「Xen完全仮想化ホスト」ではなく「Xen準仮想化ホスト」となります。
    ※Xen 4.5.1搭載のSLES 12 SP1でもHyper-V環境では完全仮想化未サポートのままです。
    尚、XenカーネルでブートしたSLES 11と準仮想化DomainUとの間のネットワーク接続は可能となります(SLES 12 SP1でも同様)。

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



■ 前提条件
(1)SLES 11 SP4をインストールするHyper-V仮想マシンの名称は「hvssles11xs(hvsはHyper-VのServer機能利用の意で、xsはXen Server的用途の意)」とします。
(2)SLES 11 SP4をインストールするHyper-V仮想マシンの仮想ハードディスクは「フォーマット:VHD, 種類:容量可変」とし、Ext3で初期化することにします。
(3)念のためSLES 11 SP4をインストールするHyper-V仮想マシンに対してEnable-NestedVm.ps1を使用してNested Virtualization(実態としてはNested Hyper-V)機能を有効にしておきます。
(4)準仮想化DomainUにもSLES 11 SP4をインストールします(仮想マシン名は「pvsles11(pvはparavirtの意)」とします。


■ Hyper-V仮想マシン定義(仮想ハードディスクの変更含む)
Xen準仮想化ホストにするHyper-V仮想マシンの定義は以下の通りです(「新規仮想マシンの作成ウィザード」での指定内容と設定変更)。
(1)仮想マシン名:hvssles11xs
(2)世代:第1世代
(3)起動メモリ:6144MB
[この仮想マシンに動的メモリを使用します。]:off
(4)接続:vsw1
(5)仮想ハードディスクの新規作成
ここでの仮想ハードディスクは使用しないのでhvssles11xsdummy.vhdxというような適当な名称で作成しておきます(容量は任意)。
(6)[後でオペレーティングシステムをインストールする]:on
(7)仮想マシンの「設定」
・仮想ハードディスクの新規作成ウィザードを起動して「フォーマット:VHD, 種類:容量可変」のhvssles11xs.vhd(256GB)を作成して仮想マシンに割り当てます。
・インストールメディアのDVDイメージ(SLE-12-SP1-Server-DVD-x86_64-GM-DVD1.iso)のパスを設定


■ Hyper-V仮想マシンに対するNested Virtualization(実態としてはNested Hyper-V)機能の有効化
Windows Server 2016 TP4側のC:\tempにEnable-NestedVM.ps1スクリプトファイルが格納されている場合はPowerShellで以下のようにEnable-NestedVM.ps1を実行します。
PS C:\Users\Administrator> cd C:\temp
PS C:\temp> .\Enable-NestedVM.ps1 -VmName "hvssles11xs"
Enable-NestedVM.ps1の実行結果
Nested Virtualization(実態としてはNested Hyper-V)属性確認結果


■ 仮想マシンへのSLES 11 SP4のインストール(Xenカーネルブート問題対応含む)
(1)仮想マシンを起動
(2)メニュー画面操作;
・F2 - Language:[日本語]を選択
・F3 - ビデオモード:[1280x1024]
・実行項目として[インストール]を選択
(3)ようこそ:言語設定
(4)メディアチェック
(5)インストールモード:[新規にインストール]
(6)時計とタイムゾーン
(7)サーバベースシナリオ:[物理マシン(完全仮想化ゲスト向けも)]
(8)インストールの設定
「パーティション分割」では/dev/sda2に対してデフォルトのext3を適用
「ソフトウェア」については以下のものを追加しました。
・ファイルサーバ
・WebおよびLAMPサーバ
Xen仮想マシンホストサーバ(今回は必須)
・C/C++コンパイラとツール
ここで<インストール>を押下するとパッケージがインストールされて自動再起動されます。
(9)システム管理者「root」のパスワード
(10)ホストおよびドメイン
・ホスト名:hvssles11xs
・ドメイン名:mydomain.net
(11)ネットワーク設定(設定変更前の画面)
・今回はネットワークブリッジに対して固定IPアドレスを割り当てました。
・VNCリモート管理-[リモート管理を許可する]:on
(12)ネットワークサービス設定
ここではデフォルトで作成するCAと証明書の内容を確認するだけでOKです。
(13)ユーザ認証方法
(14)新規のローカルユーザ
(15)リリースノート取得のためのインターネット接続テスト
(16)ハードウェア設定
(17)インストールの完了
(18)ログイン画面表示
rootでログインします。
(19)デスクトップ



(20)Xenカーネルブート問題対応の実施
通常カーネルでブートされたこの時点で/etc/fstab及び/boot/grub/menu.lst内の記述を以下のように変更して再起動します。
・「 /dev/disk/by-id/scsi-xxx...-part1」を「/dev/sda1」に変更
・「 /dev/disk/by-id/scsi-xxx...-part2」を「/dev/sda2」に変更
この変更により通常カーネル, Xenカーネル共に問題なくブート可能となります。


■ 準仮想化DomainU仮想マシンの作成
Xenカーネルでのブート後に「仮想マシンの作成」ウィザードで準仮想化DomainUの作成を行います。
■ ESXi, Hyper-V, Xenの三重Hypervisor連携
以下の手順でESXi Hypervisorの上で動作しているHyper-V Hypervisorホスト側で上記「Xen準仮想化ホスト(hvssles11xs)」と「準仮想化DomainU(pvsles11)」を実行してみました。
  1. hvssles11xsのエクスポート
    エクスポートフォルダはESXi Hypervisorの上で動作しているHyper-V Hypervisorホストからアクセス可能な場所に置いておきます。

  2. ESXi Hypervisorの上で動作しているHyper-V Hypervisorホストからのインポート
    今回はESXi Hypervisorの上で動作しているHyper-V Hypervisorホストとして「
    オープンギャラリー:VMware vSphere Hypervisor (ESXi 6.0でのNested ESXi-Hyper-V)」の「■ 仮想マシンへのWindows Server 2016 Technical Preview 4(TP4)のインストール」で構築した仮想マシン(vsWS16TP4)です。
    上記のエクスポートフォルダをESXi Hypervisorの上で動作しているHyper-V Hypervisorホスト(vsWS16TP4)側にコピーします。
    Hyper-V Hypervisorホスト(vsWS16TP4)のHyper-Vマネジャでhvssles11xsをインポートします。

  3. インポートされたhvssles11xsの起動
    インポートされたhvssles11xsを起動して準仮想化DomainU(pvsles11)も操作してみました。
    ESXi Hypervisorが土台にない場合と同様に動作しました。



    ・実寸画像はこちらです。



■ ご参考:SLES 12 SP1でのXen on Hyper-V
冒頭で述べた留意点を考慮しSLES 11 SP4の場合の流れに準拠する手順で「SLES 12 SP1でのXen on Hyper-V」を試してみました。