Hyper-V Linux 統合サービス v2.1 をインストールする (CentOS 5.5) - Linux の使い方
Linux Integration Services v2.1 for Windows Server 2008 Hyper-V R2
Microsoft 社の仮想サーバー Hyper-V R2 上で Linux を効率的に運用するためには、専用のドライバーをインストールする必要があります。
そのためには Microsoft 社が提供している "Linux Integration Services v 2.1 for Windows Server 2008 Hyper-V R2" を Linux 上でインストールします。これをインストールすることで、ホスト PC との時刻同期や、4 機までの仮想マルチプロセッサーのサポート、専用のネットワークコントローラーや SCSI といったデバイスのサポートなどが挙げられます。
今回はこの Linux Integration Services v2.1 を、Red Hat とバイナリレベルで互換性があるとされる CentOS 5.5 にインストールしてみようと思います。
Linux Integration Services v2.1 のインストール
事前準備
初めてこの Linux Integration Services v2.1 を CentOS 5.5 (x86_64) にインストールしてみた時に、Kernel Panic が発生して OS が起動できない状態になってしまったことが 1 度ありました。
そういった不測の事態に備えて、Linux Integration Services v2.1 のインストールに先立って、現在の起動イメージをバックアップしておくのが良いかもしれません。
起動イメージは、CentOS 5.5 の場合は "/boot" ディレクトリに保存されていますので、そのファイルをバックアップします。
例えば、起動時に読み込まれている起動イメージが "/boot/initrd-2.6.18-194.26.1.el5.img" だった場合には、これを例えば次のようにして "/boot/initrd-2.6.18-194.26.1.el5.original.img" というように別の名前でコピーします。
cp /boot/initrd-2.6.18-194.26.1.el5.img /boot/initrd-2.6.18-194.26.1.el5.original.img
このようにしたら、失敗した場合にこの起動イメージでも起動を試みることができるように、"/etc/grub.conf" に次のような行を追加します。
title CentOS (2.6.18-194.26.1.el5, Original)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-194.26.1.el5.original.img
内容は、各 Linux 環境に合わせて設定する必要がありますが、要点としては、既存の起動イメージを、先ほどバックアップしたものに置き換えた起動設定を新たに追記するという形になります。
CentOS 5.5 の起動ローダー Grub の場合、"/etc/grub.conf" 内に "title" から始まる 4 行で起動設定が記されているようでしたので、そこから、何も選択しなかった場合に使用される最初の "title" から始まる起動設定をコピーして、次の "title" から始まる行の直前に複写します。
その上で複写した 2 つめの "title" から始まる行内の、"title" の行に目で見てわかるラベル名を設定して、"initrd" の行には、先ほどバックアップした起動イメージのファイル名を設定しておきます。
これで、もし何らかの理由で起動できなくなった場合でも、電源を ON にして少しするとでてくる CentOS の起動画面で何かキーを押すことで、今回登録した起動イメージを選択して起動を試みることができるようになります。
もし、設定が正しくできているかを再起動して確認してみた場合には、Linux Integration Services のインストールを始める前に、もう一度再起動をおこなって、本来の起動イメージで起動しなおしておきましょう。
64 ビット環境での準備
CentOS 5.5 の 64 ビット環境では、Linux Integration Services でホスト PC と時刻同期をするために "adjtimex" というパッケージをインストールしておく必要があるようでした。
こちらは、次のようにして yum を使ってインストールを行うことが可能です。
yum install adjtimex
Linux Integration Services のインストール
平成 22 年 11 月 18 日現在では https://www.microsoft.com/downloads/details.aspx?FamilyID=eee39325-898b-4522-9b4c-f4b5b9b64551&displayLang=ja から "Linux Integration Services v 2.1 for Windows Server 2008 Hyper-V R2" をダウンロードすることが出来るようになっていました。
ここから "Linux Integration Services v2.1 for Microsoft Hyper-V.EXE" をダウンロードしたら、これをまずは Windows 上で実行します。
すると、解凍するフォルダーを尋ねられるので、どこかフォルダーを指定すれば、そこへ "LinuxIC v21.iso" という CD-ROM イメージファイルと、インストール方法などが記された PDF とがそのフォルダーに保存されます。
解凍された "LinuxIC v21.iso" を Hyper-V ホストサーバーへコピーして、それをインストールしたい仮想 PC の仮想 CD-ROM ドライブにマウントします。
仮想 PC にマウントしたら、次のようにして CentOS 5.5 へマウントさせます。
mount /dev/cdrom /mnt
/mnt へ CD-ROM の内容がマウントされたら、次のようにして "/opt/linux_ic_v21_rtm" ディレクトリーを作成して、そこに CD-ROM の内容を全て複製します。
mkdir /opt/linux_ic_v21_rtm
cp -R /mnt/* /opt/linux_ic_v21_rtm
"/opt/linux_ic_v21_rtm" ディレクトリーへ内容を複製したら、次のようにして Linux Integration Services のコンパイルを行います。
cd /opt/linux_ic_v21_rtm
make
もし make の段階で "make: *** /lib/modules/2.6.18-194.26.1.el5/build: No such file or directory." といったメッセージが表示されてエラーとなる場合には kernel-devel パッケージがインストールされていない可能性があります。
その場合は、"yum install kernel-devel" を実行して kernel-devel パッケージのインストールを行ってみると上手く行くようになると思います。
また、CentOS 5.5 の場合、既定では GCC がインストールされていないようですので、"gcc: Command not found" というメッセージが表示されてエラーとなってしまう場合には、"yum install gcc" として、GCC のインストールも行う必要があるようでした。
コンパイルが完了したときに、今回は CentOS 5.5 が 64 ビット環境だからか、"Your system DOES NOT support the timesource driver" というメッセージが表示されましたが、これはとりあえず気にしないでおくことにします。
ここまでできたら、次のようにして Linux Integration Services のインストールを行います。
make install
これで Linux Integration Services のインストールは完了です。
インストールが終わったら、あとは次のようにして、Linux の再起動を行えば作業は完了です。
reboot
Linux Integration Services が正しくインストールされれば、これまで認識できなかった Hyper-V サーバーの "ネットワークアダプター" が "seth0" という名前で認識されるようになるので、それを見ても、Linux Integration Services が正しく構成された起動イメージで起動できていることを確認できると思います。
ただ、Linux Integration Services をインストールして、ホスト OS との "時刻の同期" を有効にしていても、だいぶ進み具合は落ちたような感じですが、時刻が先へと進んでしまう状況は改善されない感じでした。
こちらについては、やはり Hyper-V 上の Linux でシステム時刻を同期する (CentOS 5.4) で記したような方法で、ゲスト OS 側でも対応を取っておく必要があるようです。
Linux Integration Services v2.1 インストール後に起動できなくなった場合
自分の環境で最初の 1 度、CentOS 5.5 (x86_64) に Linux Integration Services をインストールしたところ、"make install" を実行した後で "Kernel panic - not syncing: Fatal exception" というメッセージが表示されて、Linux がハングアップしてしまいました。
仮想 PC の再起動を行っても、起動時に VFS のマウントを行おうとした時点で Kernel panic となってしまい、どうにもならなくなってしまいました。
カーネルのアップデート前に残っていた以前の起動イメージでは OS を起動させることができました。
そして "/boot" ディレクトリー内を確認してみたところ、その内にファイル名の末尾が ".backup0" という形で、Linux Integration Services をインストールしたときに自動的にバックアップされた起動イメージが保存されていました。
その内容でおかしくなった起動イメージを上書きして、再起動をかけてみたところ、とりあえず Linux Integration Services が読み込まれない状態で Linux を起動させることができました。
ちなみに、別の Hyper-V 仮想 PC に Linux Integration Services を同じようにインストールしてみましたが、そちらは問題なくインストールができました。
具体的には、DVD メディアから 64 ビットの CentOS 5.5 を標準構成でインストールして、kernel を最新版にし、そこに gcc と kernel-devel をインストールした環境へ、上記の手順で再度 Linux Integration Services のインストールを行ってみた感じです。
また、今回失敗した CentOS 5.5 でも、起動イメージを元に戻して再起動をして、"/opt/linux_ic_v21_rtm" ディレクトリ内で "make clean" を実行してから、再度 "make" → "make install" としてみたところ、今度は問題なくインストールして起動することができるようになりました。
今回どういった原因で失敗したのかわかりませんが、起動しなくなるという可能性も考慮に入れて、慎重に Linux Integration Services をインストールする必要性はありそうです。
Linux カーネルのアップデートを行った後にも、おそらく Linux Integration Services を再インストールする必要が出てくると思いますので、起動できなくなっても対応できるような状況で、インストール作業を行うのが安心かもしれません。