2010/09/21

SLES 11 SP1 は hv_utils モジュールでシャットダウン連携できた

以前の投稿で、SUSE Linux Enterprise Server 11 Service Pack 1 (SLES 11 SP1) には、Linux Integration Components (Linux ICs) v2.0 for Hyper-V 相当の Microsoft Hyper-V drivers (hyper-v-kmp-*) が標準で組み込まれており、Hyper-V 仮想マシンにインストールするだけで最適化されると書きました。また、最新の Linux Integration Services (Linux IS) v2.1 で追加されたシャットダウン連携や時刻連携、ハートビートが、SLES 11 SP1 ではまだ利用できないことも書きました (SLES 11 SP1 は Linux IS v2.1 のサポート対象外だから)。

この状況は現在も変わりませんが、YaST 経由で更新された Microsoft Hyper-V drivers (hyper-v-kmp-*) の新しいバージョンで、シャットダウン連携が機能することを確認しました。


SLES 11 SP1 に含まれる GPLv2 版の Hyper-V ゲスト コンポーネント Microsoft Hyper-V drivers (hyper-v-kmp-*) は、初期バージョンが 0_2.6.32.12_0.7-0.6.7 で、hv_vmbushv_netvschv_storvschv_blkvsc の 4 つのモジュールが提供されました。それぞれ、Linux ICs v2.0 の vmbusnetvscstorvscblkvsc 相当になります。その後、Microsoft Hyper-V drivers (hyper-v-kmp-*) は 8月初めに 0_2.6.32.13_0.4-0.7.3 に、9月中旬に 0_2.6.32.19_0.2-0.7.11 に更新されました。 0_2.6.32.13_0.4-0.7.3 以降、hv_timesourcehv_utils の 2 つのモジュールが追加されています。hv_timesource  は、Linux IS v2.1 にも含まれる、Linux ゲストに対して正確なタイムソースを提供するモジュールです。Linux 開発コミュニティのメーリング リストによると、「Addition of new driver for Hyper-V called hv_utils. This driver is intended to support things like KVP, Timesync, Heartbeat etc.」だそうです。

これらのモジュールは、SLES 11 SP1 では標準でロードされません。まだサポートされていないモジュールなのでしょう。動作の可否は別として、また、次に示す手順が正しいかどうかも別として、これらのモジュールを起動時にロードするように、SLES 11 SP1 ゲストを構成してみましょう。

(1) vi エディターなどを使用して、/etc/modprobe.d/unsupported-modules を開き、allow_unsupported_modules 0 の行を allow_unsupported_modules 1 に書き換えて上書き保存します。これをしておかないと、起動時のロードが許可されません (このことも、まだサポートされていないモジュールだということを示しています)。

(2) モジュールが存在するディレクトリに移動します。
cd /lib/modules/2.6.32-19.0.2-default(←kernelのバージョン)/extra
(3) 次のコマンドラインを実行して、モジュールをインストールします。
insmod hv_timesource.ko
insmod hv_utils.ko

(4) 次のコマンドラインを実行して、モジュールがロードされたことを確認します。
lsmod |grep hv_
(5) depmod コマンドを実行して、モジュールの依存関係を更新します。これで、hv_timesource のほうは起動にロードされるようになります。
depmod -a(6) vi エディターなどで /etc/sysconfig/kernel を開き、INITRD_MODULES="・・・・ hv_bkvsc hv_netvsc hv_storvsc hv_vmbus ・・・" の行を INITRD_MODULES="・・・・ hv_utils hv_bkvsc hv_netvsc hv_storvsc hv_vmbus ・・・" のように書き換えます。また、MODULES_LOADED_ON_BOOT="hv_storvsc hv_netvsc" の行を MODULES_LOADED_ON_BOOT="hv_storvsc hv_netvsc hv_utils"  のように書き換えます。このように 2 箇所に hv_utils を追加したら、上書き保存します (INITRD_MODULES の方での指定は不要かもしれません)。
(7) reboot コマンドで Linux ゲストを再起動します。
reboot
(8) Linux ゲストが再起動したら、次のコマンドラインを実行して、モジュールが自動的にロードされたことを確認します。
lsmod |grep hv_

ここまで作業したら、時刻同期、シャットダウン連携、ハートビートについて動作確認してみます。まず、時刻同期ですが、date --set コマンドなどで時刻を変更しても、自動的に Hyper-V ホストと同期されることはありませんでした。

続いて、シャットダウン連携です。 仮想マシン接続 (Vmconnect.exe) の「シャットダウン」ボタンまたは、Hyper-V マネージャーの「シャットダウン」メニューから SLES 11 SP1 ゲストの仮想マシンに対してシャットダウンを指示すると、期待どおりにシャットダウンが開始して、仮想マシンが停止します。こちらは成功です。

最後に、ハートビートですが、hv_utils がロードされていても、「ハートビート: コンタクトなし」 のままです。

ちなみに、SLES 11 SP1 の /usr/src/linux/drivers/staging/hv/  ディレクトリにあるソースコードと、Linux IS v2.1 の src ディレクトリにあるソースコードを簡単に比較してみると、SLES 11 SP1 側に時刻同期やハートビート機能が実装されていないことがわかります。ソースコードを見る限り、SMP 構成については、SLES 11 SP1 のコンポーネントでも既に対応しているようです。

openSUSE 11.3 の状況は?

ちなみに、openSUSE 11.3 は、現時点の最新カーネル 2.6.34.7-0.2 でも状況は変わらず、hv_vmbushv_netvschv_storvschv_blkvsc の 4 つの Staging コンポーネントしか存在しませんでした。

過去の投稿
SLES 11 SP1 が Hyper-V サポート ゲスト OS リストに含まれない理由
http://yamanxworld.blogspot.com/2010/08/sles-11-sp1-hyper-v-os.html
Linux Integration Services v2.1 for Windows Server 2008 Hyper-V R2 now on Web !!
http://yamanxworld.blogspot.com/2010/07/linux-integration-services-v21-for.html
SLES 11 SP1 は Hyper-V 仮想マシンにインストールするだけで完了
http://yamanxworld.blogspot.com/2010/07/sles-11-sp1-hyper-v.html
Hyper-V & openSUSE 11.3 & Windows Virtual PC
http://yamanxworld.blogspot.com/2010/07/hyper-v-opensuse-113-windows-virtual-pc.html

Linux kernel 2.6.32 以降には Hyper-V Linux ICs が組み込み済み
http://yamanxworld.blogspot.com/2010/03/linux-kernel-2632-hyper-v-linux-ics.html


(2010/09/22 追記) 9/22 に Microsoft Hyper-V drivers (hyper-v-kmp-*) のバージョンが 0_2.6.32.19_0.3-0.7.12 に更新されました。カーネルのセキュリティ バグ修正に伴う更新のようです。Microsoft Hyper-V drivers の 機能に違いはありません。

0 件のコメント: