我们来系统地梳理一下iSCSI架构中客户端与服务端(通常称为启动器和目标器)的职责,并特别探讨其在光存储项目中的应用。
第一部分:iSCSI客户端与服务端的核心工作
iSCSI协议将SCSI命令封装在TCP/IP数据包中,通过网络传输,使得远程存储设备对主机看起来就像本地连接的SCSI设备。
一、iSCSI客户端(启动器 - Initiator)的核心工作
-
发现目标:向指定的网络端口(默认3260)发送发现请求,获取可用的iSCSI目标器列表及其参数。
-
会话管理:
-
登录协商:与选定的目标器建立TCP连接,进行登录阶段协商。协商内容包括认证方式(CHAP等)、会话参数(如最大数据段长度)。
-
维护会话:通过定期发送"NOP-Out"命令作为心跳包,保持会话活跃,检测连接状态。
-
登出:优雅地终止会话。
-
-
SCSI命令封装与传输:
-
接收上层操作系统或应用(文件系统、数据库)发来的SCSI块级命令(如读、写)。
-
将这些SCSI命令和数据封装成iSCSI协议数据单元。
-
为每个命令分配一个命令序列号,确保有序和可靠传输。
-
通过建立的TCP连接将PDU发送给目标器。
-
-
数据处理:
-
写操作:如果数据超出协商的"最大数据段长度",启动器负责将数据拆分成多个序列进行传输。
-
读操作:接收来自目标器的数据PDU,进行重组,提交给上层。
-
-
错误处理与恢复:
-
检测丢包、超时或校验错误。
-
请求重传或重新连接,确保数据的完整性和命令的可靠性。
-
二、iSCSI服务端(目标器 - Target)的核心工作
-
服务发布与监听:在TCP 3260端口持续监听来自启动器的连接请求。
-
访问控制:
-
目标标识 :每个存储资源被定义为一个唯一的iSCSI限定名。
-
认证:在登录阶段验证启动器身份(通常使用CHAP双向认证)。
-
LUN映射 :将后端的逻辑单元(如物理磁盘、RAID组、卷、文件)映射为逻辑单元号,并只对经过授权的启动器可见。
-
-
会话管理:接受或拒绝启动器的登录请求,管理多个并发的iSCSI会话。
-
命令解析与执行:
-
接收并解析来自启动器的iSCSI PDU,提取出原始的SCSI命令。
-
将SCSI命令传递给后端的存储对象(块设备)执行。
-
-
数据传输:
-
对于读请求,从存储设备读取数据,封装成iSCSI数据PDU发回启动器。
-
对于写请求,将接收到的数据写入存储设备,并发送响应确认。
-
-
状态返回:将SCSI命令的执行状态(成功、校验错误、设备故障等)封装在响应PDU中返回给启动器。
-
队列管理:管理来自不同启动器的SCSI命令队列,可能涉及简单的调度。
第二部分:在光存储项目中的应用
光存储(如光盘库、蓝光存储、归档光盘系统)通常用于冷数据或温数据存储 ,特点是顺序访问性能好、随机访问慢、介质可移动、寿命长、成本低 。当通过iSCSI将其呈现给主机时,其行为模拟为一个块设备。
在这种场景下,客户端和服务器端处理的命令会具有鲜明的光存储特性。
一、客户端(启动器)通常会发送的命令
除了常规的读写命令,由于光存储介质的特殊性,客户端(或更准确地说,是客户端上运行的介质管理软件 )会发送一系列SCSI 机械臂和介质控制命令 ,这些命令通常属于SCSI媒体换片器命令集 和SCSI块命令扩展集。
-
标准块操作命令:
-
READ/WRITE:读取或写入数据。由于光盘写入通常是一次性的,WRITE可能对应刻录操作。 -
INQUIRY:查询目标器及其LUN的设备类型、厂商信息。对于光存储,设备类型会报告为"光盘库"或"WORM"设备。 -
READ CAPACITY:获取存储容量信息。 -
TEST UNIT READY:检查设备(如特定光盘)是否就绪可读。 -
REQUEST SENSE:获取详细的错误状态信息(如"介质未装入"、"需要清洁")。
-
-
关键的光存储/自动化命令:
-
START STOP UNIT(或LOAD/UNLOAD MEDIUM):-
LOAD: 将指定槽位的光盘装入驱动器。
-
UNLOAD: 将驱动器中的光盘退回到槽位。
-
EJECT: 将光盘弹出到存取口。
-
-
MOVE MEDIUM:- 命令机械臂将光盘从一个槽位移动到另一个槽位(或从槽位到驱动器)。
-
READ ELEMENT STATUS:-
这是最核心的库管理命令。客户端通过此命令查询整个光盘库的"元素"状态,包括:
-
存储元素: 所有光盘槽位的状态(空、有盘、盘片ID)。
-
传输元素: 机械臂的位置和状态。
-
数据转移元素: 所有光盘驱动器的状态(空闲、就绪、在读、在写、需要清洁)。
-
-
-
SEND DIAGNOSTIC/RECEIVE DIAGNOSTIC RESULTS:- 发送诊断命令,获取库的硬件状态(如机械臂错误、传感器故障、驱动器温度)。
-
-
与介质特性相关的命令:
-
GET CONFIGURATION: 查询驱动器的能力和当前配置(支持的光盘类型、读写速度等)。 -
CLOSE TRACK/SESSION或SYNCHRONIZE CACHE: 在完成一批数据写入(刻录)后,发送此命令来最终化光盘的轨道或会话,使数据不可再修改并可被读取。
-
二、服务端(目标器)需要支持的命令实现
iSCSI目标器软件(如Linux的targetcli或专业存储软件)在此扮演了翻译官 和控制器的角色。它需要:
-
实现完整的SCSI命令集 :不仅要支持标准块命令,必须实现SCSI媒体换片器命令集,以响应客户端的库管理请求。
-
虚拟化与映射:
-
将物理的"槽位"、"驱动器"抽象为SCSI元素地址。
-
将
MOVE MEDIUM命令翻译成控制机械臂和驱动器的底层硬件指令(通常通过串口、SCSI或厂商专用API)。 -
将针对某个LUN(可能对应某张光盘)的
READ/WRITE命令,路由到正确的、已装入的光盘驱动器。
-
-
介质管理:
-
维护一个内部介质目录 ,记录每张光盘的卷序列号、位置(槽位/驱动器)、内容索引、剩余容量等。
-
当客户端请求访问某个文件/逻辑块时,目标器需要根据目录自动定位 并装入所需的光盘。
-
-
缓存管理(非常重要):
-
由于光盘驱动器装入和寻道时间很长,优秀的目标器会实现大容量磁盘缓存。
-
写缓存: 接收客户端的快速写入,先存入高速磁盘缓存,随后后台异步刻录到光盘,并立即向客户端返回"写成功",极大提升用户体验。
-
读缓存/预取: 将经常访问的数据或根据访问模式预取的数据缓存到磁盘,加速读取。
-
-
支持关键的光存储协议:
-
支持SCSI WORM命令,确保一次写入多次读取的介质特性不被违反。
-
支持SCSI MT(介质转移)命令,用于机械臂控制。
-
总结
在光存储项目中应用iSCSI:
-
客户端 的角色从"纯数据读写"扩展为库管理器 ,它通过发送
READ ELEMENT STATUS,MOVE MEDIUM,START STOP UNIT等命令,主动地、智能化地管理着庞大的光盘介质仓库。 -
服务端 的角色是一个高度智能的协议转换器和存储虚拟化层 。它不仅处理数据I/O,更重要的是管理物理机械、维护介质目录、提供读写缓存,从而将一个缓慢、顺序、机械化的光存储系统 ,伪装成一个可以通过标准块协议(SCSI over IP)访问的、相对可用的网络存储设备。
这种架构使得归档光存储能够无缝集成到现有的IT基础设施中,应用程序可以像使用普通硬盘一样使用它,而背后的复杂性完全由iSCSI目标器和客户端管理软件隐藏。