简介:
服务端软件:scsi-target-utils
客户端: scsi-initiator-utils/etc/tgt/targets.conf:主要配置文件,设定要分享的磁盘格式与哪几颗;
/usr/sbin/tgt-admin:在线查询、删除 target 等功能的设定工具;
/usr/sbin/tgt-setup-lun:建立 target 以及设定分享的磁盘与可使用的客户端等工具软件。
/usr/sbin/tgtadm:手动直接管理的管理员工具 (可使用配置文件取代);
/usr/sbin/tgtd:主要提供 iSCSI target 服务的主程序;
/usr/sbin/tgtimg:建置预计分享的映像文件装置的工具 (以映像文件仿真磁盘);
[root@compute-192-168-2-190 opt]# dd if=/dev/zero of=/opt/cloud.img bs=1 count=0 seek=100G 0+0 records in 0+0 records out 0 bytes (0 B) copied, 8.7639e-05 s, 0.0 kB/s
Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 60801 488384001 5 Extended /dev/sdb5 1 13055 104864224+ 83 Linux /dev/sdb6 13056 26110 104864256 83 Linux /dev/sdb7 26111 39165 104864256 83 Linux /dev/sdb8 39166 60801 173791138+ 83 Linux
[root@compute-192-168-2-190 opt]# pvcreate /dev/sdb6 dev_is_mpath: failed to get device for 8:22 Physical volume "/dev/sdb6" successfully created [root@compute-192-168-2-190 opt]# vgcreate lvmpool /dev/sdb6 Volume group "lvmpool" successfully created [root@compute-192-168-2-190 opt]# pvcreate /dev/sdb8 Physical volume "/dev/sdb8" successfully created [root@compute-192-168-2-190 opt]# vgextend lvmpool /dev/sdb8 Volume group "lvmpool" successfully extended [root@compute-192-168-2-190 opt]# vgdisplay --- Volume group --- VG Name lvmpool System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 265.74 GiB PE Size 4.00 MiB Total PE 68030 Alloc PE / Size 0 / 0 Free PE / Size 68030 / 265.74 GiB VG UUID SaiQH7-cRQ8-LXNE-78yy-4oXS-UcS3-JOej2h [root@compute-192-168-2-190 opt]# lvcreate -L 20G -n iscsi lvmpool Logical volume "iscsi" created [root@compute-192-168-2-190 opt]# lvscan ACTIVE '/dev/lvmpool/iscsi' [20.00 GiB] inherit
以iqn开头表示iscsi qualified name(iscsi合格名称)如同多个磁盘一样,target也可以有多个,每个在同一个target上的磁盘我们可以第一个逻辑单位编号。
iqn.yyy-mm.<reversed domain name>:identifier
iqn.年-月.网域名的反转写法:这个分享target的名称
iqn.2015-03.compute-192-168-2-190:youyun
配置文件中除了backing-store项外还有其他可选配置项:
vim /etc/tgt/targets.conf # Sample target with one LUN only. Defaults to allow access for all initiators: <target iqn.2015-03.compute-192-168-2-190:youyun> backing-store /dev/sdb5 backing-store /opt/cloud.img backing-store /dev/lvmpool/iscsi </target>
设定装置时,如果你的整颗磁盘是全部被拿来当 iSCSI 分享之用,
那么才能够使用 direct-store 。不过,根据网络上的其他文件,
似乎说明这个设定值有点危险的样子。所以,基本上还是建议单纯使用模拟的 backing-store 较佳
如果你想要限制能够使用这个 target 的客户端来源,才需要填写这个设定值。基本上,不用设定它 (代表所有人都能使用的意思), 因为我们后来会使用 iptables 来规范可以联机的客户端嘛!
在预设的情况下,tgtd 会使用快取来增快速度。不过,这样可能会有遗失数据的风险。所以,如果你的数据比较重要的话,或许不要使用快取,直接存取装置会比较妥当一些。
注:initiator-addrress以及下面的几项要缩进一格(如果正常也不用缩进)
<target iqn.2015-03.compute-192-168-2-190:youyun> backing-store /dev/sdb5 backing-store /opt/cloud.img backing-store /dev/lvmpool/iscsi initiator-address 192.168.2.0/24 #只允许192.168.2.0/24这个网段的访问 incominguser usyouyun psyouyun #用户名 密码 write-cache off #关掉缓存 </target>
[root@compute-192-168-2-190 ~]# chkconfig tgtd on
[root@compute-192-168-2-190 ~]# netstat -tlunp| grep tgt
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 27625/tgtd
tcp 0 0 :::3260 :::* LISTEN 27625/tgtd
[root@compute-192-168-2-190 ~]# tgt-admin --show
Target 1: iqn.2015-03.compute-192-168-2-190:youyun
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:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 21475 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/lvmpool/iscsi
Backing store flags:
LUN: 2
Type: disk
SCSI ID: IET 00010002
SCSI SN: beaf12
Size: 107381 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sdb5
Backing store flags:
LUN: 3
Type: disk
SCSI ID: IET 00010003
SCSI SN: beaf13
Size: 107374 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /opt/cloud.img
Backing store flags:
Account information:
usyouyun
ACL information:
192.168.2.0/24
[root@compute-192-168-2-190 ~]# iptables -I INPUT -p tcp -s 192.168.2.0/24 --dport 3260 -j ACCEPT [root@compute-192-168-2-190 ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] [root@compute-192-168-2-190 ~]# iptables-save | grep 3260 -A INPUT -s 192.168.2.0/24 -p tcp -m tcp --dport 3260 -j ACCEPT
/etc/iscsi/iscsid.conf:主要的配置文件,用来连结到 iSCSI target 的设定;所以 iscsid 先启动后,才能启动这个服务。为了防呆,所以 /etc/init.d/iscsi 已经写了一个启动指令, 启动 iscsi 前尚未启动 iscsid ,则会先呼叫 iscsid 才继续处理 iscsi, iscsid.conf 里面大概只要设定好登入 target 时的帐密即可, 其他的 target 搜寻、设定、取得的方法都直接使用 iscsiadm 这个指令来完成。 由于 iscsiadm 侦测到的结果会直接写入 /var/lib/iscsi/nodes/ 当中, 因此只要启动 /etc/init.d/iscsi 就能够在下次开机时,自动的连结到正确的 target
/sbin/iscsid:启动 iSCSI initiator 的主要服务程序;
/sbin/iscsiadm:用来管理 iSCSI initiator 的主要设定程序;
/etc/init.d/iscsid:让本机模拟成为 iSCSI initiater 的主要服务;
/etc/init.d/iscsi:在本机成为 iSCSI initiator 之后,启动此脚本,让我们可以登入 iSCSI target。
如果target端设置了,账户和密码则要在client端修改相关的配置项
[root@compute-192-168-2-190 ~]# vim /etc/iscsi/iscsid.conf node.session.auth.username = usyouyun node.session.auth.password = psyouyun discovery.sendtargets.auth.username = usyouyun discovery.sendtargets.auth.password = psyouyun [root@compute-192-168-2-190 ~]# chkconfig iscsid on [root@compute-192-168-2-190 ~]# chkconfig iscsi on
这里假设不知道target名字
iscsiadm -m discovery -t sendtargets -p IP:port
选项与参数:
-m discovery :使用侦测的方式进行 iscsiadmin 指令功能;
-t sendtargets :透过 iscsi 的协议,侦测后面的设备所拥有的 target 数据
-p IP:port :就是那部 iscsi 设备的 IP 与埠口,不写埠口预设是 3260 啰!
example:[root@compute-192-168-2-190 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.2.190:3260
Starting iscsid: [ OK ]
192.168.2.190:3260,1 iqn.2015-03.compute-192-168-2-190:youyun
[root@compute-192-168-2-190 ~]# ll -R /var/lib/iscsi/nodes/
/var/lib/iscsi/nodes/:
total 4
drw-------. 3 root root 4096 Mar 20 23:58 iqn.2015-03.compute-192-168-2-190:youyun
/var/lib/iscsi/nodes/iqn.2015-03.compute-192-168-2-190:youyun:
total 4
drw-------. 2 root root 4096 Mar 20 23:58 192.168.2.190,3260,1
/var/lib/iscsi/nodes/iqn.2015-03.compute-192-168-2-190:youyun/192.168.2.190,3260,1:
total 4
-rw-------. 1 root root 1903 Mar 20 23:58 default
因为我们的 initiator 可能会连接多部的 target 设备,因此,我们得先要瞧瞧目前系统上面侦测到的 target 有几部,然后再找到我们要的那部 target 来进行登入的作业。不过,如果你想要将所有侦测到的 target 全部都登入的话, 那么整个步骤可以再简化:
根据前一个步骤侦测到的资料,装载(登陆)全部的 target(只要重启iscsi即可他会自动登陆/var/lib/iscsi/nodes/下的所有侦测到的target)
[root@compute-192-168-2-190 ~]# service iscsi restart[root@compute-192-168-2-190 ~]# fdisk -l | grep 'Disk /dev/s'显示目前系统上所有的target信息
Disk /dev/sda: 500.1 GB, 500107862016 bytes
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
Disk /dev/sdd: 107.4 GB, 107380965888 bytes
Disk /dev/sde: 107.4 GB, 107374182400 bytes
[root@compute-192-168-2-190 ~]# iscsiadm -m node -T iqn.2015-03.compute-192-168-2-190:youyun --login
Logging in to [iface: default, target: iqn.2015-03.compute-192-168-2-190:youyun, portal: 192.168.2.190,3260] (multiple)
Login to [iface: default, target: iqn.2015-03.compute-192-168-2-190:youyun, portal: 192.168.2.190,3260] successful.
#iscsiadm -m node -T targetname --logout退出 --logout
[root@compute-192-168-2-190 ~]# iscsiadm -m node -T iqn.2015-03.compute-192-168-2-190:youyun --logout注:这里虽然已经退出了,但是client和target的连接还是存在的,只是看不到target提供的设备而已
Logging out of session [sid: 1, target: iqn.2015-03.compute-192-168-2-190:youyun, portal: 192.168.2.190,3260]
Logout of [sid: 1, target: iqn.2015-03.compute-192-168-2-190:youyun, portal: 192.168.2.190,3260] successful.
[root@compute-192-168-2-190 ~]# iscsiadm -m node选项与参数:
192.168.2.190:3260,1 iqn.2015-03.compute-192-168-2-190:youyun
#iscsiadm -m node -o [delete|new|update] -T targetname
--logout :就是注销 target,但是并没有删除 /var/lib/iscsi/nodes/ 内的数据
-o delete:删除后面接的那部 target 链接信息 (/var/lib/iscsi/nodes/*)
-o update:更新相关的信息
-o new :增加一个新的 target 信息。
[root@compute-192-168-2-190 ~]# iscsiadm -m node -o delete -T iqn.2015-03.compute-192-168-2-190:youyun
[root@compute-192-168-2-190 ~]# service iscsi restart
Stopping iscsi: [ OK ]
[root@compute-192-168-2-190 ~]# iscsiadm -m node
iscsiadm: No records found
tgt-admin --show#如果想修改的话,到initiator节点上修改/etc/iscsi/initiatorname.iscsi文件即可。
[root@compute-192-168-2-190 ~]# tgt-admin --show
Target 1: iqn.2015-03.compute-192-168-2-190:youyun
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 3
Initiator: iqn.1994-05.com.redhat:4a02ab4ecc #注意initiator的名字是redhat,这里可以不用管它,对服务和使用是没有影响的
[root@compute-192-168-2-190 ~]# tgt-admin --show
tgtadm: can't send the request to the tgt daemon, Transport endpoint is not connected