认识ISCSI

本文深入解析iSCSI协议,涵盖其工作原理、优势、基本概念,以及如何利用iSCSI在IP网络上实现SCSI协议的数据传输。同时,介绍了iSCSI的发现机制、设备特性,并提供了tgtadm和iscsiadm的使用指南。

原文链接:https://blog.youkuaiyun.com/nirendao/article/details/82928761

ISCSI协议

iSCSI initiator和target的核心功能都在内核中,无须人工干预;而要人工干预的大约是这么几件事:

  1. 建立iSCSI Initiator到iSCSI target的session(虽也可自动发现,但还是要有些配置)

  2. 建立LUN,以便位于Initiator端的系统进行块设备的挂载

  3. 将来不需要的时候,可删除1和2中建立的LUN和iSCSI连接

至于应用程序将读写块设备,大致路径是:应用程序 -> 系统调用 -> 文件系统 -> 内核 -> iSCSI相应模块(initiator or target) -> 网络协议栈 -> 对端

1. SCSI协议

SCSI: Small Computer System Interface,SCSI最初是一种专门为小型计算机系统设计的I/O技术,但由于其架构和协议自身的优点,后被广泛应用于实现DAS以及作为SAN的底层技术。

所有的SCSI设备是通过一根总线将其连接起来,这个线就叫做SCSI总线。SCSI总线是SCSI设备之间传输数据的通路。SCSI总线又被称作SCSI通道。SCSI总线最终会连接到SCSI控制器上,SCSI控制器也称为主机适配器(HBA),它控制着SCSI总线上所有的设备与计算器之间的通信。控制器既可以是插入可用插槽的卡,也可以内置在主板上。

(注:SCSI连线长度一般不超过25米,挂载的总设备数不超过16个(除去SCSI控制器,就是15个))

因此,SCSI控制器和SCSI设备的连接方式如下图所示:

在SCSI总线末端上有一个终结器,用来减小相互影响的信号,维持SCSI链上的电压恒定。

1.1 SCSI基本概念介绍

SCSI ID
一个独立的SCSI总线按照规格不同可以支持8或16个SCSI目标设备(可以称为Target),每个SCSI目标设备都必须具有唯一的标识符(ID)才能正常工作。SCSI ID实际上就是这些目标设备的地址。

窄SCSI总线最多允许8个、宽SCSI总线最多允许16个不同的SCSI目标设备和它进行连接。但是一般SCSI控制器需要使用一个ID,因此,能使用的ID理论比实际要少一个。

LUN
在每一个SCSI目标设备(Target)下还可以连接多个逻辑设备(如磁盘,卷组等等),为了让系统区分每一个逻辑设备,因此每一个逻辑设备都有一个LUN(Logical Unit Number)来标识自己。每个SCSI ID最多有32个LUN,默认从0开始(不过0被占用了),每一个LUN对应着一个逻辑设备。

SCSI通信模型
SCSI是一个C/S架构,其中client端叫做initiator(启动器),服务器端叫做target(目标设备)。SCSI协议采用了分层的思想,SCSI协议簇从上向下可以分为四层:设备特定命令集,共享命令集,传输协议,互联网层。并且SCSI的数据传输是以块的方式进行的。

CDB (命令描述块)
SCSI的命令以及参数是填充在一定长度的数据块内传输的。这个数据块就是命令描述块,即CDB.

在这里插入图片描述

典型的SCSI系统
在这里插入图片描述

2. iSCSI协议

虽然SCSI控制器可以连接多个存储设备,形成自己的网络,但是它只能与直接相连的存储设备进行通信,只能在在局域网内部使用,不能再以太网上共享。因此,对于SCSI协议来说,传输数据的距离是非常有限的。因此,人们为了利用SCSI协议长距离的传输数据,于是就研发了一种新的技术,就是iSCSI协议。另有一个重要的原因是,基于Fiber Channel的FC-SAN比较昂贵,而基于iSCSI的IP-SAN就便宜很多。
iSCSI协议是一种新的存储技术,它是将SCSI接口与以太网(Ethernet)技术结合起来工作的,简单的说iSCSI协议是将用户的请求转换成SCSI规则编码,然后再将这些数据封装在IP包中以便在以太网中进行传输的协议。
在这里插入图片描述

2.1 iSCSI协议的功能

iSCSI:internet Small Computer System Interface的缩写,即Internet小型计算机接口。iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行 SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。它是基于TCP/IP协议的,用来建立和管理IP存储设备、主机和客户机之间的相互连接,并创建SAN。这样使得SAN利用SCSI协议应用在高速数据传输网络成为可能。这种传输是以块级别的方式在各个存储设备上进行的。

2.2 iSCSI的结构

由于SCSI协议是一个C/S架构,因此iSCSI协议也是一个C/S结构,其中client是initiator,server端为target。iSCSI协议的主要功能是利用TCP/IP网络,在主机系统(可称为initiator)和目标存储设备(称为target)之间进行大量的数据封装和可靠传输过程。此外,iSCSI协议还将SCSI协议封装在IP网络上,并且运行在TCP上。
因此,ISCSI协议的协议栈为下图所示:

2.3 iSCSI协议的工作原理

当iSCSI主机发起数据读写操作后,操作系统会生成一个SCSI指令集,然后该SCSI指令集在iSCSI initiator端被封装成iSCSI消息包,并通过TCP/IP网络传输到存储区域,当存储区域的iSCSI target收到iSCSI消息包时会将其解开,读取其中的SCSI指令,然后再将其SCSI指令传送给SCSI设备执行其指令。当SCSI指令被执行后,返回的数据经过SCSI设备传送给iSCSI target时被封装为iSCSI的响应PDU,然后再通过TCP/IP网络传输给iSCSI initiator端,iSCSI initiator解开其iSCSI PDU包,读取其中的SCSI响应内容,并将其提交给操作系统进行处理,然后操作系统在将其处理后的内容返回给应用程序。
在这里插入图片描述

2.4 iSCSI的优点

iSCSI最大的优点就是节约成本,利用iSCSI协议构建一个存储网络,除了需要存储设备,交换机、线缆还有以太网接口以外,基本就不需要其他的设备了,只需要在现有的网络上安装iSCSI就可以实现构建一个比较大的存储网络了。

2.5 iSCSI基本概念

iSCSI客户端 (iSCSI Initiator)

iSCSI客户端为iSCSI initiator,这是I/O操作的发起者。在RedHat Linux系统中可以通过软件来模拟,需要安装iSCSI设备驱动。如iscsi-initiator-utils.rpm
iSCSI initiator具有的特性:
a) 既然是I/O操作的发起者,需要通过发现过程请求远端快设备。
b) 它可以与target进行持久连接
c) Linux中可以通过软件方式来实现

iSCSI服务器端 (iSCSI Target)

iSCSI服务器端为iSCSI target,这是I/O操作的执行者。在RedHat Enterprise Linux中可以使用scsi-target-utils软件包来模拟实现。
iSCSI target端具有的特性:
a) 需要导出一个或多个块设备供启动者(initiator)使用
b) 可以通过硬件和软件的方式来实现

iSCSI target设备名称

iSCSI target名称必须是全球唯一的,其格式为:

iqn.<yyyy-mm>.<tld.domain.some.host>[:<identifier>]
 

iqn:iSCSI target名称必须是以iqn开头的 

yyyy-mm:表示的是时间 

tld.domain.some.host:这个表示的是一个反过来写的域名 

identifier:这个可以是任意字符串
 # 如:iqn.2015-03.com.xsl.www:storge.disk1

逻辑单元号LUN

LUN ID由iSCSI目标设备(Target)分配。iSCSI 启动端(Initiator)设备当前支持在每个目标设备(Target)中导出最多256个LUN。即最大支持16个target。
对于LUN,比较通俗的理解就是磁盘分区、LVM卷组、RAID等等。

Target 即“储存设备”(Storage Device),也就是存放数据的硬盘(以硬盘阵列居多)。在使用iSCSI时,会在 iSCSI 储存设备上去建立 LUN(Logical Unit Number)来提供给具备 iSCSI Initiator 功能的主机来存取 数据的。LUN 好比是个“逻辑单位磁碟”,物理上通常是由数个实体磁碟( RAID 或 LVM 技术的技术实现)所组成。

2.6 iSCSI的发现机制

iSCSI发起端为了和iSCSI目标端建立iSCSI会话,initiator需要知道target的 IP地址,TCP端口号和名字 三个信息。iSCSI发现的目的是为了让iSCSI发起端获取一条到iSCSI目标端的通路。iSCSI有三种发现机制:

a. 静态配置

在iSCSI发起端已经知道iSCSI目标端的IP地址TCP端口号和名字信息时,iSCSI发起端不需要执行发现。iSCSI发起端直接通过IP地址和TCP端口来建立TCP连接,使用iSCSI目标端的名字来建立iSCSI会话。这种发现机制比较适合比较小的iSCSI体系结构

b. SendTarget发现

在iSCSI发起端知道iSCSI目标端的IP地址和TCP端口的情况下,iSCSI使用IP地址和TCP端口号建立TCP连接后建立发现对话。iSCSI发起端发送SendTarget命令查询网络中的存在的iSCSI信息。这种方法主要用于网关设备,iSCSI发起端被静态配置连接到指定的iSCSI设备。iSCSI发起端和iSCSI网关设备建立对话并发送SendTarget请求给iSCSI网关设备。iSCSI网关设备返回一系列和它相连的ISCSI目标端的信息。iSCSI发起端选择一个目标端来建立对话。

c. 零配置发现

这种机制用于iSCSI发送设备完全不知道iSCSI目标端的信息的情况下。iSCSI发起端利用现有的IP网络协议SLP(Service Location Protocol for Discovery,服务定位协议)。iSCSI目标端使用SLP来注册,iSCSI发起端可以通过查询SLP代理来获得注册的iSCSI目标端的信息。当iSCSI目标端加入到网络中的时候,拓扑结构也随之改变。虽然这种方法增加了实现的复杂性,但它不需要重新配置发起端即可找到新的目标端。

2.7 iSCSI设备具有的特性

支持报头和数据摘要
支持两种挑战握手协议CHAP(ChallengeHandshake Authentication Protocol)的认证方式
目标端支持R2T(ReadytoTransfer)流控制
从RHEL4U2开始支持多通道(multipath)
支持sendtargets发现机制
支持动态目标端发现
具备异步事件通知入口
支持即时数据更新
支持动态设备重配
支持自动挂接iSCSI技术
支持IPV6技术

2.8 iSCSI设备名称

iSCSI设备在iSCSI启动端(Initiator)导入的时候,其内核将按当前的设备情况给iSCSI设备分配一个本地SCSI设备名(例如/dev/sda或/dev/sdb等),如果导入的iSCSI设备已被分区,在导入iSCSI设备建立本地SCSI设备的同时也会建立相应的分区设备名(例如/dev/sda1、/dev/sda5等等),但是此SCSI设备名并不是每次导入是都是固定的,比如你的主机之前没有/dev/sda设备,你导入了iSCSI设备,其被内核命名为/dev/sda;之后你将其取消了导入,并重新挂接了一个热插拔设备(如U盘或移动硬盘),这个热插拔设备占据的/dev/sda设备;你又重新导入了iSCSI设备,此时其被内核分配的设备名就成了 /dev/sdb。

3. tgtadm的使用

tgtadm是一个服务器端管理配置工具,它也是一个模式化的命令,其常见的模式有target、logicalunit、account

3.1 target模式

tgtadm  --lld  <driver>  --mode  target  --op  {new|delete|show|update|bind|unbind} [option]

其中,driver一般为iscsi, --op后面的参数表示要进行的操作:

new: 增加一个target,语法格式为:–tid --targetname
delete:删除一个target,语法格式为:delete --tid
show:显示所有的target,后面可以接某个target的id,只显示某个target的信息。格式为:show [–tid ]
update:修改某个特定的target的参数。格式为:update --tid --name --value
bind:将某个特定的initiator和target绑定在一起,表示只接受特定的initiator的请求。语法格式为: bind --tid --initiator-address


unbind:解绑。语法格式为:unbind --tid --initiator-address

3.2 logicalunit模式

tgtadm --lld  <driver>   --mode   logicalunit  --op  {new|delete}  [option]

其中,driver一般为iscsi,–op后面的参数表示要进行的操作:

new: 新建一个LUN,语法格式为:new --tid --lun --backing-store --bstype --bsoflags
delete: 删除一个LUN,语法格式为:delete --tid --lun

3.3 account模式

tgtadm --lld  <driver>   --mode   account  --op  {new|delete|bind|unbind}  [option]

其中,driver一般为iscsi,–op后面的参数表示要进行的操作:

new: 新建一个账号和密码,格式为:new --user --password
delete: 删除某个已有的账号,格式为:delete --user
bind:在某个特定的target上添加账号,格式为:bind --tid --user [–outgoing],如果使用了–outgoing选项,将被添加作为出去的账号来使用。
unbind:在某个特定的target上删除某个账号。其格式为:account --op unbind --tid --user

在tgtadm命令中,某些长选项可以使用短选项来代理,如:

 --lld=-L
 --tid=-t
 --lun=-l
 --backing-store=-b
 --initiator-address=-I
 --targetname <targetname>=-T

4. iscsiadm的使用

iscsiadm是一个客户端的管理工具,它也是一个模式化的工具,其模式可通过-m或–mode选项指定,常见的模式有discovery、node、fw、session、host、iface几个。这些模式的主要功能如下:

discovery: 用于发现某服务器是否有target输出,以及输出了哪些target
node: 管理跟某target的关联关系
session:用于显示所有的活动会话和连接
fw:显示所有的启动固件值
host:显示所有的iSCSI主机
iface:显示/var/lib/iscsi/ifaces目录中的所有ifaces设定

4.1 discovery模式

iscsiadm -m discovery  [ -d debug_level ]  [ -I iface -t type -p  ip:port  [-l ] ] 

discovery模式下可用选项:

-d, --debug 显示debug信息,级别为0-8;
-l, --login 表示登录target的意思
-t, --type 这里可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator;
-p, --portal 指定target服务的IP和端口;
-m, --mode 可用的mode有discovery, node, fw, host iface 和 session

4.2 node模式

iscsiadm -m node [ -d debug_level ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T targetname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ] 

node模式下可用选项:

-L ,–loginall 表示登录到所有发现的target设备上。all表示登录到所有的target设备上;manual表示手动登录;automatic表示自动登录。
-T, --targetname 用于指定target的名字
-u, --logout 从target设备上登出
-s, --stats 显示session统计信息
-o, --op:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;
-I, --interface:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;

4.3 session模式

iscsiadm -m session  -s  # 显示会话的相关信息

4.4 客户端配置文件/etc/iscsi/iscsid.conf

这个文件中的主要参数有如下:

node.startup 设置启动方式,可选的参数有auotmatic 和manual
node.session.auth.authmethod 设置使用CHAP认证方式,默认为NONE
node.session.auth.username target端认证所需initiator提供的用户
node.session.auth.password target端认证所需initiator提供的密码
node.session.auth.username_in initiator端认证所需target提供的用户
node.session.auth.password_in initiator端认证所需target提供的密码
discovery.sendtargets.auth.authmethod 设置使用CHAP认证方式用以发现target端导出的设备,默认为NONE
discovery.sendtargets.auth.username 发现操作时target端认证所需initiator提供的用户
discovery.sendtargets.auth.passwd 发现操作时target端认证所需initiator提供的密码
discovery.sendtargets.auth.username_in 发现操作时initiator端认证所需target提供的用户
discovery.sendtargets.auth.password_in 发现操作时initiator端认证所需target提供的密码

4.5 客户端的认证方式

客户端的认证方式有2种:一种是基于ip认证的;另一种是基于用户认证的,使用的认证协议为CHAP。同时iscsi-initiator-utils不支持discovery的认证。对于用户认证而言,必须先配置基于ip认证,然后才可以配置基于用户认证。

参考文献:

http://blog.51cto.com/xslwahaha/1617781

https://blog.youkuaiyun.com/qq776306395/article/details/27490977

https://wenku.baidu.com/view/5aa43ef6f705cc175527097b.html
————————————————
版权声明:本文为优快云博主「执假以为真」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/nirendao/article/details/82928761

思维导图结构: 中心主题:服务器部署 一级分支: 办公网络服务器部署 互联网企业服务器部署 数据中心服务器部署 二级分支及以下: 1. 办公网络服务器部署 2.1 配置静态地址 2.1.1 配置静态地址 2.1.2 测试网络连通性 2.2 配置IPv6地址 2.2.1 配置IPv6地址 2.2.2 测试IPv6地址 2.3 实训一 配置静态地址 2.4 认识SSH 2.4.1 认识SSH 2.4.2 使用秘钥登录SSH 2.4.3 修改SSH默认端口 2.5 挂载本地yum源 2.5.1 挂载光盘 2.5.2 创建yum源 2.6 架设DHCP服务器 2.6.1 认识DHCP 2.6.2 安装dhcpd服务 2.6.3 配置DHCP服务 2.6.4 设置防火墙 2.6.5 测试DHCP服务 2. 互联网企业服务器部署 3.1 架设DNS服务器 3.1.1 认识DNS 3.1.2 安装DNS服务 3.1.3 配置正向区域 3.1.4 配置反向区域 3.1.5 设置防火墙 3.1.6 测试DNS服务 3.2 架设Apache服务器 3.2.1 安装Apache服务 3.2.2 创建主目录 3.2.3 设置SELinux 3.2.4 创建虚拟主机 3.2.5 配置基于端口的虚拟主机 3.2.6 配置访问控制 3.2.7 设置防火墙 3.3 配置数据库服务 3.3.1 安装MariaDB 3.3.2 配置用户权限 3.3.3 导入与查询数据 3.3.4 设置防火墙 3.3.5 备份恢复 3.4 架设空壳邮件服务器 3.4.1 配置postfix 3.4.2 配置dovecot 3.4.3 测试简单邮件服务器 3.4.4 配置空壳邮件服务器 3.4.5 测试空壳服务器 3. 数据中心服务器部署 4.1 配置网卡链路聚合 4.1.1 认识网卡链路聚合 4.1.2 配置网卡链路聚合 4.1.3 测试网卡链路聚合 4.2 架设FTP服务器 4.2.1 安装vsftp服务 4.2.2 创建主目录 4.2.3 设置SELinux 4.2.4 配置匿名用户 4.2.5 配置本地用户 4.2.6 配置虚拟用户 4.2.7 设置防火墙 4.2.8 测试FTP服务 4.3 搭建NFS服务器 4.3.1 认识NFS 4.3.2 安装NFS服务 4.3.3 创建共享目录 4.3.4 配置NFS 4.3.5 设置防火墙 4.3.6 实现客户端挂载 4.3.7 实现客户端永久挂载 4.4 搭建Samba服务器 4.4.1 安装Samba服务 4.4.2 创建共享目录 4.4.3 SELinux设置 4.4.4 配置Samba匿名用户 4.4.5 配置Samba多用户共享 4.4.6 设置防火墙 4.4.7 实现客户端挂载 4.5 搭建iSCSI服务器 4.5.1 认识iSCSI 4.5.2 安装iSCSI服务端 4.5.3 配置iSCSI服务 4.5.4 设置防火墙 4.5.5 实现客户端挂载生成一个思维导图代码
最新发布
12-22
iSCSI协议及实现 iSCSI协议简介 涉及到的SCSI的概念 启动设备目标设备 启动设备(initiator):发起I/O请求的设备 目标设备(target):响应请求执行实际I/O操作的设备 在启动设备目标设备建立连接后,目标设备在操作中作为主设备控制整个工作过程 一般情况下主机适配器HBA作为启动设备,磁盘/磁带作为目标设备 涉及到的SCSI的概念 CDB:命令描述块。SCSI的命令及参数是填充在一定长度的数据块内传输的 典型的SCSI系统 SCSI的缺点 SCSI是点对点的、直接相连的计算机到存储器的设备接口,不适用于主机到存储器的存储网络通讯 SCSI总线的长度被限制在25米以内,对于Ultra SCSI长度限制为12米,不适于构造各种网络拓扑结构 SCSI总线上设备数限制为15,不适用于多服务器对多存储设备的网络结构 iSCSI的概念 iSCSI是关于SCSI的命令 、数据状态到TCP/IP 网络的映射的 协议 对TCP层的改造增加较 低功能层(对TCP层透明) 是为了适应大批量存储数 据传输的需要 iSCSI协议现状 IETF正在制定iSCSI协议标准,最新草案是draft-ietf-ips-iSCSI-06 IETF:http://www.ietf.org/ IPS工作组:http://www.ece.cmu.edu/~ips/ iSCSI产品 Cisco SN 5420 Storage Router IBM TotalStorage IP Storage 200i 用Cisco SN 5420构造的存储系统 iSCSI协议结构 1.概述 2.协议数据单元格式 3.用于iSCSI协议的SCSI模式参数 4.登录相 5.登录相之外的工作参数协商 6.错误处理恢复 iSCSI的命名编址 iSCSI使用类似URL的iSCSI名字来唯一鉴别启动设备目标设备。 地址会随着启动设备目标设备的移动而改变,但名字始终是不变的 iSCSI的命名编址 一个iSCSI名字由三部分组成:类型定义符、名字认证机构、由该认证机构分配的名字 iscsi.com.acme.sn.8675309 iSCSI地址格式 [:]/ iSCSI发现机制 启动设备可以通过下列方法发现目标设备: 在启动设备上设置目标设备的地址 在启动设备上设置默认目标设备地址,启动设备可通过“SendTargets”命令从默认目标设备上获取iSCSI名字列表 发出服务定位协议(SLP)广播请求,等待目标设备回应 查询存储设备名字服务器获取可访问的目标设备列表 iSCSI会话(session) 启动设备目标设备之间的TCP连接构成一次会话 一个会话包含一个或多个TCP连接 会话由会话号区分,会话号包括启动设备部分目标设备部分 会话中包含的TCP连接可以增加也可以删除,这些连接由连接号(CID)区分 命令编号 从启动设备到目标设备SCSI层的命令由iSCSI编号,该号码由iSCSI协议数据单元中的命令序列号(CmdSN)携带 目标设备的iSCSI层必须按命令序列号的顺序把命令传递给SCSI层 目标设备的SCSI层接收到命令后该命令序列号即失效。命令序列号也能被用来进行命令的流量控制 iSCSI登录协商 iSCSI登录是用来在启动设备目标设备之间建立TCP连接的机制 登录的作用包括鉴别通讯双方、协商会话参数、打开相关安全协议并且给属于该会话的连接作标记 登录过程完成后,iSCSI会话进入全功能相(full feature phase),这时启动设备就能通过iSCSI协议访问目标设备里的各逻辑单元了 响应/状态编号 从目标设备到启动设备的响应由iSCSI编号,在iSCSI协议数据单元中用状态序列号(StatSN)表示 启动设备提供期望状态序列号ExpStatSN来确认状态 如果状态序列号期望状态序列号不同则意味着连接出现了错误 协议数据单元格式 iSCSI启动设备命令基本首部(BHS) iSCSI协议的实现 iSCSI代码来源 iscsi-Apr6.tgz: Intel (http://sourceforge.net) kernel_emulator_10.tgz: IOL(InterOperability Lab) of UNH(University of New Hampshire) (http://www.iol.unh.edu) Iscsi-0.1.tar.gz: iSCSI research team of UML(University of Massachusetts Lowell) (http://www.cs.uml.edu/~mbrown/iscsi) 程序的运行 启动设备端: insmod scsi_target.o insmod iscsi_target.o 客户端: insmod iscsi.o insmod iscsi_client.o fdisk /dev/sda mke2fs /dev/sda1 mount –t ext2 /dev/sda1 /mnt/iscsi raiddev /dev/md0(多个目标设备) 程序的结构(目标设备) 1.STML(SCSI Target mid-level) 处理SCSI命令 2.FETD(front-end Target driver) 将STML发来的命令数据封装成底层通讯协议数据包的格式发送到网络上或者将从网络接受到的数据包解包传递给STML 将STMLFETD分开的原因 增强程序的可重用性 STML是通用的 FETD是底层采用的通讯协议(TCP/IP、Fibre channel)相关的 STML提供给FETD的API register_target_template() deregister_target_template() register_target_front_end() deregister_target_front_end() rx_cmnd() scsi_rx_data() scsi_target_done() scsi_release() rx_task_mgmt_fn() FETD提供给STML的API detect() release() xmit_response() rdy_to_xfer() task_mgmt_fn_done() report_aen() 重要的数据结构 struct Target_Emulator struct Scsi_Target_Template struct Scsi_Target_Device struct Target_Scsi_Cmnd struct scsi_request struct Target_Scsi_Message struct scsi_cmnd struct sg_io_hdr_t STML的初始化 初始化一个struct Target_Emulator类型的全局变量 创建线程scsi_target_process_thread处理大多数的STML的工作 进入等待 FETD的初始化 向STML注册,STML将其加入设备队列 创建线程iscsi_server_thread监听端口4002 进入等待 FETD向STML的注册过程 FETD向STML注销过程 FETD对请求的响应 当在4002端口监听的线程接收请求后 创建线程iscsi_rx_thread接收SCSI命令 创建线程iscsi_tx_thread传送应答状态 FETD创建一个Target_Scsi_Cmnd类型的数据接收SCSI命令,将其加入命令队列,唤醒STML的线程STT处理收到的SCSI命令 STML对FETD的响应 调用handle_cmd处理命令队列 调用hand_to_front_end返回处理结果 处理结果加入FETD的发送队列xmit_queue等待发送 在结果发送完成后调用scsi_target_dones释放资源 iSCSI 的应用 采用iSCSI的设备的特点 采用了iSCSI协议的硬件设备是NASSAN的中间产品,它能简单连接到企业内部网,做到即插即用。而每一个远程用户端对该存储设备的访问效果接近于在本地直接访问SCSI盘。 为无法承担光纤通道SAN环境基础结构高成本的中间市场客户提供利用SAN所带来的好处 iSCSI & NAS 在NAS上部署iSCSI协议很简单,因为不需要任何硬件上的改动,只是驱动软件的安装 iSCSI & SAN The end
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值