资讯详情

SCSI存储详解以及Linux下ISCSI的实现

一,概述

SCSI最初是专门为小型计算机系统设计的I/O技术,但由于其结构和协议本身的优势,被广泛应用于实现DAS以及SAN底层技术。

SCSI的定义:

SCSI: Small Computer System Interface

SCSI是一种I/O技术

SCSI并行规范I/O总线及相关协议

SCSI数据传输以块的形式进行

SCSI的特点:

设备无关性

多设备并行

高带宽

低系统开销

SCSI总线:

SCSI总线是SCSI在设备之间传输数据的通道

SCSI又称总线SCSI通道

0818b9ca8b590ca3270a3433284dd417.png

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连接图:

0818b9ca8b590ca3270a3433284dd417.png

SCSI通信模式:

0818b9ca8b590ca3270a3433284dd417.png

二,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设备分区不能同时让不同客户端同时写入数据,否则数据文件会崩溃。

标签: 3917连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台