SCSISmall Computer System Interface)是一套存储设备命令和架构模型;在现代系统里,它不只指老式并行 SCSI 总线,也常指 READ、WRITE、INQUIRY、REQUEST SENSE 等块存储命令语义。

核心问题

操作系统希望用统一方式访问不同存储设备:磁盘、光驱、UFS、USB Mass Storage、SAS 盘等。硬件传输层可以不同,但上层需要一组稳定命令来表达“读哪个逻辑块”“写哪个逻辑块”“查询设备能力”“报告错误原因”。

SCSI 的价值在于把“存储命令语义”抽出来,让不同传输层承载。

核心对象

对象作用
initiator发起命令的一方,通常是主机。
target响应命令的一方,通常是存储设备。
LUNtarget 内部的逻辑单元编号。
CDBCommand Descriptor Block,描述一次 SCSI 命令。
sense data设备返回的错误和状态解释。
task management取消、复位、清队列等任务管理操作。

核心机制

一次简化读请求可以表示为:

CDB = READ(lba, transfer_length)
response = target.execute(CDB)
  • lba 是逻辑块地址。
  • transfer_length 是要读的块数。
  • target.execute 表示设备按命令读取并返回数据或错误状态。

UFS 中,SCSI 命令会被封装到 UPIU,通过 UTP、UniProMIPI M-PHY 发给设备。Linux UFS 驱动也接入 SCSI midlayer,因此 UFS 设备在软件栈里常表现为 SCSI 风格的块设备。

工程用途

  • 统一不同存储设备的读写和错误语义。
  • 在 Linux 中通过 SCSI midlayer 复用错误处理、队列和块设备框架。
  • 在 UFS、USB Mass Storage、SAS 等协议里作为上层命令模型。

边界与常见坑

  • SCSI 不等于老式并行线缆。现代 SCSI 命令可以跑在 UFS、USB、SAS 等不同传输上。
  • SCSI 命令语义不等于底层物理介质。设备内部可能是 NAND Flash、机械盘或虚拟块设备。
  • sense data 很关键。只看 I/O error 不看 sense key、ASC/ASCQ,容易丢失真实故障原因。
  • UFS 只是使用 SCSI 架构模型,不代表 UFS 设备接在传统 SCSI 总线上。

相关术语