SCSI 应用程序客户端日志页 - 如何写入它?
SCSI application client log page - how to write to it?
正如我从 SCSI 命令参考手册中了解到的,许多 scsi 设备都为自定义日志保留了位置。这是页面 0xF - 应用程序客户端日志页面。所以我正在寻找一种方法将一些数据写入该区域。
起初我尝试使用 sg_logs 命令,但没有成功。我不确定这种情况下的问题是什么——要么我给那个命令错误的标志,要么我发送的消息不正确。 sg_logs 的手册页说:
The Application Client log page has 64 log parameters with parameters codes 0 to 63.
Each can hold 252 bytes of user binary data. That 252 bytes (or less) of user data, with
a 4 byte prefix (for a total of 256 bytes) can be provided with the --in=FN option. A
typical prefix would be '0,n,83,fc'. The "n" is the parameter code in hex so the last log
parameter would be '0,3f,83,fc'. That log parameter could be read back at some later
time with '--page=0xf --filter=0x<n>'.
我给出了以下命令:
sg_logs --in=- --page=0xf --select /dev/sda -s -vvv
0 0 83 fc aa bb cc dd
其中 aa bb cc dd
是我要写入日志页面的内容。
我收到此请求后得到以下信息,但不知道如何找出问题所在:
open /dev/sda with flags=0x802
inquiry cdb: 12 00 00 00 24 00
duration=0 ms
HGST HUH721212AL5204 C3D0
log select cdb: 4c 01 4f 00 00 00 00 00 08 00
log select parameter list
00 00 83 fc aa bb cc dd
duration=2 ms
log select:
Descriptor format, current; Sense key: Illegal Request
Additional sense: Invalid field in cdb
Descriptor type: Sense key specific: Field pointer:
Error in Command: byte 2 bit 5
Descriptor type: Field replaceable unit code: 0x0
Descriptor type: Vendor specific [0x80]
f8 23
Raw sense data (in hex):
72 05 24 00 00 00 00 10 02 06 00 00 cd 00 02 00
03 02 00 00 80 02 f8 23
看来我真的必须深入了解 scsi 设备如何通信以及 cdb 是如何构造的,但是我尝试用作指南的 SCSI 命令参考手册似乎以非常一般的方式假设了所有内容并且我不知道在哪里可以找到我的问题的解决方案。
如果能提供有关此问题的任何信息,我将不胜感激。
来自 SPC-5 规范
日志select:
If the PARAMETER LISTLENGTH fild is not zero,and PAGE CODE or SUBPAGE CODE is set to a value other than zero,then the device servers shall terminate the cmd with CHECK CONDITION stutus.
这就是为什么您无法成功执行日志 select cmd 的原因。
因此您应该在日志 select CDB 中将 PAGE CODE 和 SUBPAGE CODE 设置为零。每个日志页面都有 page/subpage 代码来标识自己。
如果要发送一个或多个日志参数,也记得将参数代码值按升序排列。
正如我从 SCSI 命令参考手册中了解到的,许多 scsi 设备都为自定义日志保留了位置。这是页面 0xF - 应用程序客户端日志页面。所以我正在寻找一种方法将一些数据写入该区域。
起初我尝试使用 sg_logs 命令,但没有成功。我不确定这种情况下的问题是什么——要么我给那个命令错误的标志,要么我发送的消息不正确。 sg_logs 的手册页说:
The Application Client log page has 64 log parameters with parameters codes 0 to 63.
Each can hold 252 bytes of user binary data. That 252 bytes (or less) of user data, with
a 4 byte prefix (for a total of 256 bytes) can be provided with the --in=FN option. A
typical prefix would be '0,n,83,fc'. The "n" is the parameter code in hex so the last log
parameter would be '0,3f,83,fc'. That log parameter could be read back at some later
time with '--page=0xf --filter=0x<n>'.
我给出了以下命令:
sg_logs --in=- --page=0xf --select /dev/sda -s -vvv
0 0 83 fc aa bb cc dd
其中 aa bb cc dd
是我要写入日志页面的内容。
我收到此请求后得到以下信息,但不知道如何找出问题所在:
open /dev/sda with flags=0x802
inquiry cdb: 12 00 00 00 24 00
duration=0 ms
HGST HUH721212AL5204 C3D0
log select cdb: 4c 01 4f 00 00 00 00 00 08 00
log select parameter list
00 00 83 fc aa bb cc dd
duration=2 ms
log select:
Descriptor format, current; Sense key: Illegal Request
Additional sense: Invalid field in cdb
Descriptor type: Sense key specific: Field pointer:
Error in Command: byte 2 bit 5
Descriptor type: Field replaceable unit code: 0x0
Descriptor type: Vendor specific [0x80]
f8 23
Raw sense data (in hex):
72 05 24 00 00 00 00 10 02 06 00 00 cd 00 02 00
03 02 00 00 80 02 f8 23
看来我真的必须深入了解 scsi 设备如何通信以及 cdb 是如何构造的,但是我尝试用作指南的 SCSI 命令参考手册似乎以非常一般的方式假设了所有内容并且我不知道在哪里可以找到我的问题的解决方案。
如果能提供有关此问题的任何信息,我将不胜感激。
来自 SPC-5 规范
日志select:
If the PARAMETER LISTLENGTH fild is not zero,and PAGE CODE or SUBPAGE CODE is set to a value other than zero,then the device servers shall terminate the cmd with CHECK CONDITION stutus.
这就是为什么您无法成功执行日志 select cmd 的原因。
因此您应该在日志 select CDB 中将 PAGE CODE 和 SUBPAGE CODE 设置为零。每个日志页面都有 page/subpage 代码来标识自己。
如果要发送一个或多个日志参数,也记得将参数代码值按升序排列。