用于 SCSI、SATA、SAS、iSCSI 硬盘驱动器、磁带驱动器和库外围设备的专业工程、筛选和测试软件,通过现成的 HBA 提供
自从我们解决 SCSI 命令合规性测试的主题以来,已经有好几年了。 本文将详细介绍最新的 SCSI 命令合规实用工具 2.0 版– STB Suite的重要组成部分。
SCSI 命令合规实用程序的目的是向目标设备发出 CDB,并记录发送 CDB 的结果。
根据 SCSI 规范或设备制造商文档,发送的 CDB 可以是“合法”或完全有效的 CDB。
或者国开行发行的可能是“非法”或无效的多种方式。
一个“合法的” CDB 示例是一个 INQUIRY CDB,它是一个 6 字节的 CDB,具有一个 DATA OUT 阶段,其中包含从设备返回的多个字节数据。 在本例中为 16 个字节。 这个 CDB 看起来像这样:
0x12,00,00,00,0×20,00
此 CDB 的“非法”版本可能有一个字节,其中设置了指定为保留位的位
0x12,0xF0,00,00,0×20,00
此外,可以使用在任何字节中定义的许多 “reserved” 位来定义 CDB。 合规实用程序将自动将 1 位插入到已定义的每个保留位中。 这使您可以使用一个 CDB 定义导致发出多个 CDB,将 1 位遍历定义的保留位。
命令合规性实用程序将发出 CDB,这些 CDB 定义在文本 CDB 定义文件中。 如果 CDB 因 CHECK CONDITION 而失败,则将返回 Sense Data,并可选择根据预期值进行检查。 结果将写入输出日志文件。
用户界面具有指定设备目标地址的输入字段,以及指定要使用的 CDB 定义文件和输出报告的文件名的字段。
输入驱动器HBA、目标和LUN 地址,然后单击扫描按钮。 如果找到该设备,则它的 INQUIRY 信息将显示在 Drive Info 字段中。
在CDB File字段中命名要在测试运行中使用的CDB文件,在字段中命名输出报告文件的名称 结果字段。
你可以根据你的需要创建尽可能多的CDB定义文件。例如,你可以有一个CDB文件,只发布“非破坏性”CDB’的–读,但没有写或格式。
或者,您可以拥有一个包含合法磁盘命令的 CDB 文件和另一个包含非法磁盘命令的 CDB 文件,其他文件用于磁带命令,其他文件用于供应商独有的命令。
每个 CDB 文件最多可以包含 200 个 CDB 的定义。
CDB 文件的每一行都包含相同的字段模式:
“CDB length, Data Direction, Transfer length, CDB fields, [Command Title], Expected Sense Key, Expected Sense Code, Expected ASQ ”
CDB 长度是 CDB 中的字节数,必须为 6、10 或 12。
数据方向是 00 表示数据输出或 01 表示数据输入。
传输长度是要传输的十六进制字节数。 此字段限制为 3 位数字。
CDB 字段由 SCSI CDB 布局中指定的标准 CDB 组成。 但是,对应于 CDB 保留位的字节在 CDB 文件的字段中具有特殊格式,以允许屏蔽保留位以测试合规性。
使用模式 “|hh” 指定掩码。 其中 hh 表示指定保留位的两个十六进制数字。 例如,如果位 1 到 4 在特定 CDB 中保留,则掩码为 |1E。 掩码的位置在包含需要检查的保留位的标准 CDB 字节之后立即指定。 例如,Inquiry 命令在 CDB 的字节 1 中保留了位 1 到 4。 假设逻辑单元为零的总掩码看起来像 “00|1E”。 如果指定了掩码,则在合规性测试期间,掩码中的每个位都与标准 CDB 字节中的位进行“或”运算。
命令标题 是您希望在报告文件中为该 CDB 打印的名称。 必须用 “[ ]” 包围。 – 例如 [10 字节读取]
Expected Sense Key、Code 和 ASQ 字段是可选的。 如果您确实包含预期的感知数据,则应将其输入为十六进制数字,例如 05、24、00。
下面是一个包含三个条目的 CDB 文件示例:
"## DISK ##"
"06,01,200,08,00,00,00,01,00,[READ],05,24,00"
"10,01,200,28,00,00,00,00,00,00,00,01,00,[EXTENDED READ],05,20,00"
"06,01,00,00,00|1F,00|FF,00|FF,00|FF,00,[ILLEGAL-REZERO],05,26,00"
第一行“## DISK##” 是标题,将打印在输出报告的顶部。
下一行定义了一个 6 字节的 READ CDB。 它定义将有 0x200 字节的 DATA IN 并且在 CHECK CONDITION 的情况下预期的 Sense 数据是 05/24/00
最后一个 CDB 条目定义了一个带有保留位的 CDB。
"06,01,00,00,00|1F,00|FF,00|FF,00|FF,00,[ILLEGAL-REZERO],05,26,00"
上述 CDB 中的粗体部分表示将 1 遍历该 CDB 字节的 00 和 0x1f 之间的所有位。 下一个字节是相同的,但定义了从 00 到 0xff 的 1,换句话说,通过该字节的所有位位置。
为了帮助使此操作更清晰,这里是使用此 CDB 定义生成的输出文件的一部分:
"CDB[ILLEGAL-REZERO]= 00,00,00,00,00,00 passed"
"CDB[ILLEGAL-REZERO]= 00,01,00,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
"CDB[ILLEGAL-REZERO]= 00,02,00,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
"CDB[ILLEGAL-REZERO]= 00,04,00,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
"CDB[ILLEGAL-REZERO]= 00,08,00,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
"CDB[ILLEGAL-REZERO]= 00,10,00,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
"CDB[ILLEGAL-REZERO]= 00,00,01,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
"CDB[ILLEGAL-REZERO]= 00,00,02,00,00,00 failed Sense = 05/24/00 Expected 5/26/0 MISMATCH"
.
.
.
如粗体红色数字所示,1 位遍历 CDB 字节 1 的每个保留位位置,然后是字节 2,依此类推。
每次运行该实用程序都会生成一个标准文本文件。 这是磁盘测试输出的示例:
"SCSI 命令合规性测试 2.0 版 120620"
"已测试的 SCSI 设备 = 适配器 = 7,目标 = 0,LUN = 0"
"Vendor = SEAGATE , Product = ST3450857SS , Revision = ES62"
" "
"## DISK ##"
"CDB[READ]= 08,00,00,00,01,00 passed"
""
"CDB[EXTENDED READ]= 28,00,00,00,00,00,00,00,01,00 passed"
""
"CDB[WRITE]= 0A,00,00,00,01,00 passed"
""
"CDB[EXTENDED WRITE]= 2A,00,00,00,00,00,00,00,00,00 passed"
"CDB[CHANGE DEFINITION]= 40,00,00,00,00,00,00,00,00,00 failed Sense = 05/20/00 Expected 5/20/0 OK"
""
"CDB[COMPARE]= 39,00,00,00,00,00,00,00,00,00 failed Sense = 05/20/00 Expected 5/20/0 OK"
"
"CDB[SEND DIAGNOSTIC]= 1D,00,00,00,00,00 failed Sense = 05/24/00 Expected 5/20/0 MISMATCH"
注意:如果 CDB 定义文件条目定义了 Expected Sense Key、Expected Sense Code 和 Expected ASQ,并且发生了 CHECK CONDITION,则将记录实际检测数据和预期检测数据,以及“MISMATCH”之一。 或“好的” 取决于预期的感知数据是否是生成的。
CDB 合规实用程序非常通用,允许发布任何 CDB 并从任何类型的 SCSI、SAS 或光纤通道设备收集结果。 由于该实用程序使用简单的文本文件来定义要执行的 CDB,因此该实用程序永远不会过时,因为可以定义包含任意数量的 CDB(每个文件最多 200 个)的 CDB 定义文件。
使用文本文件来定义要测试的 CDB 的另一个优点是可以将相似类型的 CDB 组合在一起。 面向磁盘的 CDB、面向磁带的 CDB 等。此外,可以为具有“破坏性”的 CDB 创建单独的 CDB 文件。 (写入驱动器,格式等)与仅具有非破坏性命令的文件。