hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

iSCSIの環境構築手順



1 iSCSIとは?

IP ネットワークで SCSI コマンドを転送することで、ターゲットへのアクセスをできるようにするための規格です。

2 検証環境

2.1 ネットワーク構成

イニシエータとターゲットの2台構成です。図中のens33はNICの名前です。

                               192.168.2.0/24
initiator(ens33) ------------------------------------------(ens33) target
        .105                                               .100

2.2 版数

CentOS版数は、イニシエータ、ターゲットともに下記版数です。

[root@target ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@target ~]# uname -r
3.10.0-1160.el7.x86_64

3 パッケージのインストール

3.1 ターゲット側

targetcliパッケージをインストールします。

[root@target ~]# yum -y install targetcli

パッケージの版数を確認します。

[root@target ~]# rpm -qa|grep targetcli
targetcli-2.1.53-1.el7_9.noarch

3.2 イニシエータ側

iscsi-initiator-utilsパッケージをインストールします。

[root@initiator ~]# yum -y install iscsi-initiator-utils

パッケージの版数を確認します。

[root@initiator ~]# rpm -qa|grep iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.874-22.el7_9.x86_64
iscsi-initiator-utils-iscsiuio-6.2.0.874-22.el7_9.x86_64

4 事前準備

4.1 ポート番号の開放

ターゲット側で、iSCSIが使う3260番ポートを開放します。
なお、firewall-cmdの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@target ~]# firewall-cmd --add-port=3260/tcp
success

開放したポート番号を確認します。TCPの3260番ポートが開放されたことがわかります。

[root@target ~]# firewall-cmd --list-ports
3260/tcp

4.2 サービスの起動

ターゲット側のサービスを起動します。

[root@target ~]# systemctl start target.service

イニシエータ側のサービスを起動します。

[root@initiator ~]# systemctl start iscsid.service

4.3 ループバックデバイスの作成

ターゲットが使用するストレージを作成します。ここでは、ループバックデバイスを利用したストレージを作成してみます。まず、ファイル(500M)を作成します。テスト用なのでサイズは適当です。なお、ddコマンドの使い方は、ddコマンドの使い方 - hana_shinのLinux技術ブログを参照ください。

[root@target ~]# dd if=/dev/zero of=disk1.img bs=1024 count=512000

作成したファイルを確認します。500Mのファイルが作成できたことがわかります。

[root@target ~]# ls -lh disk1.img
-rw-r--r--. 1 root root 500M  3月  1 19:21 disk1.img

作成したファイルをループバックデバイスとして登録します。なお、ループバックデバイスの登録方法は、losetupコマンドの使い方 - hana_shinのLinux技術ブログを参照ください。

[root@target ~]# losetup -f /root/disk1.img

登録したループバックデバイスを確認します。

[root@target ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img

5 ターゲット側の設定

5.1 初期状態の確認

初期状態における、iSCSIの構成を確認してみます。4種類のバックストアがあることがわかります。その中で、ブロックデバイス(block)を使ってみます。

[root@target ~]# targetcli ls /
o- / .............................................................................................................. [...]
  o- backstores ................................................................................................... [...]
  | o- block ....................................................................................... [Storage Objects: 0]
  | o- fileio ...................................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................................. [Targets: 0]
  o- loopback .............................................................................................. [Targets: 0]
[root@target ~]#

5.2 バックストアの登録

作成した/dev/loop0をlun0という名前でバックストアに登録してみます。

[root@target ~]# targetcli /backstores/block create name=lun0 dev=/dev/loop0
Created block storage object lun0 using /dev/loop0.

再度、構成を確認してみます。block配下にlun0が作成されたことがわかります。

[root@target ~]# targetcli ls /
o- / .............................................................................................................. [...]
  o- backstores ................................................................................................... [...]
  | o- block ....................................................................................... [Storage Objects: 1]
  | | o- lun0 ............................................................ [/dev/loop0 (500.0MiB) write-thru deactivated]
  | |   o- alua ........................................................................................ [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ............................................................ [ALUA state: Active/optimized]
  | o- fileio ...................................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................................. [Targets: 0]
  o- loopback .............................................................................................. [Targets: 0]

5.3 iqn(iSCSI Qualified Name)の作成

iqnは、iSCSIのターゲット、イニシエータを全世界で一意に識別するために使います。

iqnの書式は次のとおりです。
iqn.yyyy-mm.domain name:identifier
・yyyy-mm:ドメイン取得日(テスト用なので適当な日付を設定)
・domain name:ドメイン名(テスト用なので適当なドメイン名を設定)
・identifier:任意の名前。ここでは、target0という名前を設定。

[root@target ~]# targetcli /iscsi create iqn.2020-03.com.example:target0
Created target iqn.2020-03.com.example:target0.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

構成を確認してみます。iscsi配下に、下記のiqnが作成されたことがわかります。
・iqn.2020-03.com.example:target0

[root@target ~]# targetcli ls /
o- / .............................................................................................................. [...]
  o- backstores ................................................................................................... [...]
  | o- block ....................................................................................... [Storage Objects: 1]
  | | o- lun0 ............................................................ [/dev/loop0 (500.0MiB) write-thru deactivated]
  | |   o- alua ........................................................................................ [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ............................................................ [ALUA state: Active/optimized]
  | o- fileio ...................................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................................. [Targets: 1]
  | o- iqn.2020-03.com.example:target0 ........................................................................ [TPGs: 1]
  |   o- tpg1 .................................................................................... [no-gen-acls, no-auth]
  |     o- acls ............................................................................................... [ACLs: 0]
  |     o- luns ............................................................................................... [LUNs: 0]
  |     o- portals ......................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 .......................................................................................... [OK]
  o- loopback .............................................................................................. [Targets: 0]
[root@target ~]#

5.4 iqnとバックストアの紐づけ

作成したiqnとバックストアを紐づけします。iqn.2020-03.com.example:target0とlun0を紐づけます。

[root@target ~]# targetcli /iscsi/iqn.2020-03.com.example:target0/tpg1/luns create /backstores/block/lun0
Created LUN 0.

iSCSIの構成を確認してみます。

[root@target ~]# targetcli ls /
o- / .............................................................................................................. [...]
  o- backstores ................................................................................................... [...]
  | o- block ....................................................................................... [Storage Objects: 1]
  | | o- lun0 .............................................................. [/dev/loop0 (500.0MiB) write-thru activated]
  | |   o- alua ........................................................................................ [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ............................................................ [ALUA state: Active/optimized]
  | o- fileio ...................................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................................. [Targets: 1]
  | o- iqn.2020-03.com.example:target0 ........................................................................ [TPGs: 1]
  |   o- tpg1 .................................................................................... [no-gen-acls, no-auth]
  |     o- acls ............................................................................................... [ACLs: 0]
  |     o- luns ............................................................................................... [LUNs: 1]
  |     | o- lun0 .......................................................... [block/lun0 (/dev/loop0) (default_tg_pt_gp)]
  |     o- portals ......................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 .......................................................................................... [OK]
  o- loopback .............................................................................................. [Targets: 0]

5.5 ACLの設定

ACLは、どのイニシエータからターゲットに接続できるのかを設定します。ここでは、イニシエータからtarget0に接続できるように設定します。

イニシエータのiqnを確認します。iqnはiqn.1994-05.com.redhat:94f695c646caであることがわかります。

[root@initiator ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:86d327514f9a

イニシエータからtarget0に接続できるように、ACLを設定します。

[root@target ~]# targetcli /iscsi/iqn.2020-03.com.example:target0/tpg1/acls create iqn.1994-05.com.redhat:86d327514f9a
Created Node ACL for iqn.1994-05.com.redhat:86d327514f9a
Created mapped LUN 0.

iSCSIの構成を確認してみます。target0のacls配下にイニシエータのiqnが登録されたことがわかります。

[root@target ~]# targetcli ls /
o- / .............................................................................................................. [...]
  o- backstores ................................................................................................... [...]
  | o- block ....................................................................................... [Storage Objects: 1]
  | | o- lun0 .............................................................. [/dev/loop0 (500.0MiB) write-thru activated]
  | |   o- alua ........................................................................................ [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ............................................................ [ALUA state: Active/optimized]
  | o- fileio ...................................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................................. [Targets: 1]
  | o- iqn.2020-03.com.example:target0 ........................................................................ [TPGs: 1]
  |   o- tpg1 .................................................................................... [no-gen-acls, no-auth]
  |     o- acls ............................................................................................... [ACLs: 1]
  |     | o- iqn.1994-05.com.redhat:86d327514f9a ....................................................... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ....................................................................... [lun0 block/lun0 (rw)]
  |     o- luns ............................................................................................... [LUNs: 1]
  |     | o- lun0 .......................................................... [block/lun0 (/dev/loop0) (default_tg_pt_gp)]
  |     o- portals ......................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 .......................................................................................... [OK]
  o- loopback .............................................................................................. [Targets: 0]

5.6 設定内容の保存

[root@target ~]# targetcli saveconfig
Configuration saved to /etc/target/saveconfig.json

6 イニシエーター側の設定

イニシエータからターゲットのログイン、デバイスのマウントまでを確認してみます。

6.1 ターゲットの探索

ターゲットを探します。以下のターゲットを検出したことがわかります。

[root@initiator ~]# iscsiadm -m discovery -t sendtargets -p 192.168.2.100
192.168.2.100:3260,1 iqn.2020-03.com.example:target0

6.2 ターゲットへのログイン

検出したターゲットにログインします。

[root@initiator ~]# iscsiadm -m node --login -p 192.168.2.100
Logging in to [iface: default, target: iqn.2020-03.com.example:target0, portal: 192.168.2.100,3260] (multiple)
Login to [iface: default, target: iqn.2020-03.com.example:target0, portal: 192.168.2.100,3260] successful.

ログインすると、ターゲットのデバイスが見えるようになります。

[root@initiator ~]# lsblk -S
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
sdb  3:0:0:0    disk LIO-ORG  lun0             4.0  iscsi

6.3 ファイルシステムの作成

検出したデバイスにxfsファイルシステムを作成します。

[root@initiator ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウントポイントを作成します。

[root@initiator ~]# mkdir /target0

作成したマウントポイントにデバイスをマウントします。

[root@initiator ~]# mount /dev/sdb /target0/

ファイルシステム一覧を確認します。/dev/sdbにxfsファイルシステムが作成されていることがわかります。

[root@initiator ~]# df -hT /target0/
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
/dev/sdb       xfs      497M   26M  472M    6% /target0

7 iSCSI環境の解除

作成したiSCSI環境の解除方法を以下に説明します。

7.1 イニシエータ側

バイスをアンマウントします。

[root@initiator ~]# umount /target0/

ターゲットからログアウトします。

[root@initiator ~]# iscsiadm -m node -T iqn.2020-03.com.example:target0 -p 192.168.2.100 --logout
Logging out of session [sid: 1, target: iqn.2020-03.com.example:target0, portal: 192.168.2.100,3260]
Logout of [sid: 1, target: iqn.2020-03.com.example:target0, portal: 192.168.2.100,3260] successful.

セッションを確認します。ターゲットからログアウトしたので、セッションが表示されていないことがわかります。

[root@initiator ~]# iscsiadm -m session
iscsiadm: No active sessions.

次にノードを削除します。

[root@initiator ~]# iscsiadm -m node
192.168.2.100:3260,1 iqn.2020-03.com.example:target0
[root@initiator ~]# iscsiadm -m node -o delete -T iqn.2020-03.com.example:target0 -p 192.168.2.100
[root@initiator ~]# iscsiadm -m node
iscsiadm: No records found

7.2 ターゲット側

iSCSIの設定情報を削除します。

[root@target ~]# targetcli clearconfig confirm=True
All configuration cleared

ターゲットの構成を確認します。

[root@target ~]# targetcli ls /
o- / .............................................................................................................. [...]
  o- backstores ................................................................................................... [...]
  | o- block ....................................................................................... [Storage Objects: 0]
  | o- fileio ...................................................................................... [Storage Objects: 0]
  | o- pscsi ....................................................................................... [Storage Objects: 0]
  | o- ramdisk ..................................................................................... [Storage Objects: 0]
  o- iscsi ................................................................................................. [Targets: 0]
  o- loopback .............................................................................................. [Targets: 0]

設定情報を保存します。

[root@target ~]# targetcli saveconfig
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ