iscsi是一种IP-SAN设备,通过TCP/IP网络封装scsi协议形成的廉价SAN设备。设备类型的介绍大家可以去看我这里DRBD那一篇,这里就不多介绍了。
iscsi与DRBD的不同在于,iscsi是封装的是scsi协议,存储端可以模拟多个target,而target下面还有lun,可以做一个专业的存储服务了,而DRBD只是用来同步双节点的。
目录:
一、简单介绍:
我们先来看看scsi的一般工作方式。简单了解下什么是target,什么是lun(Logical Unit Number,逻辑单元号)。
这是没有lun的图:
真是够简陋的。如上面也看到了,从SCSI控制器连出来的各个scsi磁盘,都是串在一起的,各个磁盘称之为target,各个target都有编号,用以区分不同的磁盘,从scsi控制器发送出来的数据都是已经封装了scsi协议报文的,scsi报文中就有target编号。最后的磁盘的另一端要有终结器来终结scsi的数据,不然会反弹干扰。
但是现在问题来了,在scsi中窄带的可以连8个target,宽带的可以连16个,再多磁盘的话难道要加控制器吗?那要加多少啊。所以就有了lun的概念。
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报文,然后就是光溜溜的数据了,再然后就是存储了。
客户端也就是发起人称为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
[[email protected] ~]# 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命令来配置,因为对理解这种机制有帮助。
安装并启动服务。
[[email protected] ~]# yum install scsi-target-utils [[email protected] ~]# service tgtd start Starting SCSI target daemon: [ OK ] [[email protected] ~]# chkconfig tgtd on
这个服务默认是监听3260端口的。我们先来创建个分区,或者来个单独的磁盘。
如果是分区的话,有意思的是:
呈现在initiator端也还是整个磁盘,也是可以分区的,也是要写入分区表的。而在target端也可以用fdisk /dev/sda1之类的命令可以查看,。虽说在target端只是分区,可分区的头512字节中的64字节可能被写入分区表信息了。
tgtadm是一种模式化的管理工具,tatadm常用于管理三类对象:1、target的管理。2、lun的管理。3、认证的管理。
tgtadm [OPTIONS]... [-C --control-port <port>] [-L --lld <driver>] [-o --op <operation>] [-m --mode <mode>] [-t --tid <id>] [-T --targetname <targetname>] [-Y --device-type <type>] [-l --lun <lun>] [-b --backing-store <path>] [-E --bstype <type>] [-I --initiator-address <address>] [-Q --initiator-name <name>] [-n --name <parameter>] [-v --value <value>] [-P --params <param=value[,param=value...]>] [-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。
建立步骤:
- 创建target.
- 在target上创建lun.
- 访问控制,有两种(IP访问控制,用户认证)
创建target:-t指定targetID,-T指定target名称
[[email protected] ~]# 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.日期.反向域名.自定义字串”组成。
查看状态
[[email protected] ~]# 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参数信息:
[[email protected] ~]# 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 [[email protected] ~]#
创建LUN:-t指定target,-l指定lun,-b指定存储。
[[email protected] ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdb1
再查看下状态:
[[email protected] ~]# 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。
[[email protected] ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.1.20 [[email protected] ~]# 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地址,可以是网络地址。 [[email protected] ~]#
如果不指定访问控制,Initiator端是不能访问服务存储的。
现在存储服务就算是建起来了,可以建立多个target然后每个target多个tun。服务器都会模拟出来这种状态给客户端。
删除lun
[[email protected] ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 1 [[email protected] ~]# 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 [[email protected] ~]#
删除target:也可以在没有删除lun的情况下直接删除target.
[[email protected] ~]# tgtadm -L iscsi -o delete -m target -t 1 [[email protected] ~]# tgtadm -L iscsi -o show -m target [[email protected] ~]#
连起来看下:
[[email protected] ~]# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2015-07-05.tgt1 [[email protected] ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.1.0/24 [[email protected] ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdb1 [[email protected] ~]# 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 [[email protected] ~]#
解绑IP。指定target,指定ip.
[[email protected] ~]# tgtadm -L iscsi -o unbind -m target -t 1 -I 192.168.1.0/24 [[email protected] ~]#
我们再重新绑定IP,来看看客户端怎么配置。注意:如果没有访问控制,客户端是发现不了target设备的。
三、客户端使用
客户端配置:
安装客户端工具:iscsi-initiator-utils
[[email protected] ~]# yum install iscsi-initiator-utils
[[email protected] ~]# 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
客户端名称:
每个客户端都应该有一个唯一的名子来让服务端可以识别。
[[email protected] ~]# echo "InitiatorName=`iscsi-iname -p iqn.2015-07-05.test.access:01`" > /etc/iscsi/initiatorname.iscsi [[email protected] ~]# echo "InitiatorAlias=initiator01" >> /etc/iscsi/initiatorname.iscsi [[email protected] ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2015-07-05.test.access:01:1118742a35c0 InitiatorAlias=initiator01 [[email protected] ~]#
iscsi-iname会在所指定的名子后加上随机字符,这样不用我们自己去编了。
在/etc/iscsi/initiatorname.iscsi文件中指定客户端的名称,别名。上面第二个指定的就是别名了。
/etc/init.d/iscsi这个脚本会去读这个文件,还有iscsid命令也默认会去读这个文件。
启动服务:
客户端也要启动服务,来初始化内核模块,初始化已经发现的各Lun,让内核可以识别lun并可以挂载。
所以我们启动服务:
[[email protected] iscsi]# service iscsi start [[email protected] iscsi]# service iscsid start [[email protected] iscsi]# chkconfig iscsi on [[email protected] 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:
[[email protected] 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。
现在已经连上了,上面的/dev/sdd就是了。然后可以对它分区格式化挂载。
分完区以后:
查看状态:
[[email protected] iscsi]# iscsiadm -m node -s
注销连接:最好把分区卸载以后再注销。
只是把后面的-l变成了-u。
在发现和连接过target以后,在/var/lib/iscsi目录下会有相关数据,如果以后不想再用这个target了,就可以用iscsiadm把信息删除,然后再把这个目录下相关的文件删除,注意:最好不要直接删除文件。
删除连接:
[[email protected] lib]# iscsiadm -m node -T iqn.2015-07-05.tgt1 -o delete [[email protected] lib]# iscsiadm -m node -T iqn.2015-07-05.tgt1 -l iscsiadm: No records found #删除相关信息以后,就连接不上了,如果想用就再次发现。
现在可以把/var/lib/iscsi目录下的所有文件直接删除了。
一般使用就这样了,但是像上面服务端所做的操作,一重启服务就都没了。所以我们要把配置写在配置文件中。
四、服务端配置文件创建target.
首先客户端断开连接,服务端重启服务。服务端刚才所做的操作全部归零。
可以打开 /etc/tgt/targets.conf 这个文件看一下,最下面有很多的实例。
我这里的配置:
<target iqn.2015-07.com.test:iscsi.target1> #这里是target的名称 backing-store /dev/sdb1 #指定存储 initiator-address 192.168.1.0/24 #指定访问控制 </target> <target iqn.2015-07.com.test:iscsi.target2> backing-store /dev/sdb2 backing-store /dev/sdb3 initiator-address 192.168.1.0/24 </target>
第一个target只有一个存储,那就是那个target里的lun1。 下面这个target里面有两个,就是有lun1和lun2。这些都是由tgt-admin命令自动读取执行的。
重启tgtd服务,看一下状态。这里lun0就不省略了,因为上面有编号信息。
[[email protected] ~]# 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 [[email protected] ~]#
如果只是用起来还是很简单的,里面也有各种各样的参数,朋友们有兴趣就man吧。
我们看下客户端:
[[email protected] 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。全部连上看看。
[[email protected] 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. [[email protected] 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三个盘。
对了,如果用fstab挂载的时候,最好加上_netdev挂载选项。如:
[[email protected] ~]# 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认证常用,而且虽说用户密码是加密的,可是在网络上传输是明文的,如果要跨互联网,就要用VPN来保证链路的加密。
密码认证有单向也有双向,单向就是只认证一方的,一般就是服务器端确认客户端的身份。双向的就是服务器要确认客户端的身份,而客户端也要确认服务器的身份。我想你应该不想把机密数据都写到我电脑上来吧。
我们这里在客户端安装的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
如:
如果没有连接过target,客户端这就可以发现并连接登录了。但是我们上面已经连接过了。
就要断开所有连接,删除iscsi信息,然后删除/var/lib/iscsi/send_targets下面所对应的target。最后再重启iscsid服务。
使用iscsiadm -m node -s来查看登录了哪些target。然后就可以把登入的target断开了。
[[email protected] 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. [[email protected] 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. [[email protected] iscsi]# [[email protected] iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target1 -o delete [[email protected] iscsi]# iscsiadm -m node -T iqn.2015-07.com.test:iscsi.target2 -o delete [[email protected] iscsi]# rm -rf /var/lib/iscsi/send_targets/192.168.1.10,3260/ [[email protected] iscsi]# service iscsid restart Stopping iscsid: Starting iscsid: [ OK ] [[email protected] iscsi]#
服务端配置:
1、tgtadm配置:
[[email protected] ~]# tgtadm -L iscsi -o new -m account --user tgtuser --password tgtpasswd [[email protected] ~]# tgtadm -L iscsi -o bind -m account -t 1 --user tgtuser #给target1添加用户认证。 [[email protected] ~]# tgtadm -L iscsi -o show -m account Account list: tgtuser
如果这时客户端没有配置帐号密码:
[[email protected] ~]# 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 [[email protected] ~]#
如果因为密码错了,或者什么原因认证错误,一定要删除所有有关的target信息,修改配置文件,并重启iscsid服务。然后重新发现并连接。
[[email protected] ~]# 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 [[email protected] ~]# 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、配置文件:
只有在配置文件中才会重启服务不会丢失。
<target iqn.2015-07.com.test:iscsi.target1> backing-store /dev/sdb1 incominguser tgtuser tgtpasswd #指定用户和密码 initiator-address 192.168.1.0/24 </target>
加进去一行"incominguser USER PASSWORD”就可以了。
在配置文件里看起来比命令简单多了,这个target一共也就四行就完成定义了。
[[email protected] ~]# tgtadm -L iscsi -o show -m account Account list: tgtuser #绑定的这个用户。 [[email protected] ~]#
就写到这里吧,朋友们如果有不明白的地方尽管问,一起学习。如果发现错误或诡异的地方还望指出。谢谢了。