How to Configure iSCSI Target and Initiator on CentOS 8

iSCSI (Internet Small Computer Systems Interface) is an Internet Protocol based storage networking for connecting remote storage devices over the network. It provides block-level access to storage devices. iSCSI is used to facilitate block-level data transfer between iSCSI initiator on a client machine and target on a storage server over local area networks (LANs), wide area networks (WANs).

This article describes, How to configure iSCSI Target and Initiator on CentOS8 using 8 GB additional disk added to the server.

ISCSI Target Configuration:

[root@lc-storage1 ~]# fdisk –l

………………..

Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

………………..

[root@lc-storage1 ~]#

Step 1. Installing Packages: Run the following command to install iSCSI target binary and targetcli commands:

[root@lc-storage1 ~]# dnf install targetcli –y

……………………

Installed:

targetcli-2.1.fb49-1.el8.noarch python3-configshell-1:1.1.fb25-1.el8.noarch python3-kmod-0.9-20.el8.x86_64 python3-pyparsing-2.1.10-7.el8.noarch

python3-rtslib-2.1.fb69-3.el8.noarch python3-urwid-1.3.1-4.el8.x86_64 target-restore-2.1.fb69-3.el8.noarch

Complete!

[root@lc-storage1 ~]#

Once the targetcli package installed, start the iSCSI target service and enable it on system start up:

[root@lc-storage1 ~]# systemctl enable target; systemctl restart target

Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /usr/lib/systemd/system/target.service.

[root@lc-storage1 ~]#

Once service is started, enter below command to get iSCSI CLI interactive prompt:

[root@lc-storage1 ~]# targetcli

Warning: Could not load preferences file /root/.targetcli/prefs.bin.

targetcli shell version 2.1.fb49

Copyright 2011-2013 by Datera, Inc and others.

For help on commands, type 'help'.

/>

Using ls command check the existing iSCSI configuration:

/> 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]

/>

Step 2. Configure iSCSI Target: Now create storage backend using disk /dev/sdb as a block-type backing store for storage object:

/> cd backstores/block

/backstores/block> create name=iscsi-disk1 dev=/dev/sdb

Created block storage object iscsi-disk1 using /dev/sdb.

/backstores/block>

Step 3. Create iSCSI Target: Run the following commands to create an iSCSI target, here we are creating a default IQN:

/backstores/block> cd /iscsi

/iscsi> create iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1

Created target iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1.

Created TPG 1.

Global pref auto_add_default_portal=true

Created default portal listening on all IPs (0.0.0.0), port 3260.

/iscsi>

Step 4: Create iSCSI LUNs: add the LUNS or logical units to make the storage effective. The LUN should use the previously mentioned backing storage object named scsi-disk1.

/iscsi> cd iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1/tpg1/luns

/iscsi/iqn.20...de1/tpg1/luns> create /backstores/block/iscsi-disk1

Created LUN 0.

/iscsi/iqn.20...de1/tpg1/luns>

Step 5: Create ACL: ACL restrict access to LUNs from unauthorized remote systems and exit from the iSCSI interactive session:

/iscsi/iqn.20...sk1/tpg1/luns> cd ../acls

/iscsi/iqn.20...de1/tpg1/acls> create iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1

Created Node ACL for iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1

Created mapped LUN 0.

/iscsi/iqn.20...de1/tpg1/acls>

Run the following command to get the list of created configuration:

/iscsi/iqn.20...sk1/tpg1/acls> cd /

/> ls

o- / ................................................................................................................. [...]

o- backstores ................................................................................................ [...]

| o- block ............................................................................ [Storage Objects: 1]

| | o- iscsi-disk1 ................................... [/dev/sdb (8.0GiB) 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.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1 ............ [TPGs: 1]

| o- tpg1 ......................................................................... [no-gen-acls, no-auth]

| o- acls ............................................................................................ [ACLs: 1]

| | o- iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1 ……..[Mapped LUNs: 1]

| | o- mapped_lun0 .............................................[lun0 block/iscsi-disk1 (rw)]

| o- luns .......................................................................................... [LUNs: 1]

| | o- lun0 ............................. [block/iscsi-disk1 (/dev/sdb) (default_tg_pt_gp)]

| o- portals .................................................................................... [Portals: 1]

| o- 0.0.0.0:3260 .................................................................................... [OK]

o- loopback ....................................................................................... [Targets: 0]

/>

Run the exit command to exit with saving configuration from the targetcli interactive session:

/> exit

Global pref auto_save_on_exit=true

Configuration saved to /etc/target/saveconfig.json

[root@lc-storage1 ~]#

Step 6. Firewall Configuration: Run the following commands configure firewall to allow port 3260 accessible from remote systems:

[root@lc-storage1 ~]# firewall-cmd --permanent --add-port=3260/tcp; firewall-cmd --reload

success

success

[root@lc-storage1 ~]#

If iptables are running instead of firewalld, run the following commands:

[root@lc-storage1 ~]# iptables -I INPUT -p tcp -m tcp -dport 3260 - ACCEPT; systemctl save iptables

iSCSI Initiator Configuration:

Step 1. Packages Installation: Install the iscsi-initiator-utils package to configure iSCSI initiator on Linux systems:

[root@lc-node1 ~]# dnf install iscsi-initiator-utils –y

……………………

Installed:

iscsi-initiator-utils-6.2.0.876-7.gitf3c8e90.el8.x86_64 iscsi-initiator-utils-iscsiuio-6.2.0.876-7.gitf3c8e90.el8.x86_64 isns-utils-libs-0.97-6.el8.x86_64

Complete!

[root@lc-node1 ~]#

Step 2. iSCSI Initiatorname Configuration: Edit the /etc/iscsi/initiatorname.iscsi file and replace the Initiatorname with the earlier created in ACL on target server and comment all other initiator names if any present in this and not in use anymore:

[root@lc-node1 ~]# vi /etc/iscsi/initiatorname.iscsi

#InitiatorName=iqn.1994-05.com.redhat:5cc8abcc5ada

InitiatorName=iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1

Step 3. Restart iSCSI services: Run the following commands to enable on system start up and restart the service to reflect the change:

[root@lc-node1 ~]# systemctl enable iscsid; systemctl restart iscsid

Created symlink /etc/systemd/system/multi-user.target.wants/iscsid.service → /usr/lib/systemd/system/iscsid.service.

[root@lc-node1 ~]#

Step 4. iSCSI Discovery: Discover the target using the below command:

[root@lc-node1 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.43.45 --discover

192.168.43.45:3260,1 iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1

[root@lc-node1 ~]#

Step 5. Create iSCSI Initiator Session: Run the following command for making connection:

[root@lc-node1 ~]# iscsiadm --mode node --targetname iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1 --login

Logging in to [iface: default, target: iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1, portal: 192.168.43.45,3260] (multiple)

Login to [iface: default, target: iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1, portal: 192.168.43.45,3260] successful.

[root@lc-node1 ~]#

Step 6. Verification: Once the session created successfully verify the LUNs using below commands:

[root@lc-node1 ~]# lsscsi

[1:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0

[2:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda

[3:0:0:0] disk LIO-ORG iscsi-disk1 4.0 /dev/sdb

[root@lc-node1 ~]#

Here the iSCSI target mapped to the disk /dev/sdb. Use the following command to monitor the iSCSI session:

[root@lc-node1 ~]# iscsiadm --mode node -P 1

Target: iqn.2019-11.local.linuxcnf.lc-storage1:iscsi-disk1:lc-node1

Portal: 192.168.43.45:3260,1

Iface Name: default

[root@lc-node1 ~]#

Done!!! Now session is created and iSCSI target mapped to the disk /dev/sdb in iSCSI initiator system.