What is ISCSI
iSCSI是由IEETF开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。
Why need iSCSI
- 解决了SCSI协议在设备数目和连接距离上的限制;
- 为SAN提供了一种高性价比的传输协议;
- 与各种存储管理结合起来,提供灵活的备份、镜像、灾难恢复以及次级存储解决方案;
iSCSI 的存储连接方式
iSCSI HBA卡连接方式(硬iSCSI):
在主机上安装专业的iSCSI HBA适配卡,从而实现主机与交换机之间、主机与存储之间的
高效数据交换。传输性能好,价格高。以太网卡+initiator软件方式(软iSCSI):
服务器、工作站等主机使用标准的以太网卡,通过以太网线直接与以太网交换机连接,
iSCSI存储也通过以太网线连接到以太网交换机上,或直接连接到主机的以太网卡上。
在主机上安装Initiator软件,Initiator软件可以将以太网卡虚拟为iSCSI卡,接受和发
送iSCSI数据报文,从而实现主机和iSCSI设备之间的iSCSI协议和TCP/IP协议传输功能。
Compile and install
The iSCSI target consists of a kernel module (iscsi_trgt.ko) , daemon
(ietd) and control utility (ietadm).
- Compile
- build all:
make
- build component:
make kernel
ormake usr
- install
- Install all:
make [KSRC=<kernel-src>] install
Install individual components:
make [KSRC=
] install-kernel - for kernel module
make [KSRC=] install-usr - for daemon and utility
make [KSRC=] install-init - for init.d script
make [KSRC=] install-etc - for config files
ietd and ietadm will be install in /usr/sbin
iscsi-target was install in /etc/init.d/
ietd.conf and initiators.{allow,denny} were install in /etc
start stop
/etc/init.d/iscsi-target start
/etc/init.d/iscsi-target stop
iet基本配置和命令
iet主要配置
主要包括以下配置文件
/etc/ietd.conf :iet的主配置文件
/etc/initiators.allow:控制initiator对target的访问权限
/etc/initiators.deny:控制initiator对target的访问权限
/etc/targets.allow:控制不同target的被访问权限
通过/etc/ietd.conf, iet实现iSCSI Target的基本功能.
iSCSI Target的命名,命名在同一子网内应该是唯一。
Target target名称
其中:
target 名称:是iSCSI Target名称。一般iSCSI Target命名采用
“iqn.yyyy-mm.<reversed domain name>: identifier 识别代号”的格式。
将块设备、文件、LVM卷、RAID卷作为块设备映射给iSCSI initiator使用。
Lun <lunID> Path=<device>,Type=fileio|blockio[,IOMode=(wb|ro)]
其中:
<lunID>:是Lun的编号从0开始,最大2^14-1。
Path=<device>:指定块设备。可以使用dd命令生成一个文件。
Type=fileio|blockio:指定块设备类型,分区及dd命令生成的文件使用fileio类型;
LVM卷、RAID卷使用blockio类型。
IOMode=(wb|ro):指定iSCSI initiator允许的操作,wb表示可读写;ro表示只读。
配置完后重起iscsi-target,initiator即可连接使用.
iet其它配置
通过命令方式配置的iSCSI Target在重启后会失效。
添加一个新的Target。其中[id]为数字却必须唯一,Name需自定义,也要唯一。
ietadm --op new --tid=[id] --params Name=iqn.zqin.example
添加一个新的lun。其中[id]必须是一个已存在的tid号,[lun]从0开始。
ietadm --op new --tid=[id] --lun=[lun] --params Path=/path/exported/file,Type=fileio
iet常用命令
查看当前iSCSI Target清单。
cat /proc/net/iet/volume
查看当前服务器iSCSI Target服务以及连接状态命令
cat /proc/net/iet/sessions
停止某个Target 的某个 Connection 的连接。
ietadm --op delete --tid=2 --sid=562950876233792 --cid=1 && ietadm --op delete --tid=2
停止所有Target 的连接。
ietadm --op delete
删除某个Target (已经没有 Session 连接的)。
ietadm --op delete --tid= 1
完整操作如下:
[root@ ~]# dd if=/dev/zero of=/root/iscsi.disk bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.30143 s, 115 MB/s
[root@ ~]# echo "Target iqn.2014-06.com.matrix:storage.515.disk" >> /etc/ietd.conf
[root@ ~]# echo "Lun 0 Path=/root/iscsi.disk,Type=fileio">>/etc/ietd.conf
[root@ ~]# echo "Alias lun0">>/etc/ietd.conf
[root@ ~]# cat /etc/ietd.conf
Target iqn.2014-06.com.matrix:storage.515.disk
Lun 0 Path=/root/iscsi.disk,Type=fileio
Alias lun0
[root@ ~]# echo "iqn.2014-06.com.matrix:storage.515.disk 172.16.*.*">> /etc/initiators.allow
[root@ ~]# cat /etc/initiators.allow
iqn.2014-06.com.matrix:storage.515.disk 172.16.*.*
[root@ ~]# netstat -tulpn | grep 3260
tcp 0 0 172.16.110.10:3260 0.0.0.0:* LISTEN 12147/ietd
[root@ ~]# cat /proc/net/iet/session
tid:1 name:iqn.2014-06.com.matrix:storage.515.disk
[root@ ~]# cat /proc/net/iet/volume
tid:1 name:iqn.2014-06.com.matrix:storage.515.disk
lun:0 state:0 iotype:fileio iomode:wt blocks:2097152 blocksize:512 path:/root/iscsi.disk
[root@ ~]# /etc/init.d/iscsi-target restart
Stopping iSCSI Target: [ OK ]
Starting iSCSI Target: FATAL: Error inserting crc32c_intel (/lib/modules/2.6
.32-279.el6.x86_64/kernel/arch/x86/crypto/crc32c-intel.ko): No such device
[ OK ]
上面的错误是因为centos 6.3, kernel 2.6.32-279.el6.x86_64, 该版本已不需要
crc32c_intel.ko模块,可以过屏蔽脚本/etc/init.d/iscsi-target
中的modprobe -q crc32
来解决该错误信息。
[root@ ~]# /etc/init.d/iscsi-target restart
Stopping iSCSI Target: [ OK ]
Starting iSCSI Target: [ OK ]
[root@ ~]# service iscsi-target status
iSCSI Target (pid 12147) is running...
iSCSI initiator
安装 yum install iscsi-initiator-utils
iscsiadm是基于命令行的iscsi管理工具,提供对iscsi节点、会话、连接以及发现记录的操作。
涉及的主要操作如下:
- 发现iscsi存储: iscsiadm -m discovery -t st -p ISCSI_IP
- 查看iscsi发现记录 iscsiadm -m node
- 删除iscsi发现记录 iscsiadm -m node -o delete -T LUN_NAME -p ISCSI_IP
- 登录iscsi存储 iscsiadm -m node -T LUN_NAME -p ISCSI_IP -l
- 登出iscsi存储 iscsiadm -m node -T LUN_NAME -p ISCSI_IP -u
- 登录全部iscsi存储 iscsiadm -m node -L all
- 登出全部iscsi存储 iscsiadm -m node -U all
- 查看session iscsiadm -m session
设置CHAP, vim /etc/iscsi/iscsid.conf, 或这使用下面的命令设置:
[root@localhost ~]# iscsiadm -m node -T iqn.2007-10.lio.com:dg3.liolv1 -p 172.16.130.100 -o update –name node.session.auth.authmethod –value=CHAP
[root@localhost ~]# iscsiadm -m node -T iqn.2007-10.lio.com:dg3.liolv1 -p 172.16.130.100 -o update –name node.session.auth.username –value=alan
[root@localhost ~]# iscsiadm -m node -T iqn.2007-10.lio.com:dg3.liolv1 -p 172.16.130.100 -o update –name node.session.auth.password –value=123555
[root@localhost ~]# iscsiadm -m node -T iqn.2007-10.lio.com:dg3.liolv1 -p 172.16.130.100 –login
注意:
要先使用发现discovery,然后才能登陆login,否则会出现错误“iscsiadm: No records found”
下面是详细的操作:(注意:括号内容为注释说明)
[root@localhost dennis]# fdisk -l
Disk /dev/sda: 149 GiB, 160000000000 bytes, 312500000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00007f87
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 312498175 155736064 8e Linux LVM
(...此处省略不必要的内容...)
[root@localhost dennis]# iscsiadm -m discovery -t st -p 172.16.110.10
172.16.110.10:3260,1 iqn.2014-06.com.matrix:storage.515.disk
[root@localhost dennis]# iscsiadm -m node -T iqn.2014-06.com.matrix:storage.515.disk -p 172.16.110.10 -l
Logging in to [iface: default, target: iqn.2014-06.com.matrix:storage.515.disk, portal: 172.16.110.10,3260] (multiple)
Login to [iface: default, target: iqn.2014-06.com.matrix:storage.515.disk, portal: 172.16.110.10,3260] successful.
[root@localhost dennis]# fdisk -l
Disk /dev/sda: 149 GiB, 160000000000 bytes, 312500000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00007f87
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 312498175 155736064 8e Linux LVM
(...此处省略不必要的内容...)
(成功连接后,多出一块磁盘/dev/sdb,大小刚好是前面dd创建的1G文件)
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@localhost dennis]# iscsiadm -m node -T iqn.2014-06.com.matrix:storage.515.disk -p 172.16.110.10 -u
Logging out of session [sid: 1, target: iqn.2014-06.com.matrix:storage.515.disk, portal: 172.16.110.10,3260]
Logout of [sid: 1, target: iqn.2014-06.com.matrix:storage.515.disk, portal: 172.16.110.10,3260] successful.
[root@localhost dennis]#
连接成功后,iet端显示如下:
[root@ ~]# cat /proc/net/iet/session
tid:1 name:iqn.2014-06.com.matrix:storage.515.disk
sid:562949990973952 initiator:iqn.1994-05.com.redhat:7d366003913
cid:0 ip:172.16.50.39 state:active hd:none dd:none tip:172.16.110.10
第一次连接时,磁盘是还没有分区化, 磁盘分区:
[root@localhost dennis]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.24.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xf1eb4d09.
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): g
Created a new GPT disklabel (GUID: 22C002F1-D9F7-4E4C-8F89-9EFEBB971A1D).
Command (m for help): n
Partition number (1-128, default 1): 1
First sector (2048-2097118, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097118, default 2097118):
Created a new partition 1 of type 'Linux filesystem' and of size 1023 MiB.
Command (m for help): p
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 22C002F1-D9F7-4E4C-8F89-9EFEBB971A1D
Device Start End Size Type
/dev/sdb1 2048 2097118 1023M Linux filesystem
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost dennis]# fdisk -l
Disk /dev/sda: 149 GiB, 160000000000 bytes, 312500000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00007f87
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 312498175 155736064 8e Linux LVM
(...此处省略不必要的内容...)
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 22C002F1-D9F7-4E4C-8F89-9EFEBB971A1D
Device Start End Size Type
/dev/sdb1 2048 2097118 1023M Linux filesystem
分区完毕后,对磁盘该分区进行格式化:
[root@localhost dennis]# mkfs.ext3 /dev/sdb1
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 261883 blocks
13094 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
格式化完毕后,进行挂载,然后就可以像对待本地目录一样进行相关操作了(拷贝、删除等)
注:下一次登陆iscsi卷后,不用进行分区、格式化了,直接挂载就可以使用了
[root@localhost dennis]# mkdir /mnt/iscsi
[root@localhost dennis]# mount /dev/sdb1 /mnt/iscsi
[root@localhost dennis]# ls /mnt/iscsi/
lost+found
[root@localhost dennis]# cp Downloads/VirtualBox-4.3-4.3.12_93733_fedora18-1.x86_64.rpm /mnt/iscsi/
[root@localhost dennis]# ls -lh /mnt/iscsi/
total 74M
drwx------. 2 root root 16K Jun 27 12:10 lost+found
-rw-r--r--. 1 root root 74M Jun 27 12:13 VirtualBox-4.3-4.3.12_93733_fedora18-1.x86_64.rpm
[root@localhost dennis]#
Initiator for windows
login with batch script
@echo off
for /l %%j in (1,1,2) do (
for /l %%k in (0,1,49) do (
iscsicli logintarget iqn.2007-10.cbxa.com:r5%%j.aa%%k T 192.168.166.100 3260 * * * * * * * * * * * * * 0
)
)
pause
使用用户名(aa0~aa49)和密码(123456789012)登陆:
iscsicli logintarget iqn.2007-10.cbxa.com:r5%%j.aa%%k T 192.168.166.100 3260 * * * * * * * * * aa%%k 123456789012 1 * 0
Protocol
iSCSI initiator与iSCSI target:
- UNH iSCSI
- iSCSI Enterprise Target
- intel iSCSI
- Microsoft iSCSI Initiator 2.0X
- linux-iscsi(project
- Open iSCSI
- Microsoft Storage 2003
- StarWind
FAQ
防火墙链接限制,外界无法访问Target服务器3260端口。
请在防火墙上手动放开3260端口,或者有条件的话干脆关闭防火墙。
更改防火墙配置并重启生效
vi /etc/sysconfig/iptables
server iptable restartservice iptables stop
setenforce 0共享的路径都可以有哪些?
在IET的技术文档中规定,以下几种路径是被支持的:1)一个完整的 block 磁盘,比如/dev/sdb 。 2)一个RAID设备或者是一个LVM. 3)一个虚拟的镜像文件, 如dd使用创建.
“iscsiadm:No portals found”.
- 可能服务没有启动:重启iscsid服务,
service iscsi start
- 可能存储端没有允许当前ip访问:
- 可能服务没有启动:重启iscsid服务,
Reference
- iSCSI学习总结
- ★★★如何正确使用iSCSI Enterprise Target
- iSCSI协议解析★★★
- iSCSI技术白皮书★★★
- iSCSI存储技术全攻略
- Linux下iSCSI安装步骤
- ET - iSCSI Enterprise Target
- 存储基础知识学习笔记
- 解析iSCSI存储系统的未来发展
- CentOS5 iSCSI部署
- Design of the ISCSI Protocol
- iSCSI 二 – 搭建基于iSCSI的IP SAN存储系统
- ISCSI Target的常用配置和常用操作-备忘
- Linux下应用tgtadm构建iSCSI Target–SAN
- 详解Linux下挂载和格式化虚拟磁盘