This is an old revision of the document!
Configure A System As Either An Iscsi Target Or Initiator That Persistently Mounts An Iscsi Target
General Information
Creating iSCSI targets (storage on a server) and initiators (clients).
Lab Setup
The following virtual machines will be used:
- server1.example.com (192.168.1.150) → Client/initiator
- server2.example.com (192.168.1.151) → Server/target
- Add Disk: Add a secondary disk to the Server/target that will be used as backend storage for the iSCSI target.
iSCSI Targets (Storage Server)
The iSCSI targets are on the storage server and are the volumes that can be mounted by clients.
Create Back-end Storage
Create a back-end logical volume or partition that will be an iSCSI target.
Example:
pvcreate /dev/sdb1 vgcreate vgsan /dev/sdb1 lvcreate --extents 100%PVS --name lvstor01 vgsan /dev/sdb1
Install and Enable
Install packages
yum install targetcli
Enable the service
systemctl enable target
Configure the iSCSI Target
Start the targetcli interactive utility
targetcli
The targetcli utility commands available depend upon your path. Navigation is done via cd, pwd, and ls just like you would expect in a shell.
/> 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] /> pwd /
- Note: Use tab for auto completion in paths and commands
Backing Storage: Create a block storage object within the targetcli interactive prompt
/> backstores/block create name=block1 dev=/dev/vgsan/lvstor01
- backstores/block → In the backstores block path
- create block1 → Create a storage object named “block1”
- /dev/vgsan/lvstor01 → Use the logical volume /dev/vgsan/lvstor01
iSCSI Target: Create an iSCSI Target IQN (Iscsi Qualified Name)
/> iscsi/ create iqn.2016-08.com.example.server2:target
- iscsi/ → In the iscsi path
- create iqn.2016-08.com.example.server2:target → Create the IQN named “iqn.2016-08.com.example.server2:target”
- An IQN is how you refer to the target disk
- All IQNs must start with “iqn”
- Standard convention is to use the date (YYYY-MM) and reverse domain name
- target is the target name
- This creates an associated TPG (Target Portal Group)
Change into the newly created IQN's TPG (Target Portal Group) and view the contents
/> cd iscsi/iqn.2016-08.com.example.server2:target/tpg1/ /iscsi/iqn.20...2:target/tpg1> ls
- Objects listed:
- acls (access control lists can restrict access)
- luns (logical unit number or the exported resource)
- portals (IP addresses:ports to reach the exported resource)
LUN to Storage Map: Create a LUN within the target portal group
/iscsi/iqn.20...2:target/tpg1> luns/ create /backstores/block/block1
- luns/ → In the luns path
- create /backstores/block/block1 → Create a lun using “block1” as the backing storage
Client ACL: Create an ACL for a client to be able to connect to the IQN in the future
/iscsi/iqn.20...2:target/tpg1> acls/ create iqn.2016-08.com.example:server1
- acls/ → In the acls path
- create iqn.2016-08.com.example:server1 → Create an ACL allowing this IQN
- This is a combination of a new IQN (following a similar naming convention) and an identifier of your choosing. Together, this makes up the client iscsi initiator name that will be used.
- iqn.2016-08.com.example → IQN
- :server1 → an identifier of your choosing
- Alternatively: Instead of making of an IQN for the client, see here to retrieve it.
OPTIONAL: Create a CHAP Username/Password for client connections
/iscsi/iqn.20...2:target/tpg1> cd acls/iqn.2016-08.com.example:server1/ /iscsi/iqn.20...ample:server1> set auth userid=myuser password=mypassword
Save and exit the targetcli utility
/iscsi/iqn.20...ample:server1> cd / /> saveconfig /> exit
Firewall and Start Service
Firewall
firewall-cmd --permanent --add-port=3260/tcp firewall-cmd --reload OR firewall-cmd --permanent --add-service=iscsi-target firewall-cmd --reload
- iscsi-target service available as of RHEL 7.2
Start the target
systemctl start target
iSCSI Initiator (Client)
Setting up an iSCSI initiator (client).
Install Package
Install initiator package
yum install iscsi-initiator-utils
Configure Initiator and iscsid
Edit initiator name and change to the name setup on the server
vim /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2016-08.com.example:server1
- Identifying client information needed to mount the disk
- Alternatively, you could configure the server to the ISCSI initiator name given on the client by default.
Edit authentication information if set (optional)
vim /etc/iscsi/iscsid.conf node.session.auth.authmethod = CHAP node.session.auth.username = myuser node.session.auth.password = mypassword
Enable and start the iscsi service
systemctl enable iscsi
systemctl start iscsi
Login to iSCSI Portal
Note: See 'EXAMPLES' in “man iscsiadm” if you don't remember the discovery and login commands.
Use the iscsiadm command to discover IQN Information
iscsiadm --mode discovery --type sendtargets --portal 192.168.1.151
- –mode discovery → Find targets
- –type sendtargets → Tell portal to send all available targets
- –portal <ip> → server IP
Login to the Target IQN
iscsiadm --mode node --target iqn.2016-08.com.example.server2:target --portal 192.168.1.151 --login
- Default port is 3260 if not specified
Configure iSCSI Disk
View iSCSI Disk
lsblk --scsi
Create a partition
fdisk /dev/sdb
Create file system
mkfs.xfs /dev/sdb1
Get the disk UUID
blkid | grep sdb1
Mount via fstab
vim /etc/fstab #Mount iscsi device UUID=<uuid-here> /data/iscsi xfs _netdev 0 0
- _netdev → Wait for the network to be available before mounting
View Connected ISCSI Target Information
iscsiadm -m session -P 3
- -m session → mode session
- -P 3 → Print level 3 (0-3 range of details)