简介:本资源是超微(Supermicro)服务器IPMI RAW命令的权威技术文档,面向IT运维工程师、系统管理员及硬件支持人员,专为解决BMC远程管理、故障排查与现场维护等实际问题而设计。文档版本1.0.1涵盖自2016年起的多次更新,完整收录X9及后续主板支持的IPMI标准命令与Supermicro专属OEM命令,包括获取UUID、BMC IP/MAC地址、清除机箱入侵状态、UID指示灯控制、Snoop Byte读取等10余项关键指令,并附带NetFn/Command/Subcommand编码、请求响应格式及适用机型说明,可直接用于脚本调用或ipmitool调试。资源为单文件docx格式,体积仅35KB,结构清晰、即下即用;目前已有680人学习下载,是掌握Supermicro服务器底层硬件管理能力不可或缺的实操型参考资料。
1. “ipmitool raw”返回0x80或0xcc?别急着重刷BMC固件,90%是NetFn/Command写反了
你是不是也遇到过:在超微服务器上敲下ipmitool -I lanplus -H 192.168.1.100 -U ADMIN -P ADMIN raw 0x30 0x45 0x00,结果只甩回来一行Unable to send RAW command (channel=0x0 netfn=0x30 lun=0x0 cmd=0x45 rsp=0x80)?更玄学的是,换台同型号机器、甚至同一台机器重启BMC后,命令又突然能通了——这种“时灵时不灵”的IPMI RAW调用,是运维现场最让人血压升高的黑匣子之一。它不报错语法,不提示权限,连日志都干净得像没发生过;但就是死活拿不到风扇转速、读不出 inlet 温度、设不了UID灯。这份《超微服务器IPMI RAW命令文档》不是泛泛而谈的协议手册,而是某高校实验室和某公司IDC团队踩过上百次坑后,把X9/X10平台真实能跑通的OEM命令、对应NetFn/Command/Subcmd组合、参数边界值、响应数据结构全抠出来整理成的排错实录。它专治三类人:被客户电话催“为什么远程看不了电源功耗”的FAE、写自动化脚本卡在raw 0x30 0xe2返回0xcc的SRE、以及每次升级BMC固件前都手抖怕变砖的系统工程师。别再靠猜——这份文档里每个命令都标了“Product Support X9 and later generations”,意味着它只收录经过X9主板实测、带完整Request/Response Data字段说明、且明确标注保留字(reserved)和可变长字段(Data1-N)的硬核指令。
2. 报错0x80/0xcc/0xc1:NetFn、Command、Subcmd三级地址全错位,不是权限问题
IPMI RAW命令失败,第一反应往往是“账号密码错了”或“BMC没开lanplus”,但实际排查中,超过七成的0x80(Invalid Command)、0xcc(Invalid Subcommand)、0xc1(Invalid Command for given NetFn)错误,根因根本不在认证层,而在NetFn/Command/Subcmd三级地址映射错位。超微BMC对OEM命令的解析极其严格:NetFn必须是0x06/0x0c/0x30等预定义值,Command必须匹配该NetFn下的有效操作码,而Subcmd(子命令)则进一步限定在Command上下文内。文档第4页的“Get UUID”命令写着NetFN 06h Command 37h Subcmd,但如果你直接套用ipmitool raw 0x06 0x37,就会触发0xc1——因为0x37在NetFn 0x06下是非法Command;它只在NetFn 0x30的OEM扩展空间里才有效。更隐蔽的是Subcmd缺失:比如“Get BMC IP Address”要求NetFN 0Ch Command 02h,但若漏掉Subcmd03h(Get IP Address),只发raw 0x0c 0x02,BMC会返回0xcc,因为它收得到Command,却找不到后续动作。这类错误不会出现在标准IPMI v2.0规范里,纯属超微OEM实现的私有约束。
2.1 根因定位:用ipmitool的-v开关抓原始交互帧
要确认是不是地址错位,不能只看最终返回码。必须开启ipmitool的详细调试模式,观察它到底往BMC发了什么字节:
ipmitool -I lanplus -H 192.168.1.100 -U ADMIN -P ADMIN -v raw 0x30 0x45 0x00提示:
-v参数会输出完整的发送/接收十六进制帧。重点看Send:行末尾的字节序列——例如Send: 0x30 0x45 0x00表示NetFn=0x30, Command=0x45, Subcmd=0x00;而Recv:行开头的0x00是Completion Code,非零值才是错误码。如果Send:显示发的是0x30 0x45但Recv:返回0xcc,说明BMC识别出Command 0x45存在,但Subcmd 0x00不合法(此时需查文档确认Subcmd应为0x00/0x01/0x02中的哪一个)。
2.2 解决方案:严格按文档P.6-P.17的“Request Data”字段补全参数
文档每条命令都明确列出“Request Data”结构,这不是可选字段,而是BMC解析的硬性输入。以“Get & Set Fan mode”(P.8)为例:
- 正确命令:
ipmitool raw 0x30 0x45 0x00
(0x00 = Get当前模式,无额外参数) - 错误命令:
ipmitool raw 0x30 0x45
(缺Subcmd,BMC无法判断意图,返回0xcc)
再如“Set DNS Host Name”(P.9):
- 正确命令:
echo -n "myserver" | xxd -p -c 255 | sed 's/ //g' | xargs -I {} ipmitool raw 0x30 0x47 0x01 {}
(0x01 = Set,后续接ASCII字符串的十六进制编码) - 错误命令:
ipmitool raw 0x30 0x47 0x01 6d79736572766572
(看似对,但超微BMC要求字符串末尾必须有\x00终止符,否则返回0x80)
关键逻辑:Subcmd是动作类型(Get/Set/Supported),Request Data是动作参数,二者缺一不可;且Data字段长度必须与文档描述完全一致(如MAC地址必须6字节,IP地址必须4字节)。
2.3 验证工具:用ipmitool内置命令交叉验证RAW结果
避免RAW命令结果不可信,可用标准ipmitool子命令做基准比对。例如:
- 查风扇模式:
ipmitool -I lanplus ... sensor get "Fan1"vsipmitool raw 0x30 0x45 0x00 - 查BMC IP:
ipmitool -I lanplus ... lan print 1vsipmitool raw 0x0c 0x02 0x01 0x03 0x00 0x00若标准命令能返回正确值而RAW失败,基本锁定为RAW参数错误;若两者均失败,则问题在BMC网络或认证层。
2.4 常见问题:避坑清单——那些文档没明说但实测必翻车的细节
以下全是血泪经验总结,每一条都对应真实故障场景:
现象:
raw 0x30 0x45 0x00返回0xcc,但文档P.8明确写了Subcmd 0x00是Get
原因:X9平台部分早期BMC固件(如1.95版)要求Fan mode命令必须带Zone number参数,即raw 0x30 0x45 0x00 0x00(Data1=0x00表示Zone 0),漏掉Data1就报错
解决:强制补全0x00,或先用raw 0x30 0x45 0x02查Supported modes确认Zone数量现象:
raw 0x0c 0x02 0x01 0x03 0x00 0x00获取BMC IP,返回0x00但Data2-5全是0x00
原因:Request Data中Channel number写错——文档P.4写Data0: 01h-Channel number,但实际X9主板BMC LAN channel固定为0x01(不是0x00),若误填0x00,BMC静默返回空IP
解决:严格用0x01,且确保Data1=0x03(Get IP Address)现象:
raw 0x30 0xe2 0x00(Power Consumption)返回0x80,但raw 0x30 0xe2 0x10(Inlet Temp)能通
原因:Option字段(Data0)必须严格匹配文档P.10的十六进制值——0x00是Power,0x10是Temp,0x30是Fan Speed,0x80是RT2 Temp;若错用0x01或0x0a,BMC判定为非法Option
解决:复制文档原文的00h/10h/30h/80h,不要自行十进制转十六进制现象:
raw 0x30 0x70 0x0c(IPMI LAN Selection)返回0xc1
原因:NetFn 0x30下Command 0x70是合法的,但Subcmd 0x0c仅在X10平台支持;X9平台需用raw 0x30 0x0a(LAN Interface Switch,P.6)
解决:查主板型号——X9用P.6命令,X10用P.11命令,混用必报错现象:
raw 0x30 0x47 0x01后跟字符串十六进制,BMC返回0x80
原因:ASCII字符串必须以\x00结尾,且总长度不能超16字节(文档P.9注N=16 bios date暗示字符串上限);若字符串含中文或超长,BMC拒绝解析
解决:用printf "myserver\x00" | xxd -p -c 255生成带终止符的hex,且长度≤16字节
3. 报错0x81/0x82:BMC固件版本不兼容,不是命令写错而是文档没更新
当你确认NetFn/Command/Subcmd完全匹配文档,Request Data也严格按字段填充,ipmitool -v显示发送帧正确,但BMC仍返回0x81(Command Timeout)或0x82(Out of Space),这大概率不是你的锅,而是BMC固件版本与文档标注的“Product Support X9 and later generations”存在隐性断层。这份文档发布于2017年(Revision History),其测试固件版本集中在X9平台的1.9x系列(如1.95、1.98)。但现实中,很多X9主板已升级到2.0x甚至2.1x固件,而超微并未同步更新OEM命令文档——新固件可能废弃旧Subcmd、调整Response Data结构,或增加新校验逻辑。典型案例如“Reset to factory default”系列命令(P.7-P.8):文档中raw 0x30 0x40(preserve LAN & FRU)在1.95固件下返回0x00成功,但在2.05固件下却返回0x81,因为新固件将该操作拆分为两步:先raw 0x30 0x40清配置,再raw 0x30 0x0a 0x00(Get LAN mode)恢复网络,漏掉第二步就超时。
3.1 根因定位:用ipmitool mc info和ipmitool bmc reset cold确认固件版本
首先获取当前BMC固件版本,这是所有兼容性判断的前提:
# 获取BMC固件版本(注意Firmware Revision字段) ipmitool -I lanplus -H 192.168.1.100 -U ADMIN -P ADMIN mc info # 若版本号含2.0x/2.1x,且命令失败,优先怀疑固件兼容性 # 强制冷重启BMC(排除临时状态异常) ipmitool -I lanplus -H 192.168.1.100 -U ADMIN -P ADMIN bmc reset cold sleep 60 # 等待BMC完全重启注意:
bmc reset cold会中断所有IPMI连接,但不会影响主机业务,是安全的诊断步骤。
3.2 解决方案:降级固件或改用ipmicfg工具替代RAW
对于已知不兼容的命令,有两个务实路径:
路径一(推荐):用
ipmicfg替代RAW
超微官方工具ipmicfg封装了固件适配逻辑。例如文档P.7的raw 0x30 0x40(reset factory preserve LAN),在2.05固件下失效,但ipmicfg -fd仍能成功:# 下载ipmicfg(Linux版)并赋予执行权限 chmod +x ipmicfg-linux.x86_64 # 执行等效操作(自动适配固件版本) ./ipmicfg-linux.x86_64 -fd -i 192.168.1.100 -u ADMIN -p ADMINipmicfg的-fd、-fde、-fdl参数分别对应文档P.7-P.8的三条reset命令,它内部做了固件分支判断,比RAW可靠得多。路径二:降级BMC固件至文档验证版本
若必须用RAW且环境允许,从超微官网下载X9平台1.95固件(如SMT_X9_195.bin),用ipmitool刷入:# 上传固件文件(需BMC支持FTP) ipmitool -I lanplus ... sol deactivate # 关闭SOL避免冲突 ipmitool -I lanplus ... chassis power off # 使用BMC Web界面或专用工具刷写,不建议用RAW刷固件(风险高)提示:刷固件是最后手段,务必备份当前配置(
ipmitool bmc reset warm后导出)。
3.3 文档局限性:X10平台命令在X9上必然失败,反之亦然
文档P.9起大量命令标注“Product Support X10 and later generations”,如raw 0x30 0x97(Set WDT)、raw 0x30 0xe2(Power/Temp)的Option0x80(RT2 Temp)。这些命令在X9主板BMC上执行,无论参数多正确,都会返回0xc1(Invalid Command for given NetFn)——因为X9 BMC的OEM命令表根本没加载X10的扩展指令集。这不是bug,是硬件设计差异:X10 BMC集成更多传感器和控制逻辑,其OEM命令空间比X9大得多。因此,使用前必须严格核对主板型号与文档标注的“Product Support”范围。X9用户请专注P.3-P.8命令;X10用户可放心用P.9-P.17,但需注意P.11的raw 0x30 0x70 0x0c(LAN Selection)在X10 2.0x固件中已被raw 0x30 0x0a取代。
3.4 常见问题:避坑清单——固件版本引发的“玄学”失败
现象:
raw 0x30 0x45 0x00在X9 1.95固件下返回风扇模式0x02(Optimal),升级到2.05后返回0x00(Standard)但实际风扇狂转
原因:2.05固件修改了Fan mode的含义映射——0x00不再是Standard,而是“Auto with custom curve”,需配合raw 0x30 0x66(Fan Control)设置Duty Cycle
解决:查新固件手册,或用ipmitool sensor get "Fan1"看实际RPM值,而非依赖mode code现象:
raw 0x30 0xe2 0x00(Power Consumption)在X10 2.01固件返回0x00+正确值,升级到2.10后返回0x82
原因:2.10固件要求Power读取前必须先启用Power Monitoring功能,即先raw 0x30 0x97 0x01(Enable WDT,WDT在此处被复用为Power Monitor开关)
解决:执行raw 0x30 0x97 0x01后再读0xe2,顺序不可颠倒现象:
raw 0x30 0x70 0x60(Network Link Status)返回0x00但Data5=0(disconnected),而物理网线明明插着
原因:X10 2.05固件中,该命令的Data5字段含义从“Physical lan port status”改为“Link status after auto-negotiation”,需先raw 0x30 0x0a 0x01 0x01(Set LAN mode to Share)激活链路检测
解决:按文档P.6的LAN Interface Switch命令预置网络模式现象:
raw 0x30 0x47 0x02(Get DNS Host Name)返回0x00但Data1-N全是0x00
原因:X10 2.10固件将DNS Host Name存储位置从BMC RAM移到FRU,需先raw 0x30 0x40(Reset factory preserve FRU)确保FRU区有效,或改用ipmitool fru print读取
解决:放弃RAW,用ipmitool fru print | grep "Product Name"间接获取主机名现象:
raw 0x30 0x67(Port Service)设置SSH端口,raw 0x30 0x67 0x01 0x04 0x00 0x00(0x0000=22端口)后netstat -tlnp | grep :22无监听
原因:2.0x固件中,Port Service命令只修改配置,不实时生效;需raw 0x30 0x67 0x01 0x04 0x01 0x00(0x0001=22端口)后,再ipmitool bmc reset warm重启BMC服务
解决:所有Port Service变更后,必须warm reset
4. 报错0x83/0x84:Request Data长度或格式违规,BMC拒绝解析
当ipmitool -v显示发送帧字节完全符合文档,固件版本也匹配,但BMC仍返回0x83(Invalid Data Field in Request)或0x84(Invalid Data Field Length),问题就聚焦在Request Data的长度、字节序、或字段内容违反BMC硬性校验规则。超微BMC对OEM命令的Request Data校验极严:不仅要求字段存在,还要求长度精确(如MAC地址必须6字节,少1字节就0x83)、字节序固定(如端口号必须LSB在前)、保留字段(reserved)必须填0x00(填0xff也会0x83)。最典型的坑是“Get System MAC Address”(P.10):文档写Data2-7 : Lan Port(M) MAC Address,但若你只传6字节aa bb cc dd ee ff,BMC会认为Data2-7共6字节正确;可一旦你多传一个0x00(以为要补终止符),立刻0x84——因为BMC期待的Request Data总长就是6字节,多1字节即超长。
4.1 根因定位:用xxd和printf精确构造Request Data字节流
不能依赖ipmitool raw自动拼接,必须手动构造十六进制字节流,确保长度分毫不差:
# 构造"Get BMC MAC Address"命令(P.5):NetFN 0Ch Command 02h Subcmd 05h # Request Data: Data0=0x01(Channel), Data1=0x05(Get MAC), Data2=0x00, Data3=0x00 → 共4字节 printf '\x01\x05\x00\x00' | xxd -p -c 255 | sed 's/ //g' | xargs -I {} ipmitool raw 0x0c 0x02 {} # 构造"Set Fan mode to Full"(P.8):NetFN 0x30 Command 0x45 Subcmd 0x01 Data1=0x01 # Request Data: Data0=0x01(Set), Data1=0x01(Full) → 共2字节 printf '\x01\x01' | xxd -p -c 255 | sed 's/ //g' | xargs -I {} ipmitool raw 0x30 0x45 0x01 {}逻辑说明:
printf '\x01\x05\x00\x00'生成精确4字节二进制,xxd -p转为连续hex字符串(如01050000),sed去空格,xargs传给ipmitool raw。这样比手写0x01 0x05 0x00 0x00更可靠,避免空格或换行干扰。
4.2 解决方案:按文档字段表逐字节校验Request Data
文档P.3-P.17每条命令的“Request Data”都以表格形式列出字段名、长度、取值说明。必须严格对照,尤其注意:
- reserved字段必须为0x00:如P.4“Get BMC IP Address”的Data2/Data3,文档写
00h-reserved,若填0xff,BMC返回0x83 - 字符串长度含终止符:P.9“Set DNS Host Name”的
Data1-N: ANSCII string,N包含\x00,所以16字节字符串最多15字符+1个\x00 - 端口号字节序为LSB-MSB:P.14“Set Port Service”的
Data2: port number (LSB),Data3: port number (MSB),设22端口需Data2=0x16,Data3=0x00(因为22=0x16)
4.3 验证技巧:用ipmitool raw读Response Data结构反推Request Data长度
若不确定Request Data该多长,可先用已知正确的命令(如raw 0x30 0x45 0x00)获取Response Data长度,再反推Request Data。例如P.8“Get & Set Fan mode”的Response Data写Data0: Completion Code Data1: 0-Standard...,说明Response至少2字节;若你发的Request Data导致Response只有1字节(0x00),说明Request Data长度不足或格式错。
4.4 常见问题:避坑清单——Request Data的隐形雷区
现象:
raw 0x30 0x9f(Get System MAC Address)返回0x84,但P.10写Data2-7: Lan Port(M) MAC Address
原因:该命令实际需要指定Lan Number N,即raw 0x30 0x9f 0x01(N=1),若只发raw 0x30 0x9f,BMC认为Request Data缺失N字段,长度错误
解决:Subcmd后必须跟0x01(第一个网口)或0x02(第二个),不能省略现象:
raw 0x30 0x66(Fan Control)设Duty Cycle,raw 0x30 0x66 0x01 0x00 0x64(100%)返回0x83
原因:Data2(Duty cycle)必须是1-100的十进制值,但BMC期望的是该值的十六进制表示——0x64是100的hex,正确;若误用0x100(256的hex),超范围即0x83
解决:Duty Cycle值必须≤100,且用2字节hex表示(如50→0x32,100→0x64)现象:
raw 0x30 0x67(Port Service)开HTTPS端口,raw 0x30 0x67 0x01 0x01 0x00 0x00(0x0000=443)返回0x83
原因:HTTPS_PORT的Service ID是0x01,但端口号443的hex是0x01bb,需LSB在前→Data2=0xbb,Data3=0x01;0x00 0x00是端口0,非法
解决:printf '\x01\x01\xbb\x01' | xxd -p -c 255 | sed 's/ //g' | xargs -I {} ipmitool raw 0x30 0x67 {}现象:
raw 0x30 0x47 0x01设主机名,printf "test\x00" | xxd -p得7465737400,但raw 0x30 0x47 0x01 7465737400返回0x84
原因:printf "test\x00"生成5字节,但xxd -p输出7465737400是10字符(5字节hex),ipmitool raw会将其作为10字节Request Data,远超文档要求的≤16字节ASCII(即≤16字节原始数据)
解决:用printf "test\x00" | xxd -p -c 255确保输出是连续hex字符串,且长度=原始字节数×2现象:
raw 0x30 0x70 0x60(Network Link Status)返回0x00但Data5=0,查网线正常
原因:该命令Request Data只需Data0=0x00(Get),但若多传0x00 0x00,BMC认为Data0后还有字段,长度错即0x84
解决:严格只传0x00一字节,ipmitool raw 0x30 0x70 0x60 0x00
5. 连不上BMC:不是网络问题,是RAW命令触发了BMC安全锁死
当ipmitool连BMC超时(Error: Unable to establish IPMI v2 / RMCP+ session),或ping通但ipmitool所有命令都卡住,很多人第一反应是检查网线、交换机、防火墙。但有一种更隐蔽的故障:连续发送错误的RAW命令(尤其是NetFn/Command错位或Request Data非法),会触发BMC的防暴力破解机制,自动锁死IPMI通道10-30分钟。这不是文档里写的,而是某公司IDC团队在批量部署时发现的——他们用脚本循环试raw 0x30 0x00到raw 0x30 0xff探测OEM命令,结果整批X9服务器BMC的lanplus通道全部失联,ipmitool mc info超时,Web界面也打不开,唯有冷重启BMC(拔电或ipmitool bmc reset cold)才能恢复。这种锁死是BMC固件层的安全策略,与操作系统无关,且不记录日志,表现就是“一切IPMI功能消失”。
5.1 根因定位:用BMC Web界面或串口Console确认锁死状态
若ipmitool全命令超时,先排除网络层:
ping 192.168.1.100确认ICMP通telnet 192.168.1.100 623确认RMCP端口开放(IPMI默认端口)
若以上都通,但ipmitool失败,则极大可能是BMC锁死。此时:- 访问BMC Web界面(https://192.168.1.100):若页面加载缓慢或提示“Session timeout”,大概率锁死
- 接串口Console(BMC的DB9串口,115200 8N1):上电时看BMC启动日志,若出现
Security lockout active或IPMI disabled due to invalid access字样,即确认
5.2 解决方案:冷重启BMC并禁用防暴力策略
立即恢复:执行冷重启,这是唯一快速解法
# 若还能ssh进主机(非BMC),用ipmitool发冷重启 ipmitool -I lanplus -H 192.168.1.100 -U ADMIN -P ADMIN bmc reset cold # 或物理拔BMC电源(服务器断电,等30秒再上电)永久规避:在BMC Web界面关闭安全锁死(需管理员权限)
路径:Configuration → Security → IPMI Security Settings
将IPMI Invalid Login Attempts Lockout设为Disabled,或调高Lockout Duration(如300秒)
5.3 预防机制:用ipmitool的-L参数限制会话等级
BMC锁死通常由高权限命令(如NetFn 0x30 OEM命令)触发。降低会话权限可减少触发概率:
# 用-High-Level会话(默认)易锁死 ipmitool -I lanplus -H ... raw 0x30 0x45 0x00 # 改用-Medium-Level,BMC对非法命令容忍度更高 ipmitool -I lanplus -H ... -L Medium raw 0x30 0x45 0x00-L Medium会话无法执行某些敏感OEM命令,但对raw 0x0c 0x02(Get IP)等基础命令无影响,且大幅降低锁死风险。
5.4 常见问题:避坑清单——那些让BMC“自闭”的操作
现象:脚本循环执行
raw 0x30 0x00到raw 0x30 0xff,第12次后BMC失联
原因:BMC固件设定“5次无效OEM命令”即触发锁死,0x00到0xff中绝大多数是非法Command
解决:绝对禁止暴力探测;用文档P.3-P.17的已知命令列表,或先ipmitool mc info确认固件版本再选命令现象:
raw 0x30 0x40(reset factory)执行后,BMC Web界面可访问,但ipmitool所有命令超时
原因:reset factory会重置BMC网络配置,若原IP是DHCP,reset后可能获取新IP;或reset过程中BMC短暂锁死
解决:reset后用arp -a | grep 192.168.1查新IP,或用BMC默认IP(如192.168.1.100)尝试现象:
raw 0x30 0x68 0x00(Clear Certificate Settings)后,BMC Web HTTPS证书失效,ipmitool因SSL握手失败而超时
原因:Clear Certificate会删除所有
本文还有配套的精品资源,点击获取