====== COMSTARでiSCSIターゲットを作成する ====== Solaris11やOpenIndianaの151aでは、iSCSIターゲットが比較的簡単に作成できるようになっていて、そこに素敵なファイルシステムZFSが使える事でいつでもスナップショットがとれちゃったりする素敵なiSCSIターゲットが作れちゃいます。\\ せっかくなので、ZFS使います^^ ===== まずは... ===== 主な手順としては、以下のとおり - 必要なパッケージを導入するなどの基本設定 - iSCSIで公開するファイルシステムの作成\\ [[ja:Solaris:OpenIndianaでZFSストレージを作る]]参照 - iSCSIターゲットの設定 - iSCSIイニシエータから接続 となる。\\ 細かい手順を以下に示す。\\ \\ また、マシンのネットワーク設定などは事前に済ませておくこと。 ===== 必要なパッケージとサービスの構成 ===== SolarisやOpenIndianaではpkgコマンドでいろんなパッケージの導入が可能。 ==== iSCSIターゲットに必要なstorage-serverをインストールする ==== インストールする $ 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。 ===== iSCSIで公開するファイルシステムの作成 ===== [[ja:Solaris:OpenIndianaでZFSストレージを作る]]にもあるのだけれど、一応。\\ ディスクのデバイスは**c2t0d0**,**c3t0d0**,**c4t0d0**とする。 ==== ZFSのプールを作成する ==== zpoolコマンドを使う * 単独のディスクの場合 # zpool create tank c2t0d0 * 2つのディスクでミラーの場合 # zpool create tank mirror c2t0d0 c3t0d0 * 3つのディスクでRAIDZの場合 # zpool create tank raidz c2t0d0 c3t0d0 c4t0d0 **tank**はプールの名称。\\ 基本的にはなんでも好きな名前で良さそうだけど、rpoolという名前はSolarisやOpenIndianaではルートファイルシステムのプールとして使われているので、別な名前で。\\ ここいらで**zfs list**とか唱えると、tankができていて、その容量がどれくらいか、なんかは容易に確認できる。 ==== プール内にファイルシステムを作成する ==== zfsコマンドを使う * 100GBのファイルシステムdisk0を作成する場合 # zfs create -V 100g tank/disk0 **zfs list**で**tank/disk0**が確認できるようになる。\\ **-V**オプションでファイルシステムの容量が指定できる。この指定は無くてもZFSを作る事はできるが、iSCSIターゲットの公開先として使用しようとするとエラーになる。\\ イニシエータ側に最大容量とか通知できないからかのぅ?調べてないからわからんけども。\\ ちなみに、ファイルシステムのパスは**/dev/zvol/rdsk/tank/disk0**となる。 ===== iSCSIターゲットの設定 ===== ターゲットの設定は、次の項目が必要 * ターゲットの作成 * 論理ユニットの作成 * ビューの設定 他にターゲットグループとかホストグループとかいろいろあるみたいだけれど、シラネ。 ==== ターゲットの作成 ==== 簡単、実に簡単。 # 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、ターゲットグループを複数作ると、接続するターゲット毎に別のディスクが参照できるようになる。