LennyでiSCSI 【その1】Targetを構築 | 雲の上はいつも青空

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

以前、Xen環境を構築するときに書きましたが、やっとiSCSIを検証できる環境が出来上がってきたので、ゆっくりですが作業を開始しました。

iSCSI自体はもうさほど目新しい技術ではありませんが、まだまだ一般的とは言えません。
一日も早く実戦投入できるよう、検証を頑張りたいと思っています。

まずはstep1ということで、iSCSIのターゲットをLenny上に構築します。
iSCSIでは、実際のストレージとして動作する側をTarget(ターゲット)、そのストレージに接続する側をInitiater(イニシエーター)と呼びます。

$雲の上はいつも青空-ITX-220今回、このTargetを動かすマシンとして用意したのが、ASUS製ITX-220というマザーボードです。
見ての通り、Mini ITX仕様のとても小さなマザーボードです。
しかもCPUは直付けで交換ができません。
Celeron220という聞き慣れないCPUですが、調べてみると産業機器向けに作られたCPUで一世代前のCore2シリーズがベースになっているようです。
※クロックを落とし、L3キャッシュを無くし、もちろんシングルコア。
※最近のマザーボードにしては珍しく、シリアルポートが付いています。

FSBが533MHzで、CPUのクロックが1.2GHzですから、Windowsマシンとしては相当非力です。
しかし個人的には、Linuxマシンとして使う分には十分のスペックだと思っています。
雑誌のベンチマークとか見るとATOM230(例のデュアルコアで1.6GHz)よりは、若干速いようです。

Lennyの基本インストールは何事もなく、スムースに終わりました。
Linux kernel 2.6.26-2-686
iscsitarget 0.4.16+svn162-3
iscsitarget-modules-2.6.26-2-686 2.6.26+0.4.16+svn162-6+lenny1

ここから、iSCSIのターゲットを構築します。
…といっても、インストールは簡単です。

aptitude install iscsitarget-modules-2.6-686 iscsitarget

次に、iSCSIのストレージ領域を通常のファイルとして作成し、それをループバックデバイスに登録します。
ループバックデバイスへ登録することで、ファイルをまるでディスクイメージのようにパーテションとして使えるようになります。
また、今回はiSCSIのストレージ領域として使うので、iscsitargetを動かすマシンからは中を見ることはありません。
つまり、通常のパーテションのようにマウントする必要はありません。
※ですので、fstabに記述する必要もありません。

まずは、ファイルを作りましょう。
テスト用ですから、10Gもあれば十分です。

cd /opt
dd if=/dev/zero of=iscsi0 bs=1M count=10240


次に、出来上がった空っぽのファイルをループバックデバイスに割り付けます。
まず、ループバックデバイスがいくつ使えるか調べます。

cat /proc/devices

デフォルトの状態ですと、
Block devices:
1 ramdisk
2 fd
3 ide0
7 loop
とか表示されるので、loop0~loop7まで使えることがわかります。
今回はloop7に割り付けます。

losetup /dev/loop7 /opt/iscsi0

これで、準備は出来ました。
次に、/etc/ietd.confを設定します。
今回は、認証無しで一番簡単に接続する設定です。
Target iqn.2009-10.jp.it-tutor:storage.disk0
Lun 0 Path=/dev/loop7,Type=fileio
この2行があれば、設定は完了です。
Targetの命名規則はあるようなのですが、デフォルトのconfを見てなんとなくそれっぽい名前をつければいいみたいです。

最後に、/etc/default/iscsitarget を、ISCSITARGET_ENABLE=true にして、
/etc/init.d/iscsitarget start で、サービスが起動します。


って、これで終わりだと思ったのですが、問題が発生しました。
この状態で、マシンの再起動をするとiSCSIが正常に動かないのです。
正確に書くと、losetup /dev/loop7 /opt/iscsi0 の設定が、再起動をすると無効になってしまいます。

これから書く方法が正規の方法かどうかわかりませんが、私は下記のようにしてこの問題を回避しました。

1./etc/rc.local に、/sbin/losetup /dev/loop7 /opt/iscsi0 を記入
2.しかし、rc.localが実行される順番はデフォルトだとiscsitargetより後になるのでうまくありません。
→サービスの起動順序を変更します。
3.update-rc.d -f rc.local remove で、全ての起動ファイルから外す。
4.update-rc.d rc.local start 30 2 3 4 5 . 30番で起動(最後のピリオドを忘れずに!)
5.update-rc.d -f iscsitarget remove 同様に、一度起動ファイルから外す。
6.update-rc.d iscsitarget defaults 31 31番として起動・停止に設定する。

これで、rc.localが30番として起動し、次に31番でiscsitargetが起動します。


私のテスト環境では、以上の設定でiSCSIのTargetは正常に起動しています。
次回はイニシエーター側の設定を書いてみます。