Linux SCSI 子系统剖析
Small Computer Systems Interface (SCSI) 是一组标准集,它定义了与大量设备(主要是与存储相关的设备)通信所需的接口和协议。 Linux? 提供了一种 SCSI 子系统,用于与这些设备通信。Linux 是分层架构的一个很好的例子,它将高层的驱动器(比如磁盘驱动器或光驱)连接到物理接口,比如 Fibre Channel 或 Serial Attached SCSI(SAS)。本文向您介绍了 Linux SCSI 子系统,并且讨论了这些子系统将来的发展方向。 GNU/Linux 和 SCSI 是很好的一个组合,因为二者在各自的环境中具有类似的特征。GNU/Linux 是一种安全可靠的操作系统,可以不间断地运行。SCSI 适合于可靠和高性能存储。二者都是开源的。您可以下载和查阅 International Committee on Information Technology Standards (INCITS) T10 Technical Committee 的各种 SCSI 规范。同样地,您也可以下载 GNU/Linux 源代码以理解其实现。它们在各自的行业都具有主导性,所以相对其他操作系统而言,GNU/Linux 能更好地支持 SCSI,这一点就不足为奇了。
SCSI 的演化
SCSI 是一种很有趣的接口,它是早期的接口之一,如今还在不断演化。第一种 SCSI 标准称为 SCSI-1,是由 Shugart Associates 在 1979 年前后创建的。SCSI-1 定义了一种具有 5MHz 数据时钟的 8-bit 并行接口,能提供最高 5 兆字节每秒(5 MB/s)的数据传输速率。
SCSI-2 标准出现于 1985 年,它的出现使数据速率更快(10MHz),总线也更宽(16 位)。被称为 Fast/Wide 的 SCSI-2 允许的数据传输速率高达 20 MB/s,并具有与 SCSI-1 的向后兼容性,但是速率也会限制到 SCSI-1 的数据速率。
SCSI-3 的开发开始于 1993 年,现已成为了一组标准集,可以定义协议、命令集和信令方法。在 SCSI-3 中,包含一组命名为 Ultra 的并行 SCSI 标准和基于串行 SCSI 的协议,比如 IEEE 1394 (FireWire)、Fibre Channel, 、Internet SCSI (iSCSI) 和新兴的 SAS。这些标准通过引入存储网络技术(比如 FC-AL 或 iSCSI)改变了传统的存储理念,将数据速率扩展到了 1 Gbit/s,将最大的可寻址设备数增加到了 100 以上,并将最大的电缆长度扩展到了 25 米。图 1 展示了从 1986 至 2007 年 SCSI 的数据速率的变化
图 1. SCSI 数据速率的演化
SCSI 工作原理
SCSI 实现了一种客户机/服务器风格的通信架构。发起者向目标设备发送命令请求。该目标处理此请求并向发起者返回响应。发起者可以是托管计算机中的一个 SCSI 设备,而 SCSI 目标则可以是一个磁盘、光盘和磁带设备或特殊设备(比如箱体设备)。
SCSI 命令
SCSI 传输所采用的协议已经时过境迁,SCSI 命令却保持了最初的元素。SCSI 命令是在 Command Descriptor Block (CDB) 中定义的。CDB 包含了用来定义要执行的特定操作的操作代码,以及大量特定于操作的参数。
SCSI 命令支持读写数据(各有四个变量)以及很多非数据命令,比如 test-unit-ready(设备是否已就绪)、inquiry(检索有关目标设备的基本信息)、read-capacity(检索目标设备的存储容量)等等。目标设备支持何种命令取决于设备的类型。发起者通过 inquiry 命令识别设备类型。表 1 列出了最常用的 SCSI 命令。
表 1. 常见 SCSI 命令 命令 用途 Test unit ready 查询设备是否已经准备好进行传输 Inquiry 请求设备基本信息 Request sense 请求之前命令的错误信息 Read capacity 请求存储容量信息 Read 从设备读取数据 Write 向设备写入数据 Mode sense 请求模式页面(设备参数) Mode select 在模式页面配置设备参数
借助大约 60 种可用命令,SCSI 可适用于许多设备(包括随机存取设备,比如磁盘和像磁带这样的顺序存储设备)。SCSI 也提供了专门的命令以访问箱体服务(比如存储箱体内部当前的传感和温度)。更多信息,请参见 参考资料 部分。 |