2010/03/18

Linux kernel 2.6.32 以降には Hyper-V Linux ICs が組み込み済み

既知のように、Linux 向けのゲスト コンポーネント Linux Integration Components for Windows Server 2008 Hyper-V R2 (以下、Linux ICs v2) により、Hyper-V 2.0 および Hyper-V 1.0 上で以下の Linux ディストリビューションがマイクロソフトにより正式にサポートされています。
  • SUSE Linux Enterprise Server 10 SP1/SP2 (x86/x64)
  • SUSE Linux Enterprise Server 11 (x86/x64)
  • Red Hat Enterprise Linux 5.2/5.3/5.4 (x86/x64)
 Microsoft Virtualization Summit 2010 のブレイクアウト セッションの 1 つで、Linux ICs v2 が Linux カーネル (kernel 2.6.32 以降) に統合されたことが紹介されました。というわけで、実際に試してみました。

Linux ICs v2 は、GPLv2 の下で、Linux 開発コミュニティに提供されています。詳しくは、以下を参照してください。

Microsoft Contributes Linux Drivers to Linux Community http://www.microsoft.com/presspass/features/2009/Jul09/07-20LinuxQA.mspx

この成果として、2009 年 12 月 3 日にリリースされた Linux Kernel 2.6.32 以降には、GPLv2 版の Linux ICs v2 モジュールが標準で搭載されているということです。

実際に、2010年3月15日にベータ リリースされたばかりの、openSUSE 11.3 milestone 3 (kernel 2.6.33) で試してみました。

openSUSE 11.3 milestone 3
http://news.opensuse.org/2010/03/15/opensuse-11-3-milestone-3-is-out/

ゲスト OS のインストールはすんなり

上記 URL から DVD イメージをダウンロードして、Hyper-V 上に作成した仮想マシンにマウントし、インストールを開始します。インストールに特別なテクニックは必要なく、[F2 言語 > 日本語][F3 ビデオ モード > 1024 x 768]を指定して、あとは既定のままインストールを完了させます。

なお、仮想マシンには、ゲスト OS 用の IDE ディスクに加えて、SCSI コントローラーにディスクを追加しています。また、ネットワーク アダプター (レガシー ネットワーク アダプター) を 1 つ設定します。SCSI ディスクとネットワーク アダプターは、Linux ICs v2 が存在しなければ認識できない、統合タイプのデバイスです。









Linux ICs v2 のダウンロードとインストールは不要

インストールが完了したら、uname -a を実行して、カーネルのバージョンが 2.6.32 以降であることを念のため確認します。また、/sbin/ifconfig コマンドで、ネットワーク アダプター が存在しないことを確認します (lo はループバック) 。つまり、Linux kernel 2.6.32 以降を Hyper-V 仮想マシンにインストールしただけでは、Linux ICs v2 のコンポーネントは動かないということです。ただし、Linux ICs v2 をマイクロソフトからダウンロードする必要はありません。

Linux ICs v2 のコンポーネントは、kernel 2.6.32 以降の標準的なインストールで、次の場所に存在します (2.6.33-5-desktop の部分は、ディストリビューションの種類やビルド番号により異なります) 。パスを見ればわかるように、実験段階の Staging Drivers として組み込まれています。

/lib/modules/2.6.33-5-desktop/kernel/drivers/staging/hv

hv_vmbus.ko ・・・ 仮想マシン バス (VMbus) 用のモジュール
hv_netvsc.ko ・・・  ネットワーク VSC (統合タイプのネットワーク アダプター用ドライバー)
hv_storvsc.ko ・・・ ストレージ VSC (SCSI ディスク用ドライバー)
hv_blkvsc.ko ・・・ IDE ディスクからの起動を VMBus 経由にリダイレクトして高速化するためのドライバー

これらのモジュールは、insmod コマンドでインストールできます。

insmod hv_vmbus.ko
insmod hv_netvsc.ko
insmod hv_storevsc.ko
insmod hv_blkvsc.ko
depmod -a  (←これが必要かどうか分かりませんが、癖で実行してしまいました)

lsmod | grep vsc (またはlsmod | grep hv_) を実行すると、モジュールがロードされていることがわかります。なお、Staging Drivers なので、インストール時に syslog に、module is from the staging directory, the quality is unknown のようなログが記録されます。

モジュールを起動時に読み込むには

モジュールがロードされれば、VMbus やネットワーク アダプター、SCSI ディスクを利用できるようになります。ただし、このまでは、ゲスト OS を再起動すると、デバイスが消えてしまいます。マイクロソフトの Linux ICs v2 の場合は、/etc/init.d/vmbus などでサービスの起動制御を行っていますが、GPLv2 版の Linux ICs v2 には、起動用のスクリプトがありません。私の場合は手っ取り早く、/etc/init.d/boot.local に次の 4 行を記述しました (注:正しい方法かどうかは分かりません) 。

/sbin/modprobe hv_vmbus
/sbin/modprobe hv_netvsc
/sbin/modprobe hv_storevsc
/sbin/modprobe hv_blkvsc

動作確認

/sbin/ifconfigseth0 が認識されることを確認します (YaST の[ネットワーク設定]を使用して、設定する必要がありました) 。また、cat /proc/scsi/scsi や YaST の [パーティションの分割]を使用して、SCSI ディスクが認識されていることを確認します。

まとめ

ちなみに、kernel 2.6.32 以降を採用した Linux ディストリビューションの正式リリース (安定版) は、いまのところありません (たぶん)。現在開発中の openSUSE 11.3、Fedora 13、Ubuntu 10.4 あたりから GPLv2 版 Linux ICs v2 が利用できるようになるでしょう。

現在、正式サポート対象の SUSE Linux Enterprise Server や Red Hat Enterprise Linux も、将来のバージョンは kernel 2.6.32 以降になるはずです。マイクロソフトから Linux ICs の新しい対応バージョンが提供されるのか、それとも GPLv2 版を使用するのか、どのような対応になるのでしょうか? 少なくとも、Linux ICs の新しい対応バージョン (v3?) で新機能 (時刻同期やシャットダウン連携など)や性能強化が行われない限り、GPLv2 版を利用するほうが簡単そうです。

GPLv2 版 Linux ICs v2 が早いうちに、Staging から脱却してくれることを期待します。また、時刻同期やシャットダウン連携が早いとこ実装されることを願います。

過去の投稿:
Linux ICs v2 のもうちょっと詳しいステップ バイ ステップ ガイド (我流) : SLES 11 編http://yamanxworld.blogspot.com/2010/02/linux-ics-v2-sles-11.html
Linux ICs v2 のもうちょっと詳しいステップ バイ ステップ ガイド (我流) : RHEL 5.4 編
http://yamanxworld.blogspot.com/2010/02/linux-ics-v2-rhel-54.html