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へのドライバ導入については冒頭のパワーポイントを参照ください。
Related articles
コメントの追加