Debianで iSCSI + OCFS2 試した
Debian testing (Wheezy) で試したが,多分 Ubuntu Natty (11.04) でも一緒です! Maverick のアップグレードが終わったら後で試す! 悔しいがUbuntuのことを書いておいた方がヒット率が高まる気がする!!
あくまでテストなんで同じPCでマウントしてみた.なお zbox
== 192.168.1.200
である.
iSCSIの「ターゲット」デーモン ietd
(NFSサーバ相当)を aptitude install iscsitarget iscsitarget-dkms
で入れて,実パーティション /dev/sdb8
を iqn.2011-08.localdomain.zbox.target:zbox-loopback
という名前で公開するよう /etc/iet/ietd.conf
(および /etc/default/iscsitarget
)を設定:
Target iqn.2011-08.localdomain.zbox.target:zbox-loopback Lun 0 Path=/dev/sdb8,Type=blockio
/etc/init.d/iscsitarget start
で動き出すので netstat -tln | grep 3260
で確認.
iSCSIの「イニシエータ」デーモン iscsid
(NFSクライアント相当)を aptitude install open-iscsi
で入れて,先の iqn.2011-08.localdomain.zbox.target:zbox-loopback
にアクセス:
# iscsiadm -m discovery -t sendtargets -p zbox 192.168.1.200:3260,1 iqn.2011-08.localdomain.zbox.target:zbox-loopback # iscsiadm -m node --targetname iqn.2011-08.localdomain.zbox.target:zbox-loopback --login
これでイニシエータがターゲットに接続したはず(両方自分だが...)なので確認:
# iscsiadm -m session tcp: [3] 192.168.1.200:3260,1 iqn.2011-08.localdomain.zbox.target:zbox-loopback $ netstat -tn|grep 3260 tcp 0 0 192.168.1.200:41618 192.168.1.200:3260 ESTABLISHED tcp 0 0 192.168.1.200:3260 192.168.1.200:41618 ESTABLISHED $ dmesg | tail [941976.025488] scsi10 : iSCSI Initiator over TCP/IP [941976.294621] scsi 10:0:0:0: Direct-Access IET VIRTUAL-DISK 0 PQ: 0 ANSI: 4 [941976.295238] sd 10:0:0:0: Attached scsi generic sg2 type 0 [941976.298137] sd 10:0:0:0: [sdc] 209715200 512-byte logical blocks: (107 GB/100 GiB) [941976.299253] sd 10:0:0:0: [sdc] Write Protect is off [941976.299267] sd 10:0:0:0: [sdc] Mode Sense: 77 00 00 08 [941976.300788] sd 10:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
ターゲット上の実パーティション /dev/sdb8
が,イニシエータ上にブロックデバイス /dev/sdc
として見えるようになった.これがiSCSIの仕事である.ここに fdisk(8)
でパーティション切って mkfs(8)
でファイルシステムを初期化:
# mkfs.ocfs2 -L Corega_iSCSI_OCFS2 /dev/sdc1
「なんだ,この流れはローカルのファイルシステムと一緒じゃん」と調子に乗ってマニュアルを読まず mount /dev/sdc1 /mnt/test/ocfs
すると,この時点ではまだエラーになる.OCFS2は専用のクラスタ制御システム o2cb(7)
が動いてないと駄目なのだ.aptitude install ocfs2-tools
で入れて設定ファイル2つをこねる.まず /etc/default/o2cb
:
O2CB_ENABLED=true O2CB_BOOTCLUSTER=zbox-ocfs2
(ここで新たにOCFS2層での名前 zbox-ocfs2
が必要になった.)ちなみに最初 O2CB_ENABLED=yes
と書いたら /etc/init.d/o2cb start
が動かず悩んだのは内緒.そういうときは bash -x /etc/init.d/o2cb start
と打つとトレースが出る.次に cp /usr/share/doc/ocfs2-tools-examples/cluster.conf /etc/ocfs2
して,適当に編集:
node: ip_port = 7777 ip_address = 0.0.0.0 number = 0 name = zbox cluster = zbox-ocfs2 cluster: node_count = 1 name = zbox-ocfs2
正直あんまり意味を理解してないが... 複数イニシエータが同じパーティション(上のOCFS2)にアクセスする設定なら上の "node
" 等をその数だけ増やして各イニシエータの /etc/ocfs2 に rsync(1)
すりゃいいんだろう.ともあれ,それが済んだら
# /etc/init.d/o2cb start Setting cluster stack "o2cb": OK Starting O2CB cluster zbox-ocfs2: OK $ netstat -tna | grep 7777 tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN # mount /dev/sdc1 /mnt/test/ocfs # df -Th /mnt/test/ocfs Filesystem Type Size Used Avail Use% マウント位置 /dev/sdc1 ocfs2 30G 1.6G 29G 6% /mnt/test/ocfs
よっしゃー.後は適当にI/Oベンチでもしてくれ.Sequential I/Oが30 MB/s, random I/Oが >1 MB/s だったよ... どうでもいいが1台から成るOCFS2クラスタだと 7777 番ポートの netstat(1)
が寂しいね.
今回はiSCSI経由で貰ったディスク容量を,まぁ要するに「flock(2)
内蔵ファイルシステム」であるところのOCFS2経由で利用した訳だが,「ディスク容量を貰う」だけで同時にマウントしないならOCFS2でなくext3でもNTFS-3gでも何でもいいはず.
iSCSI + OCFS2とNFSを比べたときの利点は,
- iSCSIの方が数倍高速らしい(確かめてない.我が家のハブは100BASE-Tだしな)
- NFSで面倒なユーザアカウント云々が無い(イニシエータがターゲットに認証されればそこでお終いで,ディスクのブロックの使い道はターゲットのセキュリティに一任される)
こんなもんか.後者だけでも嬉しい用途はあるんじゃないかな.LDAPの保守とか nfsnobody
って何? とか,めんどいからね... 欠点としてはターゲット本人が接続してないときにパーティションの中を覗くのが面倒という点かな.まぁ losetup(8)
を駆使すればいい気もするが,ブラックボックス度が高いのは否めない.
後で細部を直す予定.
参考URL(順不同)
つまり私がうだうだ書かなくても必要な情報は既にweb上に揃っていたということでもあるが...
- http://www.usupi.org/sysad/171.html
- http://bitstar.jp/blog/?p=891
- http://www.quilva.jp/blog/2009/07/10/debian-%E3%81%A7-iscsi-target-%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6-windows-xp-%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/
- http://takaki-web.media-as.org/blog/ocfs2306e5b9f9a13
- http://www.metainfo.jp/memo/?p=33