浅析SCSI协议

SCSI协议介绍

SCSI,全称Small Computer System Interface,即小型计算机接口,是一种用于连接计算机及其外围IO设备(如磁盘、光驱等)的接口标准,目前最大部分的应用是在存储设备上。SCSI协议定义了统一的信息交互模型和必要的命令集,用于计算机与不同设备间进行数据通信;同时SCSI协议不与特定的传输介质绑定,因此可以在多种传输介质上实现,如基于光纤的FCP链路协议、基于IP网络的ISCSI协议以及SAS链路协议等。

SCSI协议发展历程

SCSI协议的发展可划分为SCSI-1/SCSI-2/SCSI-3三个阶段,最新的为SCSI-3,也是目前应用最广泛的SCSI版本。下表展示了SCSI协议的整体发展历程:
在这里插入图片描述
早期SCSI协议都是采用的并行总线技术,随着串行高速总线技术的加入,并行SCSI技术也在后来被SAS总线技术被替代。

SCSI协议标准

时至今日,SCSI协议已经发展成了一个庞大的协议体系,并且已成为了存储企业级应用领域事实上的协议标准。由于SCSI协议并不局限于某一特定的链路传输技术,各种支持SCSI协议的链路实现标准被加入了SCSI协议当中,如今的SCSI协议是一个大量标准的集和。整体来说,SCSI协议标准文档被划分成了如下的多个部分:
在这里插入图片描述
这些标准文档可以大致可以分为三类:体系结构文档、设备实现文档和链路实现文档。

  • 体系结构文档:包括SAM和SPC文档,其中SAM定义了SCSI协议的体系结构模型、SCSI标准集合的功能划分以及SCSI实现标准的通用要求等;SPC为所有SCSI设备类型定义模型的实施标准,此标准指定了所有SCSI设备通用的所需命令和行为,并规定了SCSI启动器设备在向任何SCSI目标设备发送命令时要遵循的要求;
  • 设备实现文档:定义了同介质无关实现该设备必要的命令集,例如实现块设备(如硬盘)的SBC命令集,实现流设备(如磁带)的SSC命令集等;
  • 链路实现文档:描述了SCSI协议在各种链路协议的实现细节,这些都在单独的协议文档里面定义,例如基于光纤的FC链路协议、基于SAS的链路协议以及基于IP链路的iSCSI协议。
SCSI命令集文档

SCSI命令集文档由SPC(SCSI Primary Commands)、SBC(SCSI Block Commands)、ZBC(Zoned Block Commands)、SES(Enclosure Services Commands)等构成,其中,最常使用的是SPC和SBC文档:

  • SPC文档定义了适用于所有SCSI设备的通用命令集,如INQUERY、TUR等命令以及Sense信息格式;
  • SBC文档中定义了适用于块设备的命令集,如READ、WRITE、VERIFY等。

通常SCSI文档推荐阅读的顺序为SAM、SPC以及特定于设备类型的命令集文档。

SCSI体系结构

SCSI体系结构主要包含了SCSI通信模型、命令模型、任务管理等方面的内容。

SCSI基本术语

SCSI协议定义了一系列概念,这里针对一些基本术语进行简单的说明。
在这里插入图片描述

  • Initiator:启动器,可以发送SCSI命令并接收响应的设备;
  • Target:目标器,充当SCSI命令接收器的设备;
  • LUN:逻辑单元,是SCSI目标器中充当数据源或目的地的名字空间资源,一个目标器可以包含多个LUN,每个LUN可以具有不同的属性;
  • NEXUS:NEXUS用于描述启动器端口和目标器端口之间的连接。

SCSI client-server模型

SCSI的Initiator与Target共同构成了一个典型的C/S模型,每个指令都是“请求/应答”这样的方式来实现。
在这里插入图片描述

SCSI client-server模型中包含两个重要的角色:

  • SCSI启动器:SCSI Initiator Device,SCSI是一个C/S架构,其中Client端成为启动器,负责向SCSI目标器发送请求指令,如SAS主机适配器;
  • SCSI目标器:SCSI Target Device,作为Server端,接收来自SCSI启动器的指令并解析处理,如SAS硬盘。

完整的SCSI协议的体系结构模型在SAM文档中进行描述,可以查阅以对SCSI协议有更多的了解。

SCSI命令模型

SCSI协议对链路传输没有进行严格的限制,但约束了SCSI的命令模型。协议允许使用SAS、FC以及以太网等不同的链路实现,但对所有的SCSI传输层实现而言,都必须遵循统一的SCSI命令模型。SCSI命令模型约束了SCSI命令执行过程、命令请求格式、命令响应状态以及错误描述等内容。

命令描述块(CDB)

一个完整的SCSI请求由CDB、数据、命令属性信息构成,其中,CDB描述了该SCSI命令的具体细节,包括命令操作类型(read/write/inquiry等)、数据的处理方式等信息。最早的SCSI-1支持的是6个字节的指令,后来慢慢演变成了10字节,12字节,16字节,后续还有应用扩展为32字节的CDB。这里以16字节长度CDB为例,它的通用格式定义如下:
在这里插入图片描述
关于其它长度的CDB格式定义,可以参考《SCSI Primary Commands》(SPC)手册。

通用CDB字段

对于不同格式的CDB,都会包含一些通用的字段,对于这些通用的CDB字段描述如下:

  • Operation Code:定义在CDB的第一个字节,描述命令请求类型,详细的命令描述可以参考SPC以及设备相关的命令手册中;
  • Service action:与Operation Code配合执行特定的操作;
  • Logical block address:简称LBA,描述数据读取或者写入的LUN地址;
  • Transfer length:描述数据传输长度,使用扇区作为基本单位;
  • Parameter list length: 用于描述从Data-out缓冲区发送的字节数,可以为0;
  • Allocation length:用于描述Data-in缓冲区已分配的最大字节数。

命令响应状态

当目标器设备完成命令处理后,会返回状态响应给启动器,用于指示命令的完成状态:完成或者异常。SCSI协议约定使用特定的状态码(Status code)和状态限定符(Status qualifier)来告知应用命令的处理结果。

Status code

SCSI协议定义的状态码如下表所示:

状态码状态描述
00hGOOD命令正常完成,未发生错误
02hCHECK CONDITION命令处理返回Sense Data,需要根据Sense信息确定后续执行的动作
04hCONDITION MET仅限于为其指定的命令使用
08hBUSY设备处于忙碌状态,暂时无法处理新的命令
18hRESERVATION CONFLICTNA
28hTASK SET FULL设备task set资源不足
30hACA ACTIVENA
40hTASK ABORTED命令被终止
Status qualifier

Status qualifier与配合Status code,提供更多返回该状态的原因的信息。Status qualifier格式定义如下:
在这里插入图片描述
日常维护过程中,Status code使用的比较多,Status qualifier通常不太关注,需要了解的话可以查看SAM手册。

Sense Data

当命令以CHECK_CONDITION状态终止时,目标器设备会返回Sense Data,用于告知上层应用命令终止的原因,应用会根据Sense data确定如何进一步处理。Sense data主要通过Sense key、Asc(additional sense code)以及Ascq(additional sense code qualifier)来描述命令执行的异常信息,其中:

  • Sense key描述了主要错误信息的类别;
  • Asc和Ascq在Sense key的基础上进一步说明了具体的错误原因。
Sense key信息

Sense key是对错误信息做的一个分类,协议定义的Sense Key及其描述如下:

Sense Key定义描述
0hNO SENSE表示没有上报Sense信息
1hRECOVERED ERROR表示命令完成,但是处理过程中设备执行了修复的动作
2hNOT READY表示设备未准备就绪
3hMEDIUM ERROR表示介质或者记录数据出现了错误
4hHARDWARE ERROR表示设备出现了硬件错误
5hILLEGAL REQUEST表示非法请求,通常是设备在CDB中检测到了无效的参数
6hUNIT ATTENTION表示出现了需要上层注意的事件,例如Lun复位、新接入设备可能触发
7hDATA PROTECT表示设备在尝试访问受保护的区域
8hBLANK CHECK表示遇到非预期的空白或非空白介质
9hVENDOR SPECIFIC表示特定厂商定义的错误
AhCOPY ABORTED表示在传输某些数据之后但在传输所有数据之前,第三方复制命令被中止。
BhABORTED COMMAND表示设备终止了命令的执行
ChReserved保留
DhVOLUME OVERFLOW表示缓冲的SCSI设备已到达分区末尾,数据可能保留在尚未写入介质的缓冲区中
EhMISCOMPARE表示出现了数据不一致
FhCOMPLETED表示需要上报命令完成的Sense Data

相关参考

  • 《SCSI Architecture Model - 5(SAM-5)》
  • 《SCSI Primary Commands - 4(SPC-4)》
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值