2011年10月3日月曜日

GentooでiSCSIブートしようとしている人はバージョンに注意してね

ちょっと試してみたくって、ディスクレスなGentooマシンを構築してみました。
が、1ヶ月以上もハマってしまいました(汗

思惑としては、なんちゃってストレージエリアネットワークを作って、ディスクの
一元管理と省電力化になればなと。

iSCSIブートな環境構築の詳細は、後日まとめようと思いますが、やることを大雑把にまとめると
  1. カーネルオプションの指定
  2. genkernel にiscsiオプションつけて実行
  3. grubにパラメータ追加して起動
ってだけで、まあブートまでは簡単にできます。

ただ、この状態だと起動時にiscsistartコマンドが実行され、iSCSIが
使える状態にはなっているんですが、エラー発生時に再接続などは
やってくれません。

ディスクレスなので、ルートがiSCSIのボリュームになっているので、
エラーが発生するとダンマリを決め込む困ったちゃんになってしまいます。

最初、これに気がつかず、iSCSIブートできたぁ♪と喜んでいたら、起動して
数日経って、なんか知らんがマシンが固まるといった現象に遭遇していました。

そこでiscsidを起動して、エラー発生時に再接続を行うようにします。
しようとするんですが、できません・・・

とりあえず
# emerge open-iscsi
とかして
# iscsid -f -d 8
とか実行してみると、起動時にiscsistartで接続できていたセッションが
切断されてダンマリをキメてきます・・・


えぇ!!ナニコレ!!と、訳もわからず色々試してみるものの、状況は変わらず
ダンマリをキメてきます。血迷って、emerge -e worldなんてのも、してみましたとも。
ええ。

と、そんなある日、気がついちゃったんですよ。
Gentooの恐ろしさを。

genkernelでinitrdに組み込まれるiscsistartのopen-iscsiのバージョンと、
起動後のopen-iscsiのバージョンが違うじゃない!!

genkernelで使用されるバージョンは /etc/genkernel.conf に指定されていて
こんな指定になってます。
ISCSI_VER="2.0-872"
ISCSI_DIR="open-iscsi-${ISCSI_VER}"
で、emerge -s open-iscsiすると
* sys-block/open-iscsi
Latest version available: 2.0.871.3
とか返ってきます。グヘェっ!!

/etc/portage/package.keywordsに
=sys-block/open-iscsi-2.0.872 ~amd64
を追加して
# emerge -u open-iscsi
すると、genkernelでinitrdに組み込まれるのと同じバージョンがインストールされます。
インストール後iscsid起動すると、何事もなかったように起動しました♪

自動起動するように、rc-updateしときます。
# rc-update add iscsid default
それいらいダンマリをキメることなく安定しています。
Gentooステキ