linux scsi程序,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需要的2个角色:

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 1,和自动创建的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.168.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 strongly 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设备分区不能同时让不同客户端同时写入数据,否则数据文件会崩溃。

相关资源:iscsi协议详解
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页