使用ipmitool获取服务器电源序列号失败,求正确操作方案
问题分析与解决方法
操作错误点
你当前的命令参数顺序有误:ipmitool i2c 操作PMBus设备时,正确的参数顺序应为 bus=<总线号> <设备地址> <PMBus命令码> <读取长度>,但你把**读取长度(0x18)放在了命令码(0x9e)**前面,导致发送的不是正确的MFR_SERIAL命令请求,自然得不到正确的序列号。
另外,你得到的响应中,前字节14(十进制20)是PMBus返回的有效数据长度,后面的30 31 ... 39是ASCII字符,转成字符串是0123456789-123456789,但因为命令顺序错误,这并非目标电源的真实序列号。
正确获取方法
方法1:修正ipmitool命令参数顺序
执行正确的命令:
ipmitool i2c bus=3 0xb2 0x9e 0x18
获取响应后,将十六进制字节直接转换为ASCII字符(跳过可能的前导长度字节,具体看设备返回格式),即可得到正确的序列号。
方法2:使用FRU命令直接读取(更简便)
服务器电源的序列号通常存储在FRU(Field Replaceable Unit)数据中,无需直接操作PMBus,直接执行:
ipmitool fru print
在输出中找到对应电源的FRU条目,里面会明确标注序列号信息。
方法3:用i2c-tools直接操作PMBus
如果更倾向于直接操作I2C总线,可使用i2c-tools工具包:
# 发送MFR_SERIAL命令码0x9e到总线3的设备0xb2 i2cset -y 3 0xb2 0x9e # 读取24字节的响应数据 i2cget -y 3 0xb2 0x00 w 0x18
同样将返回的十六进制转换为ASCII即可得到序列号。
内容的提问来源于stack exchange,提问作者deecobrasus
相关产品推荐
相关产品推荐

