LinuxでSRPターゲットを作る手順

2年くらい前に発表した資料がほぼままです。

Debian8にはこの手順を書いた時点(20150914)ではtargetcliがMainに落ちてきていないので、gitから持ってくる必要がありました。

testingにもあるにはあるのですが、SRPターゲットを作ったあとにsaveconfigをするとInvalid (SRPターゲットWWN) wwn:というエラーが出てしまい、

設定の保存が出来ませんでした。バグレポートをしたいはしたいのですが、よく分からずそっとしておくことに…。

環境

#OS version
root@debian8:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.1 (jessie)
Release:        8.1
Codename:       jessie

#HCA
root@debian8:~# lspci -v|grep Mel
01:00.0 InfiniBand: Mellanox Technologies MT25204 [InfiniHost III Lx HCA] (rev 20)
        Subsystem: Mellanox Technologies MT25204 [InfiniHost III Lx HCA]

 

設定手順

先にtrslibとtargetcliのビルド済みdebファイルを置いておきます。

微妙に記事を書いてから時間がたってしまったので、いくつかヒストリから追ったものがあり、必要なものが含まれてない可能性があります。

作ったdebファイル→targetcli.tgz(debian8)

targetcli-deb9.tgz (debian9)

#debファイルをインストールするには

apt-get install python-ipaddr python-netifaces python-configobj python-pyparsing python-epydoc python-prettytable python-urwid

が必要

rtslibをビルド&&インストールする

gitからgit cloneしてコードを取得する

gitからソースコードを取得します。GithubからZIPで圧縮したものを展開してmakeしようとしても、makeの中でgitコマンドを使い最新版を確認するので、

gitコマンドが入っていないとエラーが出てしまいます。また、それ以外にも必要パッケージを入れます。

apt-get install git
apt-get install dpkg-dev debhelper texlive-latex-base texlive-latex-extra texlive-latex-recommended lmodern ghostscript texlive-fonts-recommended --no-install-recommends
apt-get install python-ipaddr python-netifaces python-configobj python-pyparsing python-epydoc python-prettytable python-urwid

gitでソースコードを持ってきます。

 git clone https://github.com/Datera/rtslib.git

debian9でrtslibをビルドする場合、いずれマージされると思いますが2017年10月時点のコミット6fd0bbfでは以下のファイルを変更する必要があります。

参考

vi rtslib/config_parser.py
#228行目
 ref_path = " ".join(ref_path.asList())
↓
 ref_path = " ".join(ref_path)

これを変更しないとtargetcliのsaveconfigができなくなります。

rtslibをmakeする

その後、rtslibというディレクトリが出来るので、そのディレクトリに入り、makeを行います。make debでDebianパッケージを作成します。

cd rtslib
make deb

すると、distディレクトリにdebパッケージが作成されるので、インストールします。

cd dist/
ls
python-rtslib_3.0.pre4.9~g6fd0bbf_all.deb  rtslib-3.0.pre4.9~g6fd0bbf.tar.gz
dpkg -i python-rtslib_3.0.pre4.9~g6fd0bbf_all.deb

Python-configshellをMakeする

次に、Python-configshellをMakeします。

git clone https://github.com/Datera/configshell.git
cd configshell/
make deb

出来上がったdebファイルをインストールします。

dpkg -i dist/python-configshell_1.6.1~g020d540_all.deb

targetcliをビルド&&インストールする

gitからgit cloneしてコードを取得する

rtslibのインストールが完了したら、targetcliのビルドをします。

ほぼ同じようにGitから持ってきます。

git clone https://github.com/Datera/targetcli.git
cd targetcli/

 

targetcliをmakeする

rtslibのmakeに成功していればおそらくそのままmake deb出来ると思います。

make deb

すると、distディレクトリにdebパッケージが作成されるので、インストールします。

 cd dist/
 dpkg -i targetcli_3.0.pre4.3~g0fba804_all.deb

 

/var/target/fabric/probe-ib_srpt.shの修正

$が抜けているので修正します。配布したtarのファイルもその部分は修正していないので修正してください。

誰か本家にgitのpullreqして(超小声)

sed  -i -e 's/cat port/cat \$\{port\}/' /var/target/fabric/probe-ib_srpt.sh

 

サービスの再起動

おそらくtargetcliのインストールの段階でサービスが自動起動してしまうので、サービスの再起動を行います。そうしないとib_srpt以下のポータルが出てきません。

service target restart

 

Targetcliからエクスポートイメージを指定する

targetcliを起動する

以下の作業はtargetcliから行うので、targetcliを起動します。

root@debian8:~# targetcli
targetcli 3.0.pre4.1~ga55d018 (rtslib 3.0.pre4.1~g1b33ceb)
Copyright (c) 2011-2014 by Datera, Inc.
All rights reserved.
/> ls /
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- fileio ................................................................................................... [0 Storage Object]
  | o- iblock ................................................................................................... [0 Storage Object]
  | o- pscsi .................................................................................................... [0 Storage Object]
  | o- rd_mcp ................................................................................................... [0 Storage Object]
  o- ib_srpt ........................................................................................................... [0 Targets]
  o- iscsi ............................................................................................................. [0 Targets]
  o- loopback .......................................................................................................... [0 Targets]
  o- qla2xxx ........................................................................................................... [0 Targets]
  o- tcm_fc ............................................................................................................ [0 Targets]
  o- vhost ............................................................................................................. [0 Targets]

 

ディスクイメージ作成

Targetとしてエクスポートするため、適当なディスクイメージを作成します。

今回はファイルIOとして作成しますが、/dev/sdaなどのディスクを直に見せることも可能です。

多くの場合、ディスクイメージを作成した方が扱いやすいですが…。

 

targetcliからディスクを作成します。name=でtargetcliから取り扱う名前を、file_or_dev=でどこにファイルを作成するか、 size=で作成するファイルのサイズを指定します。(K,G,Tの指定が可能)

作成すると、fileio以下にnameで指定したディスクが追加されます

/> /backstores/fileio  create name=vmdk1 file_or_dev=/st/vmware/vmdk_1.img size=4T
Using buffered mode.
Created fileio vmdk1.
/> ls /
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- fileio ................................................................................................... [1 Storage Object]
  | | o- vmdk1 ........................................................................... [4.0T, /st/vmware/vmdk_1.img, not in use]
  | o- iblock ................................................................................................... [0 Storage Object]
  | o- pscsi .................................................................................................... [0 Storage Object]
  | o- rd_mcp ................................................................................................... [0 Storage Object]
  o- ib_srpt ........................................................................................................... [0 Targets]
  o- iscsi ............................................................................................................. [0 Targets]
  o- loopback .......................................................................................................... [0 Targets]
  o- qla2xxx ........................................................................................................... [0 Targets]
  o- tcm_fc ............................................................................................................ [0 Targets]
  o- vhost ............................................................................................................. [0 Targets]

 

srpターゲットを作成する

srpのポータルを作る

すでにib_srptカーネルが読み込まれていればtargetcliに/ib_srptが出来ているはずなので以下のコマンドで作成できます。

(通常はtargetcli読み込み時に読み込まれます。)

/> /ib_srpt create 0xfe800000000000000005ad00000bf4d5
Created target 0xfe800000000000000005ad00000bf4d5.

ポートが複数ある場合は、create 0まで入れたあとにTabを入力すると補完してくれるので、適宜指定してください。

もしib_srpt以下に出てこない場合

上記/var/target/fabric/probe-ib_srpt.shの修正を行ったか確認してください。

それでも出てこない場合、一旦targetcliを終了し、ib_srptモジュールが読み込まれているか確認してください。

targetcliをexitで終了する際に保存するかきかれるので、yで保存してください。

root@debian8:~# lsmod|grep srp
ib_srpt                44810  3
ib_cm                  39055  1 ib_srpt
target_core_mod       298908  31 target_core_iblock,tcm_qla2xxx,target_core_pscsi,iscsi_target_mod,tcm_fc,ib_srpt,target_core_file,vhost_scsi,tcm_loop
ib_mad                 39969  4 ib_cm,ib_sa,ib_srpt,ib_mthca
ib_core                68904  5 ib_cm,ib_sa,ib_mad,ib_srpt,ib_mthca

無い場合は、modprobe ib_srptでモジュールを読み込んだあと、もう一度targetcliを起動してください。

modprobe ib_srpt
targetcli

 

 

作成したファイルをLUNとしてエクスポートする

上記で作成した0xfe...以下でエクスポートするLUNを指定します。

#状態確認
/> ls /
#結果
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- fileio ................................................................................................... [1 Storage Object]
  | | o- vmdk1 ............................................................................... [4.0T, /st/vmware/vmdk_1.img, in use]
  | o- iblock ................................................................................................... [0 Storage Object]
  | o- pscsi .................................................................................................... [0 Storage Object]
  | o- rd_mcp ................................................................................................... [0 Storage Object]
  o- ib_srpt ............................................................................................................ [1 Target]
  | o- 0xfe800000000000000005ad00000bf4d5 ................................................................................ [enabled]
  |   o- acls ............................................................................................................. [0 ACLs]
  |   o- luns .............................................................................................................. [0 LUN]
  o- iscsi .............................................................................................................. [0 Target]
  o- loopback .......................................................................................................... [0 Targets]
  o- vhost ............................................................................................................. [0 Targets]
#階層移動
/> cd /ib_srpt/0xfe800000000000000005ad00000bf4d5
#LUNのマッピング
/ib_srpt/0xfe...5ad00000bf4d5> luns/ create storage_object=/backstores/fileio/vmdk1

LUNが1つしかない場合はstorくらいまで入力してTab連打で勝手に補完してくれます。

ターゲット作成後、saveconfig で状態を保存し、bashへ戻ります。

#設定保存
/ib_srpt/0xfe...5ad00000bf4d5> / saveconfig
Save configuration? [Y/n]: y
Performing backup of startup configuration: /var/target/backup-2015-09-14_00:54:29.lio
Saving new startup configuration

#targetcliの終了
/ib_srpt/0xfe...5ad00000bf4d5> exit
Comparing startup and running configs...
Startup config is up-to-date.
root@debian8:/tmp#

ACLを作成する

ログから接続もとIDを抽出する

targetcliでポータルを有効にすると、他のマシンでSRPイニシエータが動いている場合、ログインを試行しては失敗し…という動作を繰り返すので、

ログからACLを作成します。

grep  "ib_srpt_compl .* stopped" /var/log/syslog |grep -oE "0x[0-9a-z]*"|sort -u
#結果
0x811a4bffff0c01190002c903000dc5e3
0x811a4bffff0c01190002c903000f81d9
0x811a4bffff0c01190002c903001c84f1

上記出てきたIDが現在SRPイニシエータとして接続しようとしてきているIDなので、ACLに加えます。

ESXi5.5にSRPイニシエータを入れた場合は常にログインを試行してきます。

Windows7にSRPイニシエータを入れた場合は、SRPミニポートの無効→有効切り替え時にログイン試行をしてきます。

targetcliに戻り、ACLを作成する

上記で入手したIDをtargetcliからACLに追加します。

targetcli 
targetcli 3.0.pre4.3~g0fba804 (rtslib 3.0.pre4.9~g6fd0bbf)
Copyright (c) 2011-2014 by Datera, Inc.
All rights reserved.
#ACL追加
/ib_srpt/0xfe...5ad00000bf4d5> acls/ create 0x00000000000000000002c903000dc5e2
Created Node ACL for 0x00000000000000000002c903000dc5e2
Created mapped LUN 0.
#追加
/ib_srpt/0xfe...5ad00000bf4d5> acls/ create 0x00000000000000000002c903000f41a6
Created Node ACL for 0x00000000000000000002c903000f41a6
Created mapped LUN 0.
#確認
/ib_srpt/0xfe...5ad00000bf4d5> ls
o- 0xfe800000000000000005ad00000bf4d5 .................................................................................... [enabled]
  o- acls ................................................................................................................. [3 ACLs]
  | o- 0x00000000000000000002c903000dc5e2 ........................................................................... [1 Mapped LUN]
  | | o- mapped_lun0 ................................................................................................... [lun0 (rw)]
  | o- 0x00000000000000000002c903000f41a6 ........................................................................... [1 Mapped LUN]
  | | o- mapped_lun0 ................................................................................................... [lun0 (rw)]
  o- luns .................................................................................................................. [1 LUN]
    o- lun0 ................................................................................. [fileio/vmdk1 (/st/vmware/vmdk_1.img)]

ACLを作成すると、イニシエータが次に接続しに来たタイミングでLUNの接続が有効になります。

ログを確認するため、設定を保存し、targetcliシェルを抜けます。

/ib_srpt/0xfe...5ad00000bf4d5> saveconfig
Save configuration? [Y/n]:y
Performing backup of startup configuration: /var/target/backup-2015-09-14_02:03:13.lio
Saving new startup configuration

/ib_srpt/0xfe...5ad00000bf4d5> exit
Comparing startup and running configs...
Startup config is up-to-date.

接続確認

その後、ログを確認し接続が開始されたか確認します。

grep "ib_srpt_compl .* start" -B1 /var/log/syslog
Sep  7 03:18:23 debian8 kernel: [264060.955093] Received SRP_LOGIN_REQ with i_port_id 0x0:0x2c903000f41a6, t_port_id 0x5ad00000bf4d4:0x5ad00000bf4d4 and it_iu_len 580 on port 1 (guid=0xfe80000000000000:0x5ad00000bf4d5)
Sep  7 03:18:23 debian8 kernel: [264060.956330] Session : kernel thread ib_srpt_compl (PID 7727) started

このように、startedのログがあれば接続が開始されているので、イニシエータ側から接続できているか確認します。

ESX5.5の場合

SRPドライバが読み込まれていれば、以下のように新しい接続先としてLIO-ORG~というデバイスが見えるようになります。

 

ESXiへのドライバ導入については冒頭のパワーポイントを参照ください。

 

以前はTargetが良く刺さっていたためSCSTを使っていましたが、今は大丈夫そうです。。

Related articles

Related articles appear here based on the labels you select. Click to edit the macro and add or change labels.


Related issues