FreeBSD で iSCSI を試す2009年04月03日 11時20分30秒

iSCSI は SCSI コマンドをネットワークを通して、発行する取り決め。FreeBSD では 7.0-RELEASE からサポートされている。サーバ側のデバイスを提供する側を「ターゲット」と呼び、サービスを利用する側を「イニシエータ」と呼ぶ。慣れるのに少し時間がかかった。

FreeBSD でターゲットになるためには、ports から net/iscsi-target をいれる。NetBSD からの移植だ。


$ sh /usr/local/etc/rc.d/iscsi_target forcerestart
Stopping iscsi_target.
Starting iscsi_target.
Reading configuration from `/usr/local/etc/iscsi/targets'
target0:rw:192.168.0.0/8
        extent0:/tmp/iscsi-target0:0:10485760
DISK: 1 logical unit (20480 blocks, 512 bytes/block), type iscsi fs
DISK: LUN 0: 10 MB disk storage for "target0"
TARGET: TargetName is iqn.1994-04.org.netbsd.iscsi-target

/usr/local/etc/iscsi/targets にファイル名やデバイス名を記述して、設定をする。その後、rc スクリプトを用いて起動する。

今度は、FreeBSD をイニシエータにする。こちらは、カーネルのサポートが必要になる。


$ kldload iscsi_initiator

kldload でカーネルモジュールを読み込む。

iscontrol に -d を渡すと、利用可能なサービスが検索できる。


$ iscontrol -d -t 192.168.0.21
TargetName=iqn.1994-04.org.netbsd.iscsi-target:target0
TargetAddress=192.168.0.21:3260,1

接続を試みる。


$ iscontrol -t iqn.1994-04.org.netbsd.iscsi-target:target0
getaddrinfo(iqn.1994-04.org.netbsd.iscsi-target): hostname nor servname provided
, or not known
$ iscontrol -t 192.168.0.21
0x0200: Initiator error

失敗した。もう一度やり直す。

$ iscontrol -t 192.168.0.21 targetname=iqn.1994-04.org.netbsd.iscsi-target:targ
et0
iscontrol[66490]: running
$ iscontrol[66490]: (pass0:iscsi0:0:0:0):  tagged openings now 0
iscontrol[66490]: cam_open_btl: no passthrough device found at 1:0:1
iscontrol[66490]: cam_open_btl: no passthrough device found at 1:0:2
iscontrol[66490]: cam_open_btl: no passthrough device found at 1:0:3
iscontrol: supervise starting main loop

今度は繋がったようだ。

iscsi デバイスが出来る。


$ ls -lsd /tmp/iscsi-target0 /dev/iscsi*
  0 crw-------  1 root  wheel    0, 157 Apr  2 21:03 /dev/iscsi
  0 crw-------  1 root  wheel    0, 158 Apr  2 21:03 /dev/iscsi0
 96 -rw-r--r--  1 root  wheel   104858112 Apr  3 00:29 /tmp/iscsi-target0
$ dmesg
da0 at iscsi0 bus 0 target 0 lun 0
da0:  Fixed Direct Access SCSI-3 device

まだ、SCSI デバイスの da0 も出来た。デバイスはここを通して使える。

# newfs -U /dev/da0 
/dev/da0: 10.0MB (20480 sectors) block size 16384, fragment size 2048
        using 4 cylinder groups of 2.52MB, 161 blks, 384 inodes.
        with soft updates
super-block backups (for fsck -b #) at:

残念ながら切断の方法は、見つけられなかった。