raw 命令解决什么问题
ipmitool 只封装了常用命令,一些冷门能力(厂商扩展命令、未提供子命令的规范命令)没有现成入口,这时可以用 raw 直接下发原始 IPMI 请求:按 NetFn 与 CMD 组包,再按对应命令的响应定义解析返回字节。它最常见的用途是验证某条命令是否被 BMC 支持,以及和封装命令的输出交叉核对。
基本信息
| 命令格式 | raw <netfn> <cmd> [数据字节...] |
|---|---|
| NetFn 含义 | 0x00 机箱、0x04 传感器与事件、0x06 应用、0x0A 存储 |
| 返回值 | 原始字节流,按对应命令的响应定义逐字节解析 |
| 权限要求 | 只读类命令用普通带外账号即可;写操作需谨慎 |
| 典型用途 | 验证命令支持性、与封装命令交叉核对、厂商扩展命令 |
典型使用场景
- 验证某条命令是否被支持:封装工具报错时用 raw 看底层返回码
- 交叉核对:把 raw 的原始字节与 ipmitool 封装输出对齐,确认解析无误
- 厂商扩展命令:部分带外功能只在 IPMI 规范外实现,只能靠 raw 调用
- 排障取证:把原始请求与响应字节附在工单里,便于厂商复现
- 自动化脚本:需要精确控制参数字节时用 raw 而非封装命令
raw 示例
raw 示例
# Get Device ID:NetFn 0x06,CMD 0x01
ipmitool -I lanplus -H 10.0.0.10 -U admin -f /root/.ipmi_pass raw 0x06 0x01
# Get Chassis Status:NetFn 0x00,CMD 0x01
ipmitool -I lanplus -H 10.0.0.10 -U admin -f /root/.ipmi_pass raw 0x00 0x01
# Get SEL Info:NetFn 0x0A,CMD 0x40
ipmitool -I lanplus -H 10.0.0.10 -U admin -f /root/.ipmi_pass raw 0x0a 0x40
# Get Sensor Reading:NetFn 0x04,CMD 0x2D,需带传感器编号
ipmitool -I lanplus -H 10.0.0.10 -U admin -f /root/.ipmi_pass raw 0x04 0x2d 0x20常用 NetFn 与命令对照
| NetFn | CMD | 命令 | 用途 |
|---|---|---|---|
| 0x06 | 0x01 | Get Device ID | 查询 BMC 固件版本、规范版本与能力位 |
| 0x00 | 0x01 | Get Chassis Status | 读取机箱电源与状态位 |
| 0x0A | 0x40 | Get SEL Info | 查询 SEL 条目数与最新记录编号 |
| 0x04 | 0x2D | Get Sensor Reading | 读取指定传感器的原始读数 |
返回字节要按规范逐位解析,不认识某个字节时不要凭推测下结论:先查该命令的响应定义,或在测试设备上对照封装命令的输出验证。
raw 也能发出写类命令(断电、改启动项、清 SEL):在生产设备上只用只读命令,任何写操作先到测试机验证参数。
带外连接方式会影响可用命令:-I lanplus 走 IPMI 2.0 的 RMCP+ 加密通道,大多数现代 BMC 用它;老设备可能只支持 -I lan,具体以设备手册与实测为准。命令被支持但参数越界时,BMC 通常返回完成码而非直接报错,这也是需要逐字节解析响应的原因。