Windows Server 2008[Linux用統合コンポーネント]

2008年2月5日にWindows Server 2008 日本語版が正式リリースされました。
2008年3月19日にはライセンス認証不要のWindows Server 2008 日本語評価版が公開されました(カーネルはVista SP1相当)。
※評価版の公開サイト:http://www.microsoft.com/japan/windowsserver2008/trial-software.mspx

64ビット版Windows Server 2008にはHyper-Vという仮想化機能が追加されていますが、
2008年2月5日にリリースされた64ビット版Windows Server 2008に付属しているのはHyper-Vのベータ版です。
Hyper-Vの正式版は2008年8月出荷予定ですがそのHyper-V RC版(正確にはKB949219更新パッケージ)が2008年3月18日に公開されました。

Hyper-VではVMBusという仮想化I/Oアーキテクチャを使用して主にネットワーク性能の高速化仮想SCSIディスクサポートを実現しています。
VMBusの実行には下記が必要です。
・ホストOS側:VSP(Virtualization Service Provider)
・ゲストOS側:VSC(Virtualization Service Client)

VSCはWindows(XP/Vista/Server 2003/Server 2008)用の統合サービスに含まれていますが、
2008年3月18日に公開されたHyper-V RC版にはLinux用の統合サービスは付属していません。
しかし本来の統合サービスの一部が「Integration Components for Linux」として2008年3月31日に公開されました。
※この「Integration Components for Linux」にはゲストOS画面からホストOS画面へのマウス移動がスムーズに行える機能は含まれていません。

2008年3月31日に公開された「Integration Components for Linux」の特徴は以下の通りです。
(1)サポートOSは32ビット及び64ビットのSLES 10 SP1(SUSE Linux Enterprise Server 10 SP1)限定です。
(2)主たるコンポーネントはハイパーコールアダプタとSyntheticドライバ(統合ドライバ)です。
・ハイパーコールアダプタはXenハイパーカーネルをx2vハイパーカーネルに置き換えるものです。
・Syntheticドライバはレガシネットワークアダプタをサポートせずに高速なVMBus Network Adapterをサポートします。
・VMBus Network Adapter用のネットワークインタフェース名はeth0ではなくseth0となります。
※seth0の先頭の「s」はSynthetic Driverを意味します。
・Syntheticドライバは仮想SCSIディスクをサポートします。

VMwareの場合はその仮想マシンの中でXenハイパーカーネルを実行できますがHyper-VではXenハイパーカーネルを実行させることができません。
※VMwareでのSLES 10 SP1のXen実行例はこちらをご参照下さい。
Hyper-VではXenでのハイパーカーネルコールをHyper-Vハイパーコールに置き換えることでVMBusのVSCを動作させるというユニークなアプローチを採用しています。
(Hyper-V統合サービス導入環境ではxendやxenstored等のXenサービスは動作しませんがDomain0用Xenカーネル自体は動作します)

(3)SLES 10 SP1デバイスマネージャのHALパッチが提供されます。
このHALパッチを使用してHALをリコンパイルすることによりSLES 10 SP1のデバイスマネージャに
「Network Virutualization Service Client Device」や「Storage Virutualization Service Client Device」を
VSCデバイスとして表示できるようになります。

ここでは、Hyper-VのゲストOS(SLES 10 SP1 x86)に「Integration Components for Linux」を導入する手順を紹介致します。

今回使用したPCのハードウェア/ソフトウェア構成は以下の通りです。
・CPU:Core 2 Quad Q6600
・チップセット:Intel P35
・メモリ:8GB
・VGAカード:nVIDIA GeForce 8800GT(VRAM 512MB)
・HDD:S-ATA 250GB(但し、仮想ディスクファイルは1TBのS-ATA HDDに格納)
・ネットワークインタフェース:Intel(R) PRO/100 S Desktop Adapter
※「Integration Components for Linux」を利用するためにIntel(R) PRO/100 S Desktop Adapterが必要という訳ではありません。
※Intel(R) PRO/100 S Desktop AdapterはWindows Server 2008での単なる動作確認のために用いただけです。
・ホストOS:64ビットのWindows Server 2008 Enterprise 日本語版(評価版)



■ 仮想ネットワークアダプタの定義

Windows Server 2008は初期状態ではIntel(R) PRO/100 S Desktop Adapterをサポートしていません。
そこで一時的に別のネットワークアダプタ(通常はオンチップのネットワークアダプタ)を使用してネットワークが利用できるようにします。
Windows Updateで「Intel - Networking -Intel PRO/100 S Desktop Adapter」ドライバを導入できます。

仮想ネットワークアダプタは以下の手順で定義します。

Windows Server 2008のデバイスマネージャには、
「Intel(R) PRO/100 S Desktop Adapter」と「Intel(R) PRO/100 S Desktop Adapter for Hyper-V」の両方が表示されます。




■ ゲストOS(SUSE Linux Enterprise Server 10 SP1)のインストール

  1. 仮想マシンの定義

  2. 仮想マシン定義の変更
    仮想マシン名(SLES10SP1)の右クリックメニューから[設定]を選択して仮想マシンの設定画面を表示します。
    次に以下の変更を実施します。
    (1)ハードウェアの追加で[レガシ ネットワークアダプタ]を追加します。
    レガシ ネットワークアダプタのネットワークの欄はデフォルトで「接続していません」となっています。
    そこでその欄では仮想ネットワークアダプタにマッピングされる[Intel(R) PRO/100 S Desktop Adapter for Hyper-V]を選択します。
    またMACアドレスは動的に割当てるモード(デフォルトで)のままとします。
    (2)仮想マシンの名称をここで変更できます。
    (仮想マシン名をここで変更してもウィザードで指定した仮想マシン名のディレクトリは変更されずに利用されます)
    (3)DVDドライブのメディアは「なし」になっています。
    そこで<物理CD/DVDドライブ>をonにして実際のドライブ(例えば「E:」)を選択します。

  3. ゲストOSのインストール
    (1)ゲストOSのインストールディスクを物理CD/DVDドライブにセットします。
    (2)仮想マシンの右クリックメニューから[接続]を選択すると仮想マシン接続画面(モニタ画面)が表示されます。
    (3)仮想マシン接続画面の[開始]をクリックするとHyper-Vのロゴ表示後にインストーラが起動します。
    (4)インストーラの起動後は通常のSLESインストール手順と同じです。
    (5)インストールオプションでは以下もインストールします。
    ・Xen仮想マシンホストサーバ
    ・C/C++ Compilerとツール
    ・開発パッケージの中のソース(kernel-source)
    (6)インストール後の自動リブートではGRUBメニューで「SUSE Linux Enterprise Server 10 SP1」を選択します。
    (7)rootのパスワードやネットワーク設定を行います。
    (8)セットアップ後はrootでログインしてみます。
    (9)ゲストOSをシャットダウンさせます。
    ※仮想マシン画面の中から外にマウスを移動させる(仮想マシンからのマスウ解放)にはCtrl+Alt+「←」キーを押します。


■ 「Integration Components for Linux」の導入

  1. 「Integration Components for Linux」のダウンロード
    Microsoft Connectのサイト(https://connect.microsoft.com/Downloads/Downloads.aspx?SiteID=495)から
    Integration Components for Linux Installer 1.0をダウンロードします。
    ・ファイル名:Linux Integration Components for Microsoft Windows Server 2008 Hyper-V RC0.EXE
    Linux Integration Components for Microsoft Windows Server 2008 Hyper-V RC0.EXEを実行(解凍)すると
    LinuxIC.iso(Integration Components for LinuxインストールCDイメージ)とIntegration Components for Linux Read Me.docx(説明書)が得られます。

  2. ゲストOSの起動
    ここではGRUBメニューで「SUSE Linux Enterprise Server 10 SP1」を選択します。

  3. Integration Components for LinuxインストールCDイメージの接続
    [メディア]−[DVD Drive]−[ディスクの挿入]で上記LinuxIC.isoを指定します。

  4. Integration Components for Linuxからのハイパコールアダプタのインストール
    「Integration Components for Linux Read Me.docx(説明書)」に記載されている手順をベースにインストールします。
    # mkdir /mnt/cdrom
    # mount /dev/cdrom /mnt/cdrom
    # mkdir /opt/linux_ic
    # cp -R /media/CDROM/* /opt/linux_ic
    # /opt/linux_ic/setup.pl x2v /boot/grub/menu.lst
    Checking for XEN Virtualization install...done.
    Backing up /boot/grub/menu.lst...done.
    Updating /boot/grub/menu.lst...done.
    Copying X2V shim...done.
    
    これによって/boot/grub/menu.lstのXENエントリの「kernel /boot/xen.gz」が「kernel /boot/x2v-32.gz」に自動変更されます。
    # umount /mnt/cdrom
    # shutdown -h now

  5. Syntheticドライバのインストール
    ここからは常にGRUBメニューでXENを選択してブートします。
    # /opt/linux_ic/setup.pl drivers
    Installing synthetic drivers...done.
    
    # shutdown -h now

  6. 仮想マシン定義の変更
    エミュレートされるネットワークアダプタを削除してVMBusのNetwork Adapterを使用するため以下の操作を行います。
    (1)[レガシ ネットワークアダプタ]を<削除>ボタンで削除します。
    (2)ハードウェアの追加で[ネットワークアダプタ]を追加します。
    追加されたネットワークアダプタのネットワークの欄はデフォルトで「接続していません」となっています。
    そこでその欄では仮想ネットワークアダプタにマッピングされる[Intel(R) PRO/100 S Desktop Adapter for Hyper-V]を選択します。
    またMACアドレスは動的に割当てるモード(デフォルトで)のままとします。

  7. ゲストOSの再起動とネットワーク動作確認
    GRUBメニューでXENを選択してブートします。
    ifconfigを実行するとlo, seth0, seth1が表示されます(通常Xenとは異なりeth0やxenbr0は表示されません)。
    seth0にはIPアドレスはありませんが、seth1にはDHCPによるIPアドレスが割り当てれます。
    ブラウザによるWebアクセス等もできます。



  8. HALパッチ
    まずSLES 10 SP1のインストールディスクをセットします。
    # mount /dev/cdrom /mnt/cdrom
    # cd /opt/linux_ic/drivers/dist/tools/hal
    # ./sles-hal-patch.sh /mnt/cdrom/suse/i586
    hal source(http://people.freedesktop.org/~david/dist/hal-0.5.6.tar.gz)が自動でダウンロードされて自動コンパイルされます。
    # umount /mnt/cdrom
    # shutdown -h now

  9. ゲストOSでのデバイスマネージャ確認
    GRUBメニューでXENを選択してブートします。
    HALパッチで再作成されたhal-device-manageを起動してデバイスマネージャを表示させます。
    デバイスマネージャには「Network Vitualization Service Client Device」が表示されるようになります。

  10. ご参考:ftp転送速度比較
    VMBus Network Adapterを使用するとftp転送速度は高速になりました。
    測定環境によって転送速度の数値は揺れるので下記はあくまでも参考値です。


■ 仮想SCSIディスクの動作確認

  1. 仮想マシンへの仮想SCSIディスクの追加
    仮想マシン名(SLES10SP1)の右クリックメニューから[設定]を選択して仮想マシンの設定画面を表示します。
    次に以下の操作を実施します。
    (1)ハードウェアの追加で[SCSIコントローラ]を追加します。
    (2)SCSIコントローラの[ハードドライブ]を選択して<追加>ボタンを押します。
    (3)ハードドライブの設定では以下のデフォルト設定のままとします。
    ・コントローラ:SCSIコントローラ
    ・場所:0(使用中)
    (4)ハードドライブのメディア指定部分では<新規>ボタンを押して「新しい仮想ハードディスクウィザード」を起動します。
    (5)「新しい仮想ハードディスクウィザード」では仮想ハードディスクとして以下を指定します(指定例です)。
    ・ディスクの種類:容量可変
    ・名前:SCSI.vhd
    ・ディスクの構成:「新しい空の仮想ハードディスクを作成する」
    ・サイズ:32GB
    (6)「新しい仮想ハードディスクウィザード」を完了させます。

  2. 仮想マシンの起動とVSC確認
    GRUBメニューでXENを選択してブートします。
    rootでログインします。
    # dmesg|grep vsc
    storvsc: module not supported by Novell, setting U taint flag.
    VMBUS_DRV: child driver (f4886f80) registering - name storvsc
    scsi0 : storvsc_host_t
    netvsc: module not supported by Novell, setting U taint flag.
    VMBUS_DRV: child driver (f487cc80) registering - name netvsc
    

  3. SCSIデバイス確認
    # cat /proc/scsi/scsi
    Attached devices:
    Host: scsi0 Channel: 00 Id: 00 Lun: 00
      Vendor: Msft     Model: Virtual Disk     Rev: 1.0
      Type:   Direct-Access                    ANSI SCSI revision: 04
    
  4. 仮想SCSIディスクへのパーティション(/dev/sda1)作成
    # fdisk /dev/sda
    コマンド (m でヘルプ): n
    コマンドアクション
       e   拡張
       p   基本領域 (1-4)
    p
    領域番号 (1-4): 1
    最初 シリンダ (1-16448, default 1):
    Using default value 1
    終点 シリンダ または +サイズ または +サイズM または +サイズK (1-16448, default 16448):
    Using default value 16448
    
    コマンド (m でヘルプ): p
    
    Disk /dev/sda: 34.3 GB, 34359738368 bytes
    16 heads, 255 sectors/track, 16448 cylinders
    Units = シリンダ数 of 4080 * 512 = 2088960 bytes
    
    デバイス Boot      Start         End      Blocks   Id  System
    /dev/sda1               1       16448    33553792+  83  Linux
    Partition 1 does not end on cylinder boundary.
    
    コマンド (m でヘルプ): w
    領域テーブルは交換されました!
    
    ioctl() を呼び出して領域テーブルを再読込みします。
    ディスクを同期させます。
    
  5. 仮想SCSIパーティション(/dev/sda1)のファイルシステム作成
    # mkfs -t ext3 /dev/sda1
    mke2fs 1.38 (30-Jun-2005)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    4194304 inodes, 8388448 blocks
    419422 blocks (5.00%) reserved for the super user
    First data block=0
    256 block groups
    32768 blocks per group, 32768 fragments per group
    16384 inodes per group
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000, 7962624
    
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 37 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    
  6. 仮想SCSIパーティションのマウント確認
    # mkdir /mnt/synthetic
    # mount /dev/sda1 /mnt/synthetic
    # ls /mnt/synthetic
    「lost+found」だけが表示されます。
    # umount /mnt/synthetic

  7. 仮想SCSIパーティションへのファイルコピーテスト
    650MBのVine42-i386.isoファイルを仮想SCSIパーティションと仮想IDEパーティションにそれぞれコピーしてみました。



  8. ゲストOSでのデバイスマネージャ確認
    HALパッチで再作成されたhal-device-manageを起動してデバイスマネージャを表示させます。
    デバイスマネージャには「Storage Vitualization Service Client Device」が表示されるようになります。

  9. 仮想マシンのネットワーク構成変更確認
    仮想マシンのネットワーク構成をレガシネットワークアダプタと通常のネットワークアダプタの両方を定義して、ゲストOSのGRUBメニューでXENを選択してブートします。
    この場合、Network Virutualization Service Client Deviceとして認識されるのは通常のネットワークアダプタだけです。
    したがって、ifconfigではloとseth0しか表示されません。



■ Integration Components for Linux導入環境でのQEMU利用

Integration Components for Linuxを導入してVSC(Virtualization Service Client)が使用できるようになったSLES 10 SP1環境にQEMUを導入し、
Vine Linux 4.2を実行させてみました。



■ Integration Components for Linux導入後の通常カーネル起動確認

Integration Components for Linux導入後も通常カーネルでブートできます。
但し、この場合はVSCデバイスが認識されません。
つまりVMBus Network Adapterや仮想SCSIディスクは使用できません。
HALパッチで再作成されたhal-device-manageを起動してもそのデバイスマネージャには
「Network Vitualization Service Client Device」と「Storage Vitualization Service Client Device」は表示されません。