Saturday, August 18, 2012

How To Setup an ISCSI target using tgtadmin

SCSI uses a client-server architecture. A "client" (ie: your system) is an initiator, it initiates requests. A "server" (ie: your storage device) is a target, it has something you want and answers requests from the initiator(s). Initiators come in two varieties: software and hardware. A software initiator is just a driver that handles all requests and pairs the network interfaces driver and the SCSI drivers together to make it all work. Using a software initiator any system with an ethernet card can act as an iSCSI initiator. A hardware initiator is an iSCSI HBA, which is basically just an ethernet card with a SCSI ASIC on-board to offload all the work from the system CPU.

#yum install scsi-target-utils -y

Start the tgtd service:

# service tgtd start

Define an iSCSI target name:

# tgtadm --lld iscsi --op new --mode target --tid=1 --targetname

To view the currect configuration:

# tgtadm --lld iscsi --op show --mode target

For example, here we create a 512M file as the block device:

# dd if=/dev/zero of=/disk1 bs=1M count=512

Add it as a logical unit to the target:

# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /disk1

Enable the target to accept any initiators:

# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

View the current configuration again:

# tgtadm --lld iscsi --op show --mode target
Target 1:
System information:
Driver: iscsi
Status: running
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: deadbeaf1:0
SCSI SN: beaf10
Size: 0
Backing store: No backing store
LUN: 1
Type: disk
SCSI ID: deadbeaf1:1
SCSI SN: beaf11
Size: 55G
Backing store: /disk1
Account information:
ACL information:

Ensure TCP port 3260 can be accessed from remote host.

 Start tgt-admin and /etc/tgt/targets.conf can be used for make the setup persistent over reboot:

# tgt-admin --dump > /etc/tgt/targets.conf
# chkconfig tgtd on

In releases prior to Red Hat Enterprise Linux 5.3, you have to put the "tgtadm" commands into /etc/rc.local and enable the tgtd service:

echo >> /etc/rc.local < tgtadm --lld iscsi --op new --mode target --tid=1 --targetname
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /disk1
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

# chkconfig tgtd on

1 comment: