iscsi是一种IP-SAN设备,通过TCP/IP网络封装scsi协议形成的廉价SAN设备。设备类型的介绍大家可以去看我这里DRBD那一篇,这里就不多介绍了。

iscsi与DRBD的不同在于,iscsi是封装的是scsi协议,存储端可以模拟多个target,而target下面还有lun,可以做一个专业的存储服务了,而DRBD只是用来同步双节点的。


目录

一、简单介绍

二、服务端tgtadm安装使用

三、客户端使用

四、服务端配置文件创建target

最后、用户认证



一、简单介绍:

我们先来看看scsi的一般工作方式。简单了解下什么是target,什么是lun(Logical Unit Number,逻辑单元号)。

这是没有lun的图:

ISCSI的实现_第1张图片

真是够简陋的。如上面也看到了,从SCSI控制器连出来的各个scsi磁盘,都是串在一起的,各个磁盘称之为target,各个target都有编号,用以区分不同的磁盘,从scsi控制器发送出来的数据都是已经封装了scsi协议报文的,scsi报文中就有target编号。最后的磁盘的另一端要有终结器来终结scsi的数据,不然会反弹干扰。


但是现在问题来了,在scsi中窄带的可以连8个target,宽带的可以连16个,再多磁盘的话难道要加控制器吗?那要加多少啊。所以就有了lun的概念。

ISCSI的实现_第2张图片

target不再是磁盘了,而是一个target控制器,每个target下面都可以连接32个lun(也就是逻辑存储设备,主要就是磁盘)。这就简单多了,宽带的scsi可以连接16个设备,除了scsi控制器,就是可以连接15个target了。每个target又可以连接32个lun。而这是一种逻辑的概念,每一个lun就好像是target的一个分区一样。


接着看我们的iscsi。

数据从用户到内核,经过scsi驱动封装scsi协议,然后再到scsi控制器。正常是这样的。而iscsi就是横在scsi驱动到scsi控制器之间的家伙。iscsi收到scsi数据(封装了scsi报文的数据)以后自己再封装iscsi报文,然后由tcp/ip再次封装发送。而在存储服务端,收到数据以后,拆iscsi报文然后给scsi驱动拆scsi报文,然后就是光溜溜的数据了,再然后就是存储了。

ISCSI的实现_第3张图片

客户端也就是发起人称为Initiator,服务端称为target。以上就是数据处理的过程。全部都是在内核中完成。而且双方都是通过网络连接,连接之间没有scsi控制器。

有意思的是,服务端存储的时候可以存在任何磁盘(可以不是scsi磁盘),因为已经是纯数据了,可以经过sata存到sata盘,也可以经过ide存到ide盘。而更有意思的是,如果要存在scsi磁盘中,就还要再经过scsi驱动,然后scsi控制器存储到各个scsi磁盘中。

因为双方iscsi连接之间的机制,数据在存储端会还原成纯数据,再怎么存储就是另一回事了。


二、服务端tgtadm安装使用:

iscsi和scsi默认都会被编译进内核,如我们这里的CentOS6.5,内核默认就有这个功能。所以我们只要安装用户管理工具即可。

iscsi是一种公共协议,所以有很多为它开发工具的组织。我们这里就使用CentOS6.5自带的。光盘中就有。

服务端工具:scsi-target-utils

客户端工具:iscsi-initiator-utils


[root@localhost ~]# rpm -ql scsi-target-utils
/etc/rc.d/init.d/tgtd    #服务脚本
/etc/sysconfig/tgtd    
/etc/tgt/targets.conf        #配置文件
/usr/sbin/tgt-admin        #配置工具,会去读取配置文件,刷新配置。
/usr/sbin/tgt-setup-lun
/usr/sbin/tgtadm           #管理工具
/usr/sbin/tgtd         #服务程序,要监听端口的。
/usr/sbin/tgtimg        #磁盘映象管理。
。。。。各种Man文档.


iscsi配置有两种方式,一是用tgtadm命令来配置,重启失效,一是在配置文件中配置。

我们先来用tgtadm命令来配置,因为对理解这种机制有帮助。

安装并启动服务。

[root@localhost ~]# yum install scsi-target-utils
[root@localhost ~]# service tgtd start
Starting SCSI target daemon:                               [  OK  ]
[root@localhost ~]# chkconfig tgtd on

这个服务默认是监听3260端口的。我们先来创建个分区,或者来个单独的磁盘。

如果是分区的话,有意思的是:

呈现在initiator端也还是整个磁盘,也是可以分区的,也是要写入分区表的。而在target端也可以用fdisk /dev/sda1之类的命令可以查看,。虽说在target端只是分区,可分区的头512字节中的64字节可能被写入分区表信息了。


tgtadm是一种模式化的管理工具,tatadm常用于管理三类对象:1、target的管理。2、lun的管理。3、认证的管理。

tgtadm [OPTIONS]... [-C --control-port ] [-L --lld ] [-o --op ] [-m --mode ]
                           [-t --tid ] [-T --targetname ] [-Y --device-type ] [-l --lun ]
                           [-b --backing-store ] [-E --bstype ] [-I --initiator-address 
]                            [-Q --initiator-name ] [-n --name ] [-v --value ]                            [-P --params ] [-F --force] [-h --help]

常用选项

  • -L --lld    是用来指定驱动,在我们这里就是iscsi的驱动了

  • -o --op    动作:new,show,delete,bind,unbind.

  • -m --mode    是用来指定操作对象:target, logicalunit等。

  • -t --tid    指定target的ID。绑定lun的时候就要指定要绑定到哪个target ID上。

  • -T --targetname    指定target名称。为了保证全局唯一,命名要遵循IQN规范。客户端连接时要用。

  • -l --lun指定LUN的号码。小写L。

  • -b --backing-store  关联到指定的LUN上的后端存储设备,可以是分区或硬盘,建议硬盘。

  • -I --initiator-address指定授权访问的IP地址,可以是网络地址。大写i。


建立步骤:

  1. 创建target.

  2. 在target上创建lun.

  3. 访问控制,有两种(IP访问控制,用户认证)



创建target:-t指定targetID,-T指定target名称

[root@localhost ~]# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2015-07.iscsi.tgt:1

iqn是一种命名规范: iqn.yyyy-mm.reverse_domain.STRING[:substring]。

由“iqn.日期.反向域名.自定义字串”组成。


查看状态

[root@localhost ~]# tgtadm -L iscsi -o show -m target
Target 1: iqn.2015-07.iscsi.tgt:1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0                    #这个是lun控制器,并没有关联存储设备。
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
    Account information:
    ACL information:

也可以查看指定的target参数信息:

[root@localhost ~]# tgtadm -L iscsi -o show -m target -t 1
MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
HeaderDigest=None
DataDigest=None
InitialR2T=Yes
MaxOutstandingR2T=1
ImmediateData=Yes
FirstBurstLength=65536
MaxBurstLength=262144
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
IFMarker=No
OFMarker=No
DefaultTime2Wait=2
DefaultTime2Retain=20
OFMarkInt=Reject
IFMarkInt=Reject
MaxConnections=1
RDMAExtensions=Yes
TargetRecvDataSegmentLength=262144
InitiatorRecvDataSegmentLength=262144
MaxOutstandingUnexpectedPDUs=0
[root@localhost ~]#


创建LUN:-t指定target,-l指定lun,-b指定存储。

[root@localhost ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdb1

再查看下状态:

[root@localhost ~]# tgtadm -L iscsi -o show -m target
Target 1: iqn.2015-07.iscsi.tgt:1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1                    #刚才创建的lun1。
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10742 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1    #所关联的存储。
            Backing store flags: 
    Account information:
    ACL information:

访问控制-ip:-t指定的target,-I指定的IP。

[root@localhost ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.1.20
[root@localhost ~]# tgtadm -L iscsi -o show -m target
Target 1: iqn.2015-07.iscsi.tgt:1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
。。。。。。。。。。。。。此处省略
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10742 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1
            Backing store flags: 
    Account information:
    ACL information:            #这是作用的整个target,不能指定单个lun.
        192.168.1.20            #可允许访问的IP地址,可以是网络地址。
[root@localhost ~]#

如果不指定访问控制,Initiator端是不能访问服务存储的。


现在存储服务就算是建起来了,可以建立多个target然后每个target多个tun。服务器都会模拟出来这种状态给客户端。


删除lun

[root@localhost ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 1
[root@localhost ~]# tgtadm -L iscsi -o show -m target
Target 1: iqn.2015-07.iscsi.tgt:1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0                    #只有lun0,lun1删除了。
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
    Account information:
    ACL information:
        192.168.1.20
[root@localhost ~]#


删除target:也可以在没有删除lun的情况下直接删除target.

[root@localhost ~]# tgtadm -L iscsi -o delete -m target -t 1
[root@localhost ~]# tgtadm -L iscsi -o show -m target
[root@localhost ~]#


连起来看下

[root@localhost ~]# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2015-07-05.tgt1
[root@localhost ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.1.0/24
[root@localhost ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdb1
[root@localhost ~]# tgtadm -L iscsi -o show -m target
Target 1: iqn.2015-07-05.tgt1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
。。。。。。。。。。LUN0省略
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10742 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1
            Backing store flags: 
    Account information:
    ACL information:
        192.168.1.0/24
[root@localhost ~]#


解绑IP。指定target,指定ip.

[root@localhost ~]# tgtadm -L iscsi -o unbind -m target -t 1 -I 192.168.1.0/24
[root@localhost ~]#


我们再重新绑定IP,来看看客户端怎么配置。注意:如果没有访问控制,客户端是发现不了target设备的。



三、客户端使用

客户端配置:

安装客户端工具:iscsi-initiator-utils

[root@Test ~]# yum install iscsi-initiator-utils
[root@Test ~]# rpm -ql iscsi-initiator-utils
/etc/iscsi/iscsid.conf            #配置文件
/etc/logrotate.d/iscsiuiolog
/etc/rc.d/init.d/iscsi         #这个服务要启动起来。
/etc/rc.d/init.d/iscsid        #这个服务要启动起来,会去读取iscsid.conf配置文件。
/sbin/brcm_iscsiuio
/sbin/iscsi-iname                #建立名称。
/sbin/iscsiadm                 #手动去发现和使用lun,iscsi服务也会去执行。
/sbin/iscsid                    #iscsid会执行
/sbin/iscsistart
/sbin/iscsiuio


客户端名称:

每个客户端都应该有一个唯一的名子来让服务端可以识别。

[root@Test ~]# echo "InitiatorName=`iscsi-iname -p iqn.2015-07-05.test.access:01`" > /etc/iscsi/initiatorname.iscsi
[root@Test ~]# echo "InitiatorAlias=initiator01" >> /etc/iscsi/initiatorname.iscsi
[root@Test ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2015-07-05.test.access:01:1118742a35c0
InitiatorAlias=initiator01
[root@Test ~]#

iscsi-iname会在所指定的名子后加上随机字符,这样不用我们自己去编了。

在/etc/iscsi/initiatorname.iscsi文件中指定客户端的名称,别名。上面第二个指定的就是别名了。

/etc/init.d/iscsi这个脚本会去读这个文件,还有iscsid命令也默认会去读这个文件。


启动服务:

客户端也要启动服务,来初始化内核模块,初始化已经发现的各Lun,让内核可以识别lun并可以挂载。

所以我们启动服务:

[root@Test iscsi]# service iscsi start
[root@Test iscsi]# service iscsid start
[root@Test iscsi]# chkconfig iscsi on
[root@Test iscsi]# chkconfig iscsid on


在客户端发现并连接服务端存储以后,会在/var/lib/iscsi生成一些数据,如,发现的lun信息,已经使用的存储信息。上面这两个服务在启动的时候就会去读取这些数据,从而可以自动的发现lun,然后自动的连接。

iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -I iface -t type -p ip:port [ -l ] ] 
iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ]
  • -d, --debug=debug_level   显示debug信息,级别为0-8;

  • -l, --login    连接target设备。

  • -t, --type=type  可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator;

  • -p, --portal=ip[:port]  指定target服务的IP和端口;如果是默认端口,可以省略。

  • -m, --mode 可用的mode有discovery,node,fw,host,iface和session。这里只介绍discovery和node。

  • -T, --targetname=targetname  用于指定target的名字

  • -u, --logout 

  • -o, --op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;

  • -I, --interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;

  • -s    显示状态

看起来挺多的,不过只是简单使用,也就两条指令了。

discovery是用来发现target设备的。

node是用来连接和注销target设备的。


发现target

[root@Test iscsi]# iscsiadm -m discovery -t sendtargets -p 192.168.1.10
Starting iscsid:                                           [  OK  ]
192.168.1.10:3260,1 iqn.2015-07-05.tgt1    #target名称。


连接target:-T指定target,-p指定IP端口,-l登录连接。我这里没有加-p。

wKiom1WY5JPC7HfMAAE199u4ULQ430.jpg

现在已经连上了,上面的/dev/sdd就是了。然后可以对它分区格式化挂载。

分完区以后:

wKiom1WY5q2RgDHxAABT5XOhLy0164.jpg


查看状态

[root@Test iscsi]# iscsiadm -m node -s


注销连接:最好把分区卸载以后再注销。

wKioL1WY5zuDxTBOAAEFGQsVsko794.jpg

只是把后面的-l变成了-u。


在发现和连接过target以后,在/var/lib/iscsi目录下会有相关数据,如果以后不想再用这个target了,就可以用iscsiadm把信息删除,然后再把这个目录下相关的文件删除,注意:最好不要直接删除文件。


删除连接

[root@Test lib]# iscsiadm -m node -T iqn.2015-07-05.tgt1 -o delete

[root@Test lib]# iscsiadm -m node -T iqn.2015-07-05.tgt1 -l
iscsiadm: No records found        #删除相关信息以后,就连接不上了,如果想用就再次发现。

现在可以把/var/lib/iscsi目录下的所有文件直接删除了。




一般使用就这样了,但是像上面服务端所做的操作,一重启服务就都没了。所以我们要把配置写在配置文件中。


四、服务端配置文件创建target.

首先客户端断开连接,服务端重启服务。服务端刚才所做的操作全部归零。

可以打开 /etc/tgt/targets.conf 这个文件看一下,最下面有很多的实例。

我这里的配置:

    #这里是target的名称
        backing-store /dev/sdb1                #指定存储
        initiator-address 192.168.1.0/24        #指定访问控制



        backing-store /dev/sdb2
        backing-store /dev/sdb3
        initiator-address 192.168.1.0/24

第一个target只有一个存储,那就是那个target里的lun1。 下面这个target里面有两个,就是有lun1和lun2。这些都是由tgt-admin命令自动读取执行的。

重启tgtd服务,看一下状态。这里lun0就不省略了,因为上面有编号信息。

[root@localhost ~]# tgtadm -L iscsi -o show -m target
Target 1: iqn.2015-07.com.test:iscsi.target1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10742 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1            #文件中指定的存储
            Backing store flags: 
    Account information:
    ACL information:
        192.168.1.0/24
Target 2: iqn.2015-07.com.test:iscsi.target2
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00020000
            SCSI SN: beaf20
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00020001
            SCSI SN: beaf21
            Size: 21484 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb2        #文件中指定的存储
            Backing store flags: 
        LUN: 2
            Type: disk
            SCSI ID: IET     00020002
            SCSI SN: beaf22
            Size: 255 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb3        #文件中指定的存储
            Backing store flags: 
    Account information:
    ACL information:
        192.168.1.0/24
[root@localhost ~]#

如果只是用起来还是很简单的,里面也有各种各样的参数,朋友们有兴趣就man吧。


我们看下客户端:

[root@Test iscsi]# iscsiadm -m discovery -t sendtargets -p 192.168.1.10
192.168.1.10:3260,1 iqn.2015-07.com.test:iscsi.target1
192.168.1.10:3260,1 iqn.2015-07.com.test:iscsi.target2

发现了两个target。全部连上看看。

[root@Test iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target1 -l
Logging in to [iface: default, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260] (multiple)
Login to [iface: default, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260] successful.
[root@Test iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target2 -l
Logging in to [iface: default, target: iqn.2015-07.com.test:iscsi.target2, portal: 192.168.1.10,3260] (multiple)
Login to [iface: default, target: iqn.2015-07.com.test:iscsi.target2, portal: 192.168.1.10,3260] successful.


我们上面给一sdd盘分区,还记得吗。只不过在这里变成sde了。多了sde、sdf、sdg三个盘。

wKioL1WY-ZvzdUpgAADWybh_sr8238.jpg


对了,如果用fstab挂载的时候,最好加上_netdev挂载选项。如:

wKiom1WY-1ziizkHAAAgkoBUEdw454.jpg

[root@Test ~]# mount
/dev/mapper/vg_test-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sr0 on /media/cdrom type iso9660 (ro)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdd1 on /mnt type ext4 (rw)
/dev/sde1 on /mnt type ext4 (rw,_netdev)            #_netdev选项。



用户认证:

访问控制还有用户认证,但是没有Ip认证常用,而且虽说用户密码是加密的,可是在网络上传输是明文的,如果要跨互联网,就要用×××来保证链路的加密。

密码认证有单向也有双向,单向就是只认证一方的,一般就是服务器端确认客户端的身份。双向的就是服务器要确认客户端的身份,而客户端也要确认服务器的身份。我想你应该不想把机密数据都写到我电脑上来吧。



我们这里在客户端安装的iscsi-initiator-utils工具只支持提供帐号密码给服务器验证,而不支持验证服务器端的帐号密码。

所以在客户端的配置文件中提供帐号密码就可以了。

在服务器端,可以在tgtadm中指定要验证的客户端账号密码也可以在配置文件中指定。



在客户端的配置:

编辑主配置文件,配置客户端登录target时使用的帐号和密码:

# vim /etc/iscsi/iscsid.conf


取消下面3行的注释。并设置账号密码。CHAP是一种认证方式。

node.session.auth.authmethod = CHAP            #开启CHAP认证
node.session.auth.username = username
node.session.auth.password = password

如:

ISCSI的实现_第4张图片


如果没有连接过target,客户端这就可以发现并连接登录了。但是我们上面已经连接过了。

就要断开所有连接,删除iscsi信息,然后删除/var/lib/iscsi/send_targets下面所对应的target。最后再重启iscsid服务。


使用iscsiadm -m node -s来查看登录了哪些target。然后就可以把登入的target断开了。

[root@Test iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target1 -u
Logging out of session [sid: 12, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260]
Logout of [sid: 12, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260] successful.
[root@Test iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target2 -u
Logging out of session [sid: 13, target: iqn.2015-07.com.test:iscsi.target2, portal: 192.168.1.10,3260]
Logout of [sid: 13, target: iqn.2015-07.com.test:iscsi.target2, portal: 192.168.1.10,3260] successful.
[root@Test iscsi]# 
[root@Test iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target1 -o delete
[root@Test iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target2 -o delete
[root@Test iscsi]# rm -rf /var/lib/iscsi/send_targets/192.168.1.10,3260/
[root@Test iscsi]# service iscsid restart
Stopping iscsid: 
Starting iscsid:                                           [  OK  ]
[root@Test iscsi]#


服务端配置

1、tgtadm配置:

[root@localhost ~]# tgtadm -L iscsi -o new -m account --user tgtuser --password tgtpasswd
[root@localhost ~]# tgtadm -L iscsi -o bind -m account -t 1 --user tgtuser  #给target1添加用户认证。
[root@localhost ~]# tgtadm -L iscsi -o show -m account
Account list:
    tgtuser


如果这时客户端没有配置帐号密码:

[root@Test ~]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target1 -l
Logging in to [iface: default, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals
[root@Test ~]#

如果因为密码错了,或者什么原因认证错误,一定要删除所有有关的target信息,修改配置文件,并重启iscsid服务。然后重新发现并连接。

[root@Test ~]#  iscsiadm -m discovery -t sendtargets -p 192.168.1.10
192.168.1.10:3260,1 iqn.2015-07.com.test:iscsi.target1
192.168.1.10:3260,1 iqn.2015-07.com.test:iscsi.target2
[root@Test ~]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target1 -l
Logging in to [iface: default, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260] (multiple)
Login to [iface: default, target: iqn.2015-07.com.test:iscsi.target1, portal: 192.168.1.10,3260] successful.


2、配置文件:

只有在配置文件中才会重启服务不会丢失。


        backing-store /dev/sdb1
        incominguser tgtuser tgtpasswd        #指定用户和密码
        initiator-address 192.168.1.0/24

加进去一行"incominguser USER PASSWORD”就可以了。

在配置文件里看起来比命令简单多了,这个target一共也就四行就完成定义了。

[root@localhost ~]# tgtadm -L iscsi -o show -m account
Account list:
    tgtuser            #绑定的这个用户。
[root@localhost ~]#



就写到这里吧,朋友们如果有不明白的地方尽管问,一起学习。如果发现错误或诡异的地方还望指出。谢谢了。