ISSUE 链接
[缺陷]: 硬盘上电时间数据类型覆盖不了应用场景-storage-AtomGit | GitCode
背景
当前用户通过IPMI命令获取指定物理盘信息,获取到的硬盘累计通电时间为2字节。实际从raid卡控制器获取到的硬盘累计通电时间为4字节,存在数据失真问题。
两个字节的内容最大可以表示7.48年,目前现网已经有5.17年的场景
评审点
有两个方案:
方案1:IPMI 新增获取指定物理盘信息命令
方案2:IPMI 变更获取指定物理盘信息命令
方案1:IPMI 新增获取指定物理盘信息命令
命令名称: GetPhysicalDiskInfo
命令说明: 查询指定物理盘的基本信息
命令权限: ReadOnly
是否锁定之后可以访问: 是
是否有敏感数据: 否
命令样式:
- 请求:
ipmitool raw 0x30 0x90 <ManufacturerID> <SubCommand> <Reserve> <ParameterSelector> <SetSelector> <PhysicalDriveID> <ExternSelector> <ReadingOffset> <ReadingLength> - 响应:
<CompletionCode> <ManufactureId> <Reserve> <Data>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | SubCmd,固定为 3Dh |
| 5 | Reserve, 1字节,保留 |
| 6 | ParameterSelector, 1字节,固定为 0x1D,用于新接口获取指定物理盘信息 |
| 7 | SetSelector,1字节,固定为 0xFF,不涉及 |
| 8 | PhysicalDriveID,1字节,物理盘ID |
| 9 | ExternSelector,1字节,固定为 0xFF,不涉及 |
| 10:11 | ReadingOffset,2字节,获取参数的偏移 |
| 12 | ReadingLength,1字节,获取参数的长度 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 5 | Reserve,bit[7:1]: reserved,bit[0]取值如下:0 = last frame 1 = casecade frame |
| 6:N | Data,字符串,其中 data(M1 + M2 + M3 + M4 + 42):data(M1 + M2 + M3 + M4 + 45) 四个字节表示累计上电时间。M1表示硬盘厂商名称,M2表示硬盘序列号,M3表示硬盘型号,M4表示硬盘固件版本,均为非固定长度数据。 |
命令示例:
样例1: 查询指定物理盘信息
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x3D 0x00 0x1D 0xff 0x01 0xff 0x00 0x00 0xee - 响应:
db 07 00 00 07 53 41 4d 53 55 4e 47 0e 53 36 38 31 4e 59 30 4e 37 30 32 35 33 30 1a 53 41 4d 53 55 4e 47 20 4d 5a 37 4c 48 34 38 30 48 41 48 51 2d 30 30 30 30 35 08 48 58 54 37 34 30 34 51 00 08 00 01 03 03 03 21 80 fa 06 00 00 00 00 00 00 00 00 00 00 00 00 63 00 00 00 00 00 00 00 00 00 00 00 00 00 70 6f 00 00
方案2:IPMI 变更获取指定物理盘信息命令
命令名称: GetPhysicalDriveInfo
命令说明: 查询指定物理盘的基本信息
命令权限: ReadOnly
是否锁定之后可以访问: 是
是否有敏感数据: 否
命令样式:
- 请求:
ipmitool raw 0x30 0x90 <ManufacturerID> <SubCommand> <Reserve> <ParameterSelector> <SetSelector> <PhysicalDriveID> <ExternSelector> <ReadingOffset> <ReadingLength> - 响应:
<CompletionCode> <ManufactureId> <Reserve> <Data>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | SubCmd,固定为 3Dh |
| 5 | Reserve, 1字节,保留 |
| 6 | ParameterSelector, 1字节,固定为 0x0A |
| 7 | SetSelector,1字节,固定为 0xFF,不涉及 |
| 8 | PhysicalDriveID,1字节,物理盘ID |
| 9 | ExternSelector,1字节,固定为 0xFF,不涉及 |
| 10:11 | ReadingOffset,2字节,获取参数的偏移 |
| 12 | ReadingLength,1字节,获取参数的长度 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 5 | Reserve,bit[7:1]: reserved,bit[0]取值如下:0 = last frame 1 = casecade frame |
| 6:N | Data(累计上电时间变更为4字节),其中 data(M1 + M2 + M3 + M4 + 42):data(M1 + M2 + M3 + M4 + 45) 四个字节表示累计上电时间。M1表示硬盘厂商名称,M2表示硬盘序列号,M3表示硬盘型号,M4表示硬盘固件版本,均为非固定长度数据。 |
命令示例:
样例1: 查询指定物理盘信息
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x3D 0x00 0x0A 0xff 0x01 0xff 0x00 0x00 0xee - 响应:
db 07 00 00 07 53 41 4d 53 55 4e 47 0e 53 36 38 31 4e 59 30 4e 37 30 32 35 33 30 1a 53 41 4d 53 55 4e 47 20 4d 5a 37 4c 48 34 38 30 48 41 48 51 2d 30 30 30 30 35 08 48 58 54 37 34 30 34 51 00 08 00 01 03 03 03 21 80 fa 06 00 00 00 00 00 00 00 00 00 00 00 00 63 00 00 00 00 00 00 00 00 00 00 00 00 00 70 6f 00 00
评审结论
同意方案二:
1.同意变更接口:
当硬盘上电时间小于等于65535时,保持原有命令返回形式不变,硬盘上电时间以2字节返回。
当硬盘上电时间大于65535时,硬盘上电时间以4字节返回.
遗留问题
1.调研影响:
通过社区发帖调研,结果为没有影响。帖子链接如下: 【调研】IPMI命令“获取指定硬盘信息”变更影响确认 - 交流互助区 - openUBMC 论坛