====== FreeBSD 11でiSCSI Targetを作る ======
===== まえがき =====
FreeBSD 10.0で登場した[[https://www.freebsd.org/cgi/man.cgi?query=ctld&apropos=0&sektion=8&manpath=FreeBSD+11.0-RELEASE&arch=default&format=html|ctld(8)]]により、FreeBSDもネイティブでiSCSIをサポートするようになった。本記事では、そのctldを用いたiSCSIターゲットの構築方法を説明する。FreeBSD 9以前では事情が大きく異なるので注意されたい。
==== ターゲットとイニシエータ ====
超乱暴に言えばiSCSIはケーブルがLANケーブルに変わっただけのSCSIなので、用語や概念はSCSIのそれを踏襲している。馴染みが薄く自分でも混乱するので簡単にまとめておく。
|Target| SCSIコマンドを受け取る側。要はSCSI機器(HDDとか光学ドライブとか)|
|Initiator| SCSIコマンドを発行する側。要はSCSIホストバスアダプタ(SCSIカード)|
サーバ/クライアントの視点から見ると、iSCSIによるストレージサービスを提供するサーバ側がTargetで、それを利用するクライアント側がInitiatorという事になる。何となくイメージと逆なように感じるがそういうもんだから仕方ない(HBAって何となくサーバっぽいじゃん?)
===== 試した環境 =====
* FreeBSD 11.0-STABLE r308494
* 当方環境の都合でSTABLEになっているだけで、RELEASEでも問題ないと思われる。試してないけど10.0-RELEASE以降で行けるハズ。
===== 基本設定 =====
''/etc/ctl.conf''でiSCSIターゲットの設定を行う。
まずは認証なしで公開してみる。
portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2002-03.info.decomo:target0 {
auth-group no-authentication
portal-group pg0
lun 0 {
path /dev/zvol/zvols/ROOT/target0-0
# size 100G
}
}
iSCSIターゲットで公開する領域は''zfs create -V 100g zvols/ROOT/target0-0''で、ZFSからzvolとして切り出したものを使う。
ctl.confがデフォルトのパーミッションだと、デーモン起動時に''ctld: /etc/ctl.conf is world-readable''と怒られるので落しておく。この先、アカウント情報も書く事になるので、忘れずに落しておく。
# chmod 640 /etc/ctl.conf
お馴染/etc/rc.confでctldを有効にし、デーモンを起動する。
# echo 'ctld_enable="YES"' >> /etc/rc.conf
# service ctld start
Starting ctld.
==== Macから繋いでみる ====
[[https://github.com/iscsi-osx/iSCSIInitiator|iSCSI Initiator for macOS]]を使って、作成したiSCSIターゲットにMacから繋いでみる。
$ sudo iscsictl add target iqn.2002-03.info.decomo:target0,172.16.0.1
The specified target has been added
$ sudo iscsictl login iqn.2002-03.info.decomo:target0.172.16.0.1
Attached iqn.2002-03.info.decomo:target0
FREEBSD CTLDISK 0001
Serial Number MYSERIAL 0
lun 0: type 0x00 (Block device)
こんな感じで無事マウントできた。
{{ :freebsd:mount_iscsi_target_on_osx.png |}}