一,概述
SCSI最初是专门为小型计算机系统设计的I/O技术,但由于其结构和协议本身的优势,被广泛应用于实现DAS以及SAN底层技术。
SCSI的定义:
SCSI: Small Computer System Interface
SCSI是一种I/O技术
SCSI并行规范I/O总线及相关协议
SCSI数据传输以块的形式进行
SCSI的特点:
设备无关性
多设备并行
高带宽
低系统开销
SCSI总线:
SCSI总线是SCSI在设备之间传输数据的通道
SCSI又称总线SCSI通道
SCSI终结器:
SCSI终结器位于SCSI总线的末端用于减少相互影响的信号,并保持SCSI链条上的电压恒定
SCSI链的最后一个SCSI终结器需要设备
SCSI链上的中间设备不需要使用终结器
SCSI控制器:
SCSI总线通过SCSI控制器与硬盘等设备通信
SCSI逻辑上,控制器可分为任务管理单元和多个逻辑单元(LU)
SCSI ID:
一个独立的SCSI根据不同的规格,总线可以支持8或16条SCSI设备和设备的编号需要通过SCSI ID控制系统中的每个系统SCSI设备必须有自己唯一的设备SCSI ID,SCSI ID事实上,这些设备的地址很窄SCSI总线最多允许8条宽度SCSI最多允许16条不同的总线SCSI与设备连接。
LUN:
LUN(Logical Unit Number,逻辑单元号)是一种使用和描述更多设备和对象的方法SCSI ID上最多有32个LUN,一个LUN对应逻辑设备。
SCSI连接图:
SCSI通信模式:
二,linux下ISCSI的实现:
ISCSI 是基于TCP/IP传输封装的SCSI数据包的块级共享也是C/S架构模型,服务器端提供客户端所需的存储设备,客户端可以作为主机上的存储设备进行分区和格式。
实现ISCSI两个角色:
iSCSI target(server)
存储资源所在的iSCSI服务器被称为服务器target”。iSCSI target通常是硬盘存储设备。目前,大多数主流操作系统都提供合作iSCSI target使用的客户端软件initiator。
iSCSI initiator(client)
initiator就是iSCSI传输服务端。initiator它们都有共同的目的,即作为一个目的SCSI总线的适配器取代了物理适配器SCSI设备(类似硬盘或磁带)。iSCSI initiator通过IP网络传输SCSI命令。
实验环境
192.168.30.115 CentOS 6.4 x86_64 target server
192.168.30.116 CentOS 6.4 x86_64 initiator client
192.168.30.117 CentOS 6.4 x86_64 initiator client
首先在target server上安装scsi-target-utils
[root@tgtd ~]# yum -y install scsi-target-utils
[root@tgtd ~]# cp /etc/tgt/targets.conf /etc/tgt/targets.conf.bak
编辑target配置文件,定义target
[root@tgtd ~]# vi /etc/tgt/targets.conf
# 添加以下内容
backing-store /dev/sdb
initiator-address 192.168.30.0/24
incominguser luojianlong mypass
[root@tgtd ~]# service tgtd restart
backing-store:指定后端共享的磁盘编号
initiator-address:授权客户访问网络地址
incominguser:设置登录用户的帐户密码
启动target并查看
[root@tgtd ~]# tgtadm -L iscsi -m target -o show
Target 1: iqn.2014-04.com.luojianlong: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: 2048 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
luojianlong
ACL information:
192.168.30.0/24
看新生成target 自动创建LUN 1.创建用户认证信息
登录客户端,安装scsi-initiator-utils
[root@localhost ~]# yum -y install iscsi-initiator-utils
修改客户端配置文件:
[root@localhost ~]# vi /etc/iscsi/iscsid.conf
# 启用以下项目
node.session.auth.authmethod = CHAP
node.session.auth.username = luojianlong
node.session.auth.password = mypass
[root@localhost ~]# service iscsid restart
使用客户端iscsiadm工具发现设备
[root@localhost ~]# iscsiadm -m discovery -t st -p 192.168.30.119
192.168.30.119:3260,1 iqn.2014-04.com.luojianlong:target1
[root@localhost ~]# iscsiadm -m node -T iqn.2014-04.com.luojianlong:target1 -p 192.168.30.119:3260 -l
Logging in to [iface: default, target: iqn.2014-04.com.luojianlong:target1, portal: 192.168.30.119,3260] (multiple)
Login to [iface: default, target: iqn.2014-04.com.luojianlong:target1, portal: 192.18.30.119,3260] successful.
iscsiadm的命令汇总:
发现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
删除此前登录生成的数据:
rm -rf /var/lib/iscsi/node/*
rm -rf -rf /var/lib/iscsi/send_targets/*
测试设备是否可用
[root@localhost ~]# fdisk -l /dev/sd[a-z]
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 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: 0x000b12a1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 3917 30944256 8e Linux LVM
Disk /dev/sdb: 2147 MB, 2147483648 bytes
67 heads, 62 sectors/track, 1009 cylinders
Units = cylinders of 4154 * 512 = 2126848 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xd498549c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's labelly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4):
Value out of range.
Partition number (1-4): 1
First cylinder (1-1009, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1009, default 1009): +1G
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
67 heads, 62 sectors/track, 1009 cylinders
Units = cylinders of 4154 * 512 = 2126848 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd498549c
Device Boot Start End Blocks Id System
/dev/sdb1 1 506 1050931 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# mke2fs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65808 inodes, 262732 blocks
13136 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=272629760
9 block groups
32768 blocks per group, 32768 fragments per group
7312 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mount /dev/sdb1 /mnt/
[root@localhost ~]# cp /etc/fstab /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
fstab lost+found
[root@localhost mnt]# cat fstab
#
# /etc/fstab
# Created by anaconda on Thu Jan 9 23:01:31 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=db4bad23-32a8-44a6-bdee-1585ce9e13ac /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
注意:同一个iscsi设备分区不能同时让不同客户端同时写入数据,否则数据文件会崩溃。