looking into the use iSCSI as a means of providing remote storage.
With that in mind, this is part 1 of my iSCSI notes, detailing the
configuration of a test Solaris iSCSI target node which would provide
storage to client hosts. Configuration of an iSCSI initiator node (client
host) will be detailed part 2. Our host details for the target notes are:
HOSTS: sunspot (target node), sunbeam (initiator node) PROMPT: host [0] OS: Solaris 10 10/09 (u8)To begin, you will need to have the following packages installed on the
target node:
SUNWiscsitgtu SUNWiscsitgtr SUNWiscsirWe will also need the iSCSI target daemon ('iscsitgtd') running so enable
it with 'svcadm' and verify with 'svcs':
sunspot [0] /usr/sbin/svcadm enable svc:/system/iscsitgt:default sunspot [0] svcs svc:/system/iscsitgt:default STATE STIME FMRI online 0:29:44 svc:/system/iscsitgt:defaultOnce 'itscsitgtd' is running, we can use 'iscsitadm' to administrate
our targets. The following simply shows that we currently have no iSCSI
administrative information configured:
sunspot [0] /usr/sbin/iscsitadm show admin iscsitadm: Base Directory: Not set CHAP Name: Not set RADIUS Access: Not set RADIUS Server: Not set iSNS Access: Not set iSNS Server: Not set iSNS Server Status: Not applicable Fast Write ACK: Not setFor the purpose of configuration testing, I had already created a ZFS
storage pool named "storage". I've added to this ZPool 2 x 100 MB
volumes and a filesystem, as seen below. Both volumes will be used as
iSCSI targets and the filesystem (storage/targets) will contain file
based targets. Additionally, using 'iscsitadm modify admin -d', I've
set the base directory to "/storage/targets" which will contain data
files representing the individual target LUNs:
sunspot [0] /usr/sbin/zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT storage 496M 108K 496M 0% ONLINE - sunspot [0] /usr/sbin/zfs list NAME USED AVAIL REFER MOUNTPOINT storage 72K 464M 21K /storage sunspot [0] /usr/sbin/zfs create -V 100m storage/zvol0 sunspot [0] /usr/sbin/zfs create -V 100m storage/zvol1 sunspot [0] /usr/sbin/zfs create -o quota=263m storage/targets sunspot [0] /usr/sbin/zfs list NAME USED AVAIL REFER MOUNTPOINT storage 200M 264M 21K /storage storage/targets 21K 263M 21K /storage/targets storage/zvol0 100M 364M 16K - storage/zvol1 100M 364M 16K - sunspot [0] /usr/sbin/iscsitadm modify admin -d /storage/targetsBy default, the iSCSI target daemon (iscsitgtd) will listen on all
interfaces for connections from client nodes. To help restrict which
interfaces targets are available on, I've created a "TargetPortGroupTag"
(TPGT) via 'iscsitadm create tpgt'. The TPGT restricts target
availability to specified IP addresses on our target node. After creating
the TPGT, a check of 'ifconfig' gets us our IP address on our storage
network (10.0.136.12):
sunspot [0] /usr/sbin/iscsitadm create tpgt 45 sunspot [0] /usr/sbin/ifconfig -a lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 192.168.56.10 netmask ffffff00 broadcast 192.168.56.255 ether 8:0:27:50:42:6b e1000g1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3 inet 10.0.136.12 netmask ffffff00 broadcast 10.0.136.255 ether 8:0:27:24:47:d9 sunspot [0] /usr/sbin/iscsitadm modify tpgt -i 10.0.136.12 45 sunspot [0] /usr/sbin/iscsitadm list tpgt TPGT: 45 IP Address count: 1 sunspot [0] /usr/sbin/iscsitadm list tpgt -v TPGT: 45 IP Address: 10.0.136.12After creating TPGT "45" above, I've associated "10.0.136.12" with the
TPGT via 'iscsitadm modify tpgt' and verified the configuration with
'iscsitadm list tpgt'. As an aside, if you need to delete an IP address
from a TPGT, use:
sunspot [0] iscsitadm delete tpgt -i 10.0.68.10 45 sunspot [0]To delete an entire TPGT and its IP address associations:
sunspot [0] iscsitadm delete tpgt -A 45 sunspot [0]It's time now for some targets. The first two 'iscsitadm' commands
below create LUNs 0 and 1 using our ZPool volumes (zvol0 / zvol1) as
their respective backing stores. Both LUNs are associated with local
target name "sunbeam0". The next 'iscsitadm' command creates LUN 2 for
target "sunbeam0", creating and using a file under "/storage/targets"
as its backing store. The final 'iscsitadm' command is a repeat of the
previous, except that it creates LUN 0 for target "sunbeam1":
sunspot [0] /usr/sbin/iscsitadm create target --lun 0 -b /dev/zvol/dsk/storage/zvol0 sunbeam0 sunspot [0] /usr/sbin/iscsitadm create target --lun 1 -b /dev/zvol/dsk/storage/zvol1 sunbeam0 sunspot [0] /usr/sbin/iscsitadm create target --lun 2 -z 100m --type disk sunbeam0 sunspot [0] /usr/sbin/iscsitadm create target -z 100m --type disk sunbeam1After target creation, 'iscsitadm list target' will display the configured
targets and the current number of client connections to them:
sunspot [0] /usr/sbin/iscsitadm list target Target: sunbeam0 iSCSI Name: iqn.1986-03.com.sun:02:7dcf7ffc-5126-6d65-8a25-e0d52fbf97f8.sunbeam0 Connections: 0 Target: sunbeam1 iSCSI Name: iqn.1986-03.com.sun:02:6abaa85a-bd22-4c4a-daa5-e568f0971673.sunbeam1 Connections: 0To get information about a specific target, such as "sunbeam0" and its
associated LUNs, append '-v TARGETNAME' to the previous 'iscsitadm'
command:
sunspot [0] /usr/sbin/iscsitadm list target -v sunbeam0 Target: sunbeam0 iSCSI Name: iqn.1986-03.com.sun:02:7dcf7ffc-5126-6d65-8a25-e0d52fbf97f8.sunbeam0 Connections: 0 ACL list: TPGT list: LUN information: LUN: 0 GUID: 0 VID: SUN PID: SOLARIS Type: disk Size: 100M Backing store: /dev/zvol/dsk/storage/zvol0 Status: online LUN: 1 GUID: 0 VID: SUN PID: SOLARIS Type: disk Size: 100M Backing store: /dev/zvol/dsk/storage/zvol1 Status: online LUN: 2 GUID: 600144f04def04df0008002750426b00 VID: SUN PID: SOLARIS Type: disk Size: 100M Status: unknown sunspot [0] /usr/sbin/iscsitadm list target -v sunbeam1 Target: sunbeam1 iSCSI Name: iqn.1986-03.com.sun:02:6abaa85a-bd22-4c4a-daa5-e568f0971673.sunbeam1 Connections: 0 ACL list: TPGT list: LUN information: LUN: 0 GUID: 600144f04def04e50008002750426b00 VID: SUN PID: SOLARIS Type: disk Size: 100M Status: unknownEarlier, I set the iSCSI base directory to "/storage/targets". A review
of it via 'ls -l' shows the contents to include the local target names
(sunbeam0 / sunbeam1) to be links back to their respective iSCSI names,
which are directories containing the data files representing the LUNs
relative to that target:
sunspot [0] /bin/ls /storage/targets iqn.1986-03.com.sun:02:6abaa85a-bd22-4c4a-daa5-e568f0971673.sunbeam1 iqn.1986-03.com.sun:02:7dcf7ffc-5126-6d65-8a25-e0d52fbf97f8.sunbeam0 sunbeam0 sunbeam1 sunspot [0] /bin/ls -l /storage/targets total 10 drwxr-xr-x 2 root sys 3 Jun 8 01:13 \ iqn.1986-03.com.sun:02:6abaa85a-bd22-4c4a-daa5-e568f0971673.sunbeam1 drwxr-xr-x 2 root sys 5 Jun 8 01:13 \ iqn.1986-03.com.sun:02:7dcf7ffc-5126-6d65-8a25-e0d52fbf97f8.sunbeam0 lrwxrwxrwx 1 root sys 85 Jun 8 01:12 sunbeam0 -> \ /storage/targets/iqn.1986-03.com.sun:02:7dcf7ffc-5126-6d65-8a25-e0d52fbf97f8.sunbeam0 lrwxrwxrwx 1 root sys 85 Jun 8 01:13 sunbeam1 -> \ /storage/targets/iqn.1986-03.com.sun:02:6abaa85a-bd22-4c4a-daa5-e568f0971673.sunbeam1 sunspot [0] /bin/ls /storage/targets/sunbeam0 lun.0 lun.1 lun.2 sunspot [0] /bin/ls -l /storage/targets/sunbeam0/ total 204851 lrwxrwxrwx 1 root sys 27 Jun 8 01:12 lun.0 -> /dev/zvol/dsk/storage/zvol0 lrwxrwxrwx 1 root sys 27 Jun 8 01:12 lun.1 -> /dev/zvol/dsk/storage/zvol1 -rw------- 1 root sys 104857600 Jun 8 01:13 lun.2 sunspot [0] /bin/ls /storage/targets/sunbeam1 lun.0Seen above, if the LUNs in question are supported by a device-based
backing store, the LUN is a link to that device, otherwise it is an
actual file sized accordingly from the 'iscsitadm create target' command
earlier. With the targets created, I've set both targets to TPGT "45"
using 'iscsitadm modify target'. The reason for this is to restrict
presentation of these targets only on IP addresses configured to TPGT
"45". In the subsequent 'iscsitadm list target', we can see this update:
sunspot [0] /usr/sbin/iscsitadm modify target -p 45 sunbeam0 sunspot [0] /usr/sbin/iscsitadm modify target -p 45 sunbeam1 sunspot [0] /usr/sbin/iscsitadm list target -v sunbeam1 Target: sunbeam1 iSCSI Name: iqn.1986-03.com.sun:02:6abaa85a-bd22-4c4a-daa5-e568f0971673.sunbeam1 Connections: 0 ACL list: TPGT list: TPGT: 45 LUN information: LUN: 0 GUID: 600144f04def04e50008002750426b00 VID: SUN PID: SOLARIS Type: disk Size: 100M Status: unknownTo further restrict access to the targets we've created, we can add
the initiator node name (INN) to a target's access list. To do so, we
need to retrieve the INN from the client host (sunbeam) via 'iscsiadm':
sunbeam [0] /usr/sbin/iscsiadm list initiator-node Initiator node name: iqn.1986-03.com.sun:01:2ae5bff5ffff.4dedb2cd Initiator node alias: - Login Parameters (Default/Configured): Header Digest: NONE/- Data Digest: NONE/- Authentication Type: NONE RADIUS Server: NONE RADIUS access: unknown Configured Sessions: 1Back on our target node (sunspot), I've created an initiator alias of
"sunbeam" to INN "iqn.1986-03.com.sun:01:2ae5bff5ffff.4dedb2cd" via
'iscsitadm create initiator'. This allows us to simply refer to the
initiator by the alias rather than remembering the full INN. Next,
I've modified the ACL of targets "sunbeam0" and "sunbeam1" to restrict
access to only the initiator referred to by alias "sunbeam":
sunspot [0] /usr/sbin/iscsitadm create initiator -n \ iqn.1986-03.com.sun:01:2ae5bff5ffff.4dedb2cd sunbeam sunspot [0] /usr/sbin/iscsitadm modify target -l sunbeam sunbeam0 sunspot [0] /usr/sbin/iscsitadm modify target -l sunbeam sunbeam1 sunspot [0] /usr/sbin/iscsitadm list initiator Initiator: sunbeam iSCSI Name: iqn.1986-03.com.sun:01:2ae5bff5ffff.4dedb2cd CHAP Name: Not set sunspot [0] /usr/sbin/iscsitadm list target -v sunbeam0 Target: sunbeam0 iSCSI Name: iqn.1986-03.com.sun:02:7dcf7ffc-5126-6d65-8a25-e0d52fbf97f8.sunbeam0 Connections: 0 ACL list: Initiator: sunbeam TPGT list: TPGT: 45 LUN information: LUN: 0 GUID: 0 VID: SUN PID: SOLARIS Type: disk Size: 100M Backing store: /dev/zvol/dsk/storage/zvol0 Status: online LUN: 1 GUID: 0 VID: SUN PID: SOLARIS Type: disk Size: 100M Backing store: /dev/zvol/dsk/storage/zvol1 Status: online LUN: 2 GUID: 600144f04def04df0008002750426b00 VID: SUN PID: SOLARIS Type: disk Size: 100M Status: unknown sunspot [0]The subsequent listings above show our new alias in place and our alias in
the ACL for target "sunbeam0". At this point, our target node "sunspot"
has been configured for client access from initiator node "sunbeam".
The only thing we need to do now is configure the initiator node, which
will be part 2.
see also:
Part 2: Configuring iSCSI Initiators in Solaris
Configuring iSCSI Targets in Linux
Configuring Oracle Solaris iSCSI Targets and Initiators (Oracle.com)