SCSI 错误信息表整理

前言

USB 管道的第一大使用场景非 U盘、移动硬盘莫属了!U盘、移动硬盘即 Mass Storage,使用USB 管道的 Bluk 传输承载 SCSI 协议进行资源交互。

SCSI 协议是让数据以块的方式进行传输的一种协议规范。

正文

Mass Storage 插入单板时总会有 “sd xxxx: [sdx] Result: xxxxxxx” 的log,这打印是 USB 枚举成功后,SCSI 识别设备的过程log。U盘即是USB 设备,也是 SCSI 设备。

下面是 SCSI 识别过程出错的 log,我们从中可以看到三个关键词:hostbyte、driverbyte 和 Sense Key。通过这查询这三个值,结合后续的文件系统 log,我们就可以大概了解出错的原因。

1
2
sd 0:0:0:0: [sda] Result: hostbyte=0x00 driverbyte=0x08
sd 0:0:0:0: [sda] Sense Key : 0xb
hostbyte 含义
hostbyte符号(Symbol)含义
0x00DID_OK没有错误
0x01DID_NO_CONNECT在超时之前,不能连接
0x02DID_BUS_BUSY在超时期间,BUS一直处于忙状态
0x03DID_TIME_OUT因为其他原因超时
0x04DID_BAD_TARGETBAD target
0x05DID_ABORT因为其他原因取消
0x06DID_PARITYParity错误
0x07DID_ERROR内部错误(internal error)
0x08DID_RESET被复位
0x09DID_BAD_INTR得到一个未被期望的中断
driverbyte 含义
driverbyte符号(Symbol)含义
0x00DRIVER_OK没有错误
0x01DRIVER_BUSY未使用
0x02DRIVER_SOFT未使用
0x03DRIVER_MEDIA未使用
0x04DRIVER_ERROR内部驱动错误
0x05DRIVER_INVALID完成(DID_BAD_TARGET或DID_ABORT)
0x06DRIVER_TIMEOUT超时完成
0x07DRIVER_HARD完成,但有致命错误
0x08DRIVER_SENSE有sense信息
0x10SUGGEST_RETRY重试SCSI请求
0x20SUGGEST_ABORT取消请求
0x30SUGGEST_REMAP重新映射block,但没有完成
0x40SUGGEST_DIE让内核Panic
0x80SUGGEST_SENSE从设备上获取Sense信息
0xffSUGGEST_IS_OK不需要做任何操作
Sense Key 含义
Sense Key 代码Sense Key符号 (Symbol)具体含义描述
0x00NO_SENSE在特定逻辑单元上,没有特殊的Sense Key信息。发生这种情况情形包括: (1)成功完成一个命令;(2)命令收到CHECK CONDITION或COMMAND TERMINATED状态,原因为filemark,EOM或ILI某个比特位设置为1。
0x01RECOVERED_ERROR表示最后一个命令成功执行,但在该Target上有恢复动作。 详细原因由Additional Sense Key和信息区域来确定。当一条命令中出现多个纠正的错误时,报告哪一个错误被纠正是和设备相关。
0x02NOT_READY表示访问的逻辑地址单元不可访问,此时需要人为干预来纠正这种错误。
0x03MEDIUM_ERROR表示命令因为不可恢复的错误条件而终止,原因可能为存储介质的缺陷或 记录的数据存在错误。当Target区别不了存储介质的缺陷和特定硬件失效(Sense Key 4h)时,也会报告”MEDIUM ERROR”错误。
0x04HARDWARE_ERROR表示执行一条命令或在自检期间,Target发现了一个不可纠正的硬件错误,如控制器失效、设备失效、校验错误。
0x05ILLEGAL_REQUEST表示在SCSI命令描述块中有非法参数,或在数据/某些命令中(如FORMAT UNIT、SEARCH DATA等) 非法参数。当Target检测到命令块中有非法参数时,应该终止该命令而不能改变介质。当Target检测到额外参数数据中的无效参数时,Taget可能已经更改了介质。该Sense Key也可以表示收到无效的IDENTIFY消息。
0x06UNIT_ATTENTION表示可移除的介质可能已经被更改或Target被复位。
0x07DATA_PROTECT表示命令试图读/写被设置为读/写保护的block。读写操作不会被执行。
0x08BLANK_CHECK表示一次性写/顺序访问的设备遇到空介质或
0x0aCOPY_ABORTED表示COPY、COMPARE或COPY AND VERIFY命令取消,原因是源设备或目标设备或两者有一个错误条件。
0x0bABORTED_COMMAND表示Target取消了命令,SCSI initiator可以重试这个命令来修复。
0x0dVOLUME_OVERFLOW带缓冲的设备中,访问量分区的末尾,但数据仍在Buffer中,没有写入介质。 RECOVER BUFFERED DATA命令来从缓冲区中读取数据。
0x0eMISCOMPARE表示源数据和从介质中读取的数据不一致。

hostbyte、driverbyteSense Key 含义摘自 http://ilinuxkernel.com/


SCSI 错误信息表整理
http://xxxdk.xyz/xxx/2020/01/SCSI-错误信息表整理/
作者
sni
发布于
2020年1月11日
许可协议