自分用メモ。
まずiSCSIを全く知らないので、軽くwikiを眺める。
http://ja.wikipedia.org/wiki/ISCSI
鯖1台にしか作らないのでうまみがあんまりないんだけど。
iSCSIストレージを提供する側(target)と、iSCSIストレージを利用する側(initiator)でそれぞれ設定が必要
iSCSI target
まずはtargetから。
LinuxではiSCSI Target Enterpriseってのがメジャーらしい。
yumのリポジトリからさくっと入れることもできるのだけど、
なんとなくプロジェクトから一番新しいのを引っ張ってくる。
# updateはしておきましょう yum -y update # gccとかopensslとかdevelとか必要。 yum -y install svn yum -y install kernel-devel yum -y install patch yum -y install make yum -y install gcc yum -y install openssl-devel # ここで1回再起動する必要があるかもしれない cd /usr/local/src svn co https://iscsitarget.svn.sourceforge.net/svnroot/iscsitarget iscsitarget cd iscsitarget/trunk make make install # サービス自動起動設定 chkconfig iscsi-target on
早速使おうと思ったけど使う領域を作ってなかった。
今回はあまり関係ないので、おまけ扱いにする。
RAIDで /dev/md0 なデバイスを作ったとする。
次に設定。以下のファイルをいじる。デフォルトで全部コメントアウトされていた。
vi /etc/iet/ietd.conf
識別子は好きに書いてよさげだけど、コメントにはちゃんとこうやって書いてね、と書いてある。
iqn.yyyy-mm.
[:identifier]
yyyy-mmはドメインを取得した日付らしい。
reversed domain nameは「rying.net」なら「net.rying」とするべきらしい。
identifierは任意。今回はvol0にする。
ついでに簡単に認証もかけておきます。パスワードは12桁でないとだめ。
MaxConnectionsは同時接続数で、普通は"1"です。
iscsiを使ってファイル共有とか同時接続数を増やしたいなら、増やします。機能するか知りませんが。
Target iqn.2012-11.net.rying.win-iscsi:win-iscsi Lun 0 Path=/dev/md0p1,Type=fileio IncomingUser ryozi 123456789012 MaxConnections 8 Target iqn.2012-11.net.rying.iscsi:iscsi Lun 0 Path=/dev/md1,Type=fileio IncomingUser ryozi 123456789012 MaxConnections 8
そしてrestart
[root@localhost ~]# service iscsi-target start Starting iSCSI Target: FATAL: Error inserting crc32c_intel (/lib/modules/2.6.32-279.11.1.el6.x86_64/kernel/arch/x86/crypto/crc32c-intel.ko): No such device [ OK ]
OKとか出てるけど、なんかマズそうなエラー。
こいつを出さないようにするには、起動スクリプトをちょっといじる。
vi /etc/init.d/iscsi-target
以下の行をコメントアウト。
modprobe -q crc32c
大丈夫なんかな...
iSCSI Initiator
次に設定。作ったiSCSI targetを読みに行くためのiSCSI initiator。
LinuxではOpen-iSCSIがホットらしい。
何か、以下の2つがないと「/usr/bin/ld: cannot find -lc」と出てだめだったので入れておく。cライブラリ関係だろう。
yum -y install glibc-utils yum -y install glibc-static cd /usr/local/src wget http://www.open-iscsi.org/bits/open-iscsi-2.0-873.tar.gz tar xzf open-iscsi-2.0-873.tar.gz cd open-iscsi-2.0-873 # README に色々書いてあるので読むと良い。僕は英語読めないからあきらめた。 make make install # サービス自動起動設定 chkconfig open-iscsi on
installは終わった。次に設定に入っていく。
まずtargetを見つける。同じサーバ内にあるので、自身のIPで探す。
iscsiadm -m discovery -t sendtargets -p 192.168.0.XXX
192.168.0.XXX:3260,1 iqn.2012-11.net.rying.iscsi:iscsi
192.168.0.XXX:3260,1 iqn.2012-11.net.rying.win-iscsi:win-iscsi
設定したときのtargetのiqnが見えますね。うまく見つけられたようです。
見つけると設定ファイルが下記の場所につくられるので、パスワード設定をしておきます。
cd /etc/iscsi/nodes/ cd iqn.2012-11.net.rying.iscsi:iscsi/ # 見つけたiqn cd 192.168.0.253,3260,1/ # 検索したときのIPとPortとか vi default
# targetでパスワードを設定しているので以下を追加
node.session.auth.authmethod = CHAP
node.session.auth.username = ryozi
node.session.auth.password = 123456789012
使わないnodeは削除しても問題なさそう?
cd /etc/iscsi/nodes/ rm -rf "iqn.2012-11.net.rying.win-iscsi:win-iscsi"
initiatorサービスを再起動(起動してないならstart)
service open-iscsi restart
こんなログが出たらOKっぽい。
Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2012-10.net.rying:vol0, portal: 192.168.0.XXX,3260] (multiple)
Login to [iface: default, target: iqn.2012-10.net.rying:vol0, portal: 192.168.0.XXX,3260] successful.
iSCSIで繋がっているドライブを認識しているか調べる。
fdisk -l
...中略...
ディスク /dev/sdf: 2000.4 GB, 2000397746176 バイト
ヘッド 255, セクタ 63, シリンダ 243201
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
このディスクが増えてました。こいつがソレっぽいです。
後は初期化してマウントして自由に使うだけ。
ただ環境が変わったりすると、マウントされるデバイスの位置がかわるっぽい(?)ので、
udevで実デバイスに割り当てるLinux上のデバイス名を固定するとよいらしい。
参考: 強欲と未練: CentOS5におけるudevを用いたiSCSIのデバイス名固定 とパーティションノードの作成に関して
おまけ
サービスの起動順序の関係で、iscsi-targetよりもopen-iscsiが先に起動する。
iscsi-target起動してない状態でopen-iscsiサービスを立ち上げようとすると、コネクションエラーになり、接続できない。
[root@localhost ~]# cat /etc/init.d/iscsi-target | grep chkconfig
# chkconfig: - 39 35
[root@localhost ~]# cat /etc/init.d/open-iscsi | grep chkconfig
# chkconfig: 345 13 89
iscsi-targetの起動番号が39、open-iscsiの起動番号が13なので、
open-iscsiの起動番号を40以上にしてやる必要がある。
sed -i 's/# chkconfig: 345 13 89/# chkconfig: 345 40 89/' /etc/init.d/open-iscsi chkconfig --del open-iscsi # 登録しなおすため一度削除 chkconfig --add open-iscsi
[root@localhost ~]# ls -l /etc/rc.d/rc3.d/ | grep iscsi
lrwxrwxrwx. 1 root root 16 11月 4 22:55 2012 S07iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 15 11月 5 01:13 2012 S13iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 22 11月 5 01:25 2012 S39iscsi-target -> ../init.d/iscsi-target
lrwxrwxrwx. 1 root root 20 11月 5 02:46 2012 S40open-iscsi -> ../init.d/open-iscsi
S39iscsi-target、S40open-iscsi となっているのでOK。
Windowsで使う
iscsiイニシエータはWindows7ならたぶん入ってると思う。(Ultimateだからかも)
無くても無償でget出来るらしい。
コントロールパネル→管理ツール→iscsiイニシエータを開いて、
iSCSIの設定をした鯖のIPを打つ。
ターゲットに先ほどのiSCSI targetが出てくるので、選択して接続。
その後に表示されたウィンドウ内にある、詳細設定より、
「CHAPログオンを有効にする」にチェックを入れ、
名前にryozi, ターゲットシークレットに123456789012を指定。
後はHDDを増設したときのように、ディスク管理のとこに出てくるので、ドライブ文字を割り当てて、フォーマットして完了。
ベンチマークもとってみた。
----------------------------------------------------------------------- CrystalDiskMark 3.0.2 x64 (C) 2007-2012 hiyohiyo Crystal Dew World : http://crystalmark.info/ ----------------------------------------------------------------------- * MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s] Sequential Read : 98.820 MB/s Sequential Write : 58.041 MB/s Random Read 512KB : 92.393 MB/s Random Write 512KB : 44.489 MB/s Random Read 4KB (QD=1) : 8.359 MB/s [ 2040.7 IOPS] Random Write 4KB (QD=1) : 0.948 MB/s [ 231.5 IOPS] Random Read 4KB (QD=32) : 91.999 MB/s [ 22460.6 IOPS] Random Write 4KB (QD=32) : 1.224 MB/s [ 298.8 IOPS] Test : 1000 MB [W: 0.0% (0.1/931.5 GB)] (x3) Date : 2012/11/05 2:03:15 OS : Windows 7 Ultimate Edition SP1 [6.1 Build 7601] (x64)