2008-11-17

Solaris+ZFSの iSCSIターゲットに Linux+open-iscsiで接続する

Solarisでは、ZFSプール上にファイルシステムだけでなくボリューム(ブロックデバイス)も作成出来、さらにそれを iSCSIターゲットとして公開することも簡単に出来る。ここでは Solarisの ZFSプール上に iSCSIディスクを準備し、それを Linuxのイニシエータ(open-iscsi) から利用する手順を示す。

Solaris側


tank という名前のZFSプールに100GBの ボリューム vol を作成し、さらに iSCSIディスクとしてエクスポートするには
zfs create -V 100G -o shareiscsi=on tank/vol

とする。

このように作成されたiSCSIディスクには適当なハッシュ値が名称(iqn)として付与される。名称を調べるには
iscsitadm list target

とする。出力結果は
Target: tank/vol
iSCSI Name: iqn.1986-03.com.sun:02:d046e6c8-8599-e917-bcdd-ef46a8c3d751
Connections: 0
のようになる。

不要になったボリュームを削除するには
zfs destroy tank/vol

とすれば良い。但しイニシエータからログインされている iSCSIターゲットは削除できないので先に切断する必要がある。

Linux側


Solarisの iscsitadmコマンドで調べた iSCSI名を使って、Linuxから SCSIディスクとして接続する。Linuxには open-iscsiがインストールされており、iscsid が起動している必要がある。
接続された iSCSIターゲットは Linuxからは /dev/sd* のように通常の SCSIディスクと同様の扱いとなる。

まず discoveryを行い、iSCSIホスト上に存在するターゲットのリストを得る。既にターゲットの iSCSI名が判明している場合でも、イニシエータにターゲットを認識させるためにはこの操作が必要になる。discoveryは下記のように行う。
iscsiadm -m discovery -t sendtargets -p iSCSIホストの名前又はIPアドレス

discoveryが行われると、iscsidがターゲットの存在を認識するので続いて目的のターゲットに login をする。
iscsiadm -m node -T iSCSI名 -p iSCSIホストのIPアドレス --login

これで Solaris上のボリュームが SCSIディスク /dev/sd* として Linux側に出現する。あとは fdiskするなり好きなようにすれば良い。
なお次回の iscsid起動時に自動的にターゲットへログインするには、
iscsiadm -m node -T iSCSI名 -p iSCSIホストのIPアドレス --op=update --name=node.startup --value=automatic
としておくと良い。(-Tを省略すると全てのノードが自動接続の対象となる)

デバイス名は /dev/sd[abcde...]のようなものが付くので、ターゲットを識別するために lsscsi -t コマンドを使ったり /dev/disk/by-path/ から探し出したりする必要があるだろう。くれぐれも間違えて違うディスクを fdiskしてしまわないように注意すること。

iSCSIターゲットディスクを切断するには、
iscsiadm -m node -T iSCSI名 --logout

とする。

0 件のコメント:

コメントを投稿

<< ホーム