Bootstrap

存储基础 -- SCSI命令格式与使用场景

SCSI命令格式与使用场景

1. SCSI命令描述符块(CDB)

1.1 CDB基本概念

SCSI命令通过**命令描述符块(CDB, Command Descriptor Block)**表示。

  • CDB长度:SCSI命令根据使用场景有不同长度的CDB,常见的有6字节、10字节、12字节、16字节。
    • 示例:READ(6)、READ(10)、READ(12)、READ(16)命令表示的CDB长度不同。
  • 操作码(Opcode):CDB的第一个字节是“操作码”,标识具体命令类型。例如:
    • 0x00表示TEST UNIT READY命令。
    • 0x12表示INQUIRY命令。
  • 参数字段:后续字段根据命令的功能定义不同的参数,例如逻辑块地址(LBA)、传输长度、标志位等。

1.2 CDB结构示例

READ(10)命令的CDB结构
Byte | 位    | 名称                   | 含义
-----+------+-----------------------+--------------------------------------
  0  |  7-0 | Operation Code (0x28) | 标识READ(10)命令
  1  |  7   | RelAdr                | 是否相对地址模式
     |  6-5 | Reserved              | 保留字段
     |  4   | FUA                   | 强制直接读写介质
     |  3   | DPO                   | 禁用缓存换出
     |  2-0 | LUN                   | 逻辑单元号(Logical Unit Number)
 2-5 |      | Logical Block Address | 要读取的起始LBA
  6  |      | Reserved              | 保留字段
 7-8 |      | Transfer Length       | 要读取的逻辑块数量
  9  |      | Control               | 控制位
示例说明
  • Opcode标识命令类型。
  • Logical Block Address指定操作的逻辑块地址。
  • Transfer Length决定传输的逻辑块数量。

2. SCSI命令使用场景

以下列举了常见的SCSI命令及其使用场景。

2.1 TEST UNIT READY

  • 命令含义:检查目标设备是否已准备好接收命令。
  • 场景与用途
    • 系统启动时用于检查设备是否就绪。
    • 在读写操作前确认设备状态(例如光驱是否加载了介质)。

2.2 INQUIRY

  • 命令含义:获取SCSI设备的基本信息,包括供应商ID、产品ID、固件版本等。
  • 场景与用途
    • 系统识别设备型号和特性。
    • 存储管理中用于识别RAID卡或SAN环境中的设备信息。

2.3 REQUEST SENSE

  • 命令含义:获取设备错误信息或状态变化。
  • 场景与用途
    • 当命令返回错误时,用于诊断原因。
    • 存储故障排查和设备状态监控。

2.4 START STOP UNIT

  • 命令含义:控制设备马达启动或停止,或装载/卸载介质。
  • 场景与用途
    • 硬盘节能管理(停止磁盘旋转)。
    • 光驱或磁带机装载/卸载介质。

2.5 READ CAPACITY

  • 命令含义:获取设备的容量信息,包括逻辑块大小和最大逻辑块地址。
  • 场景与用途
    • 确定磁盘容量,用于分区和文件系统配置。
    • 对大容量设备(>2TB)使用READ CAPACITY(16)。

2.6 READ / WRITE

  • 命令含义:对逻辑块进行读写操作。
  • 场景与用途
    • 所有存储I/O操作的核心。
    • 在现代存储环境中,READ(16)和WRITE(16)支持超大地址范围。

2.7 MODE SENSE / MODE SELECT

  • 命令含义
    • MODE SENSE:读取设备模式参数。
    • MODE SELECT:修改设备模式参数。
  • 场景与用途
    • 查询或配置硬盘缓存策略。
    • 磁带数据压缩或光驱特性调整。

2.8 SYNCHRONIZE CACHE

  • 命令含义:将设备缓存中的数据写回物理介质。
  • 场景与用途
    • 系统关机或文件系统卸载时保证数据一致性。
    • RAID控制器或存储阵列切换前的缓存同步。

2.9 FORMAT UNIT

  • 命令含义:低级格式化设备,重新初始化物理扇区布局。
  • 场景与用途
    • 磁带或硬盘的出厂初始化。
    • 修复介质异常。

2.10 VERIFY

  • 命令含义:校验指定逻辑块范围的数据。
  • 场景与用途
    • 确保写入数据正确性。
    • RAID一致性校验。

2.11 PREVENT / ALLOW MEDIUM REMOVAL

  • 命令含义:控制是否允许手动移除介质。
  • 场景与用途
    • 写入或读取光盘/磁带时防止介质被意外弹出。

2.12 LOG SENSE / LOG SELECT

  • 命令含义
    • LOG SENSE:读取设备日志信息(如温度、错误统计等)。
    • LOG SELECT:修改日志参数或清空日志。
  • 场景与用途
    • 获取设备状态和运行记录。
    • 监控设备性能和健康状况。

2.13 REASSIGN BLOCKS / WRITE SAME

  • 命令含义
    • REASSIGN BLOCKS:将坏块重新映射到备用扇区。
    • WRITE SAME:批量写入固定数据。
  • 场景与用途
    • 修复磁盘坏块。
    • 快速初始化或清零逻辑块。

2.14 READ DEFECT DATA

  • 命令含义:读取存储介质上的缺陷信息。
  • 场景与用途
    • 查看硬盘或磁带的缺陷分布。
    • 判断设备健康状态。

2.15 SEND DIAGNOSTIC / RECEIVE DIAGNOSTIC RESULTS

  • 命令含义:执行设备自检或获取诊断结果。
  • 场景与用途
    • 存储设备的在线自检。
    • 高端存储的维护和健康检查。

3. 总结

SCSI命令通过CDB表示,并通过不同的传输协议(如SAS、Fibre Channel、iSCSI等)进行传输。常见的命令包括设备就绪检测(TEST UNIT READY)、信息获取(INQUIRY)、读写操作(READ/WRITE)、容量查询(READ CAPACITY)、错误诊断(REQUEST SENSE)等。

在实际应用中,这些命令由操作系统或驱动封装,用户通过文件系统或存储管理工具间接使用。深入了解CDB格式和命令用途,对于驱动开发或存储调优具有重要意义。

;