2011年5月24日火曜日

FreeBSD 8.2とZFSでiSCSI targetを作る

SolarisのZFSではiSCSI targetを楽に作成できるらしいが、FreeBSDのZFSでは未だにiSCSI targetがサポートされていない…らしい。そこで、netbsd-iscsi-targetを利用し、FreeBSDのZFSでも似たようなことをできるようにしてみる。

iSCSI target用ツールをビルド

portsに入っているのは少々古いようなので、NetBSDからソースで持ってくる。
# cd /usr/miku/src
# fetch http://ftp.jaist.ac.jp/pub/NetBSD/packages/distfiles/netbsd-iscsi-20110222.tar.gz
# tar xzf netbsd-iscsi-20110222.tar.gz
# ./configure --prefix=/usr/miku
# make
おそらくfuseが入っておらずinitiatorのビルドに失敗するので、libiscsiとtargetのみを手動でインストールする。
# cd src/lib
# make install
# cd ../target
# make install
もしソース持ってきて野良ビルドするのが嫌であれば、pkgsrcを導入しnet/netbsd-iscsi-targetを入れるという手もある。

ZVOLを作成

iSCSI targetで利用するボリュームを作成する。 ZVOLはZFS上に置かれ、ZFS同様にリサイズや圧縮が可能で、かつ普通のHDDと同じようにパーティションを作成したりファイルシステムを作成できる。
プールksysに10GBのボリュームiscsivol0を作成するコマンドは以下のとおり。
# zfs create -V 10G ksys/iscsivol0
ここで作成したZVOLは、/dev/zvol/ksys/iscsivol0に置かれる。

iSCSI targetを設定

iSCSIの設定ファイルは/etc/iscsiに置かれるので、最初にmkdir /etc/iscsiしておく。その中にファイルtargetsを作成し、以下のように設定を書く。
extent0 /dev/zvol/ksys/iscsivol0 0 10G
target0 rw extent0 10.39.39.0/24
使用するボリュームの範囲をextent0で指定し、公開されるtarget0のオプションでそれを指定すればよい模様。 複数公開する場合は、extent1・target1、extent2・target2...と追加していく。

iSCSI targetの起動

iSCSI targetの起動は、rootでiscsi-targetを実行するだけ。
# iscsi-target
Reading configuration from `/etc/iscsi/targets'
target0:rw:10.39.39.0/24
        extent0:/dev/zvol/ksys/iscsivol0:0:10737418240
DISK: 1 logical unit (20971520 blocks, 512 bytes/block), type iscsi fs
DISK: LUN 0: 10240 MB disk storage for "target0"
TARGET: iSCSI Qualified Name (IQN) is iqn.1994-04.org.netbsd.iscsi-target

接続テスト

Debian側にopen-iscsiによるiSCSI initiatorを用意し、iSCSIを実際に利用してみる。Debianにはaptitude install open-iscsiでインストールできる。

まずiSCSI targetのリストを受け取る。
# iscsiadm -m discovery -t sendtargets -p 10.39.39.40
10.39.39.40:3260,1 iqn.1994-04.org.netbsd.iscsi-target:target0
そしてiSCSIにログインする。
# iscsiadm -m node -T iqn.1994-04.org.netbsd.iscsi-target:target0 -l
Logging in to [iface: default, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 10.39.39.40,3260]
Login to [iface: default, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 10.39.39.40,3260]: successful
また、ログアウトは以下のように行なう。
# iscsiadm -m node -T iqn.1994-04.org.netbsd.iscsi-target:target0 -u
Logging out of session [sid: 1, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 10.39.39.40,3260]
Logout of [sid: 1, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 10.39.39.40,3260]: successful
あとはいつも通りfdiskするなりmkfsするなりして使うだけ。

余談

本当は、以下のようにzfsのオプションでiscsiの共有を指定できればよいのだが、このとおり怒られてしまう。
# zfs set shareiscsi=on ksys/iscsivol0
property 'shareiscsi' not supported on FreeBSD: permission denied
そこで、ZVOL作成時にオプションとして付けたところ、
# zfs create -V 10G -o shareiscsi=on ksys/iscsivol2
# % zfs get shareiscsi ksys/iscsivol2
NAME            PROPERTY    VALUE       SOURCE
ksys/iscsivol2  shareiscsi  on          local
ONにできてしまった。これは一体…

0 件のコメント:

コメントを投稿