Solaris11やOpenIndianaの151aでは、iSCSIターゲットが比較的簡単に作成できるようになっていて、そこに素敵なファイルシステムZFSが使える事でいつでもスナップショットがとれちゃったりする素敵なiSCSIターゲットが作れちゃいます。
せっかくなので、ZFS使います^^
主な手順としては、以下のとおり
となる。
細かい手順を以下に示す。
また、マシンのネットワーク設定などは事前に済ませておくこと。
SolarisやOpenIndianaではpkgコマンドでいろんなパッケージの導入が可能。
インストールする
$ su - ←rootユーザーになる # pkg install storage-server
確認する
# svcs -a | grep iscsi disabled XX:XX:XX svc:/network/iscsi/target:default online XX:XX:XX svc:/network/iscsi/initiator:default
targetの行があればOK。
ただし、この状態だとdisable(無効)になっているので、動いてはいない。
必要なサービスの有効化
# svcadm enable iscsi/target # svcadm enable stmf
確認する
# svcs -a | grep stmf online XX:XX:XX svc:/system/stmf:default # svcs -a | grep iscsi online XX:XX:XX svc:/network/iscsi/initiator:default online XX:XX:XX svc:/network/iscsi/target:default
すべてonlineになっていればOK。
OpenIndianaでZFSストレージを作るにもあるのだけれど、一応。
ディスクのデバイスはc2t0d0,c3t0d0,c4t0d0とする。
zpoolコマンドを使う
# zpool create tank c2t0d0
# zpool create tank mirror c2t0d0 c3t0d0
# zpool create tank raidz c2t0d0 c3t0d0 c4t0d0
tankはプールの名称。
基本的にはなんでも好きな名前で良さそうだけど、rpoolという名前はSolarisやOpenIndianaではルートファイルシステムのプールとして使われているので、別な名前で。
ここいらでzfs listとか唱えると、tankができていて、その容量がどれくらいか、なんかは容易に確認できる。
zfsコマンドを使う
# zfs create -V 100g tank/disk0
zfs listでtank/disk0が確認できるようになる。
-Vオプションでファイルシステムの容量が指定できる。この指定は無くてもZFSを作る事はできるが、iSCSIターゲットの公開先として使用しようとするとエラーになる。
イニシエータ側に最大容量とか通知できないからかのぅ?調べてないからわからんけども。
ちなみに、ファイルシステムのパスは/dev/zvol/rdsk/tank/disk0となる。
ターゲットの設定は、次の項目が必要
他にターゲットグループとかホストグループとかいろいろあるみたいだけれど、シラネ。
簡単、実に簡単。
# itadm create-target
Target iqn.1986-03.com.sun:02:3c4bda9e-6a20-e74f-b3a1-e1934dc99b42 successfully created
ちなみに削除する時は
# itadm delete-target iqn.1986-03.com.sun:02:3c4bda9e-6a20-e74f-b3a1-e1934dc99b42
になる。
でも普通にやるとエラーになる。
The target is online or busy. Use the -f (force) option, or 'stmfadm offline-target iqn.1986-03.com.sun:02:3c4bda9e-6a20-e74f-b3a1-e1934dc99b42' itadm delete-target failed with error 16
作ったターゲットはそのまま即座にオンラインになっちゃうから、stmfadmでオフラインにしろって事らしい。
面倒な時はitadm delete-target -fで強制削除とかもあり?ww
論理ユニット。通称LU。先ほど作ったZFSのボリュームを指定して作ってもらう。
# stmfadm create-lu /dev/zvol/rdsk/tank/disk0
Logical unit created: 600144F024DB4E0000004FFCC2C8001A
これでOK。ここで600144F024DB4E0000004FFCC2C8001Aと出力されているが、この32桁がLUの名前。
ビューの設定を行うと、ターゲットとLUの結びつきを指定できる。
# stmfadm add-view 600144F024DB4E0000004FFCC2C8001A
これでOK。
ggrks
ってことで^^;
Windows 7とかWindows Server 2008とかなら標準で管理ツールにiSCSIイニシエータがあるので、それでつないでちょ♪
ターゲットグループを作ってビューと紐付けると、ターゲットを複数作った時に任意のターゲットに任意のLUを結び付けられるよ。
stmfadm add-view LU名を実行しないでターゲットグループを作ってゴニョゴニョするのです。
# stmfadm create-tg testgrp
これでtestgrpというグループができる。
次にターゲットとターゲットグループを関連付ける
# svcadm disable stmf # stmfadm add-tg-member -g testgrp iqn.1986-03.com.sun:02:3c4bda9e-6a20-e74f-b3a1-e1934dc99b42 # svcadm enable stmf
一時的にstmfのサービスを止めているが、動かしたままでstmfadmを実行すると下のようなエラーになる。
stmfadm: STMF service must be offline
バグらしいが仕様という噂も?ww
で、最後にターゲットグループを指定した上で、LUをビューに追加する
# stmfadm add-view -t testgrp 600144F024DB4E0000004FFCC2C8001A
これでターゲットとLUがグルーピングされる。
後はターゲットの作成やLU、ターゲットグループを複数作ると、接続するターゲット毎に別のディスクが参照できるようになる。