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格式和命令用途,对于驱动开发或存储调优具有重要意义。