4. BMC固件基础与Redfish API入门
BMC(Baseboard Management Controller,基板管理控制器)是服务器主板上独立于主机CPU和操作系统的管理子系统。即使主机处于关机、蓝屏或系统未安装状态,只要服务器接入待机电源,BMC就能独立运行,提供远程开关机、传感器监控、日志查看、固件更新和虚拟介质挂载等带外管理能力。Supermicro服务器上的BMC通常以ASPEED AST2500/AST2600等管理芯片为核心,运行嵌入式Linux系统,并对外暴露IPMI与Redfish两套管理接口。
BMC架构与固件组成
从固件视角看,BMC并不是单一程序,而是由引导固件、嵌入式操作系统、管理服务、硬件监控与接口层共同组成的完整栈。理解这个分层结构,有助于判断固件升级时到底更新了哪一部分,以及为什么某些功能在升级后需要重启BMC才生效。
图中可以看到,主机侧通过KCS、NC-SI等通道与BMC通信,而BMC的接口层同时提供IPMI和Redfish。两者最终访问的是同一批底层资源——传感器、SEL日志、电源状态、固件版本,只是协议风格和表达能力不同。
IPMI与Redfish的对比
IPMI诞生于1998年,使用二进制消息和RMCP+协议,通过UDP 623端口通信。它的优点是成熟、兼容性广,几乎所有服务器都支持;缺点是数据结构固定、扩展困难、缺乏现代认证机制,且返回内容对自动化脚本不够友好。Redfish由DMTF制定,基于HTTPS和JSON,使用REST风格资源模型,端口443,支持标准化的Schema、OData查询和事件订阅,更适合大规模自动化运维。
| 对比维度 | IPMI 2.0 | Redfish |
|---|---|---|
| 传输协议 | RMCP+ / UDP 623 | HTTPS / TCP 443 |
| 数据格式 | 二进制消息 | JSON |
| 资源模型 | 命令号 + 固定结构 | URI 资源树 + Schema |
| 认证方式 | RAKP / 密码 | Basic Auth / Session Token |
| 扩展性 | 弱,依赖厂商扩展 | 强,OEM 属性可扩展 |
| 自动化友好度 | 需 ipmitool 等工具解析 | curl / Postman 直接调用 |
在Supermicro服务器上,两者可以并存。日常快速操作如开关机、读传感器,ipmitool仍然方便;而批量查询固件版本、导出清单、集成到运维平台时,Redfish更合适。
通过Redfish查询固件清单
Redfish的资源树从/redfish/v1开始。查询固件清单的关键路径是/redfish/v1/UpdateService/FirmwareInventory,它返回一个集合,列出BMC、BIOS、CPLD、电源固件等成员。每个成员再通过其@odata.id指向具体资源,包含Version、Name、Updateable等属性。
下面用curl演示一次完整查询。假设BMC地址为192.168.1.100,账号ADMIN,密码PASSWORD(示例参数,实际请替换)。
# 1. 查询固件清单集合
curl -k -u ADMIN:PASSWORD \
https://192.168.1.100/redfish/v1/UpdateService/FirmwareInventory
# 2. 返回示例(节选)
{
"Members": [
{"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BMC"},
{"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BIOS"},
{"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/CPLD"}
],
"Members@odata.count": 3
}
# 3. 查询单个固件版本
curl -k -u ADMIN:PASSWORD \
https://192.168.1.100/redfish/v1/UpdateService/FirmwareInventory/BMC
# 4. 返回示例(节选)
{
"Name": "BMC Firmware",
"Version": "01.73.12",
"Updateable": true,
"Status": {"Health": "OK", "State": "Enabled"}
}
判断结果时,重点看Version是否与预期版本一致,Updateable为true表示可通过Redfish执行更新,Status.Health为OK表示当前固件运行正常。如果集合为空或缺少BIOS条目,通常说明BMC固件版本较旧,或该机型未将BIOS纳入FirmwareInventory。
使用curl与Postman进行基本操作
curl适合脚本化和快速验证。除了查询,还可以用Redfish执行电源操作。例如查询系统电源状态:
curl -k -u ADMIN:PASSWORD \
https://192.168.1.100/redfish/v1/Systems/1
# 返回中关注 PowerState 字段:On / Off
# 执行开机(POST 到 Actions)
curl -k -u ADMIN:PASSWORD -X POST \
-H "Content-Type: application/json" \
-d '{"ResetType":"On"}' \
https://192.168.1.100/redfish/v1/Systems/1/Actions/ComputerSystem.Reset
Postman则更适合交互式探索。建议按以下方式组织:新建Collection命名为“Supermicro BMC”,在Collection级别设置Authorization为Basic Auth,填入账号密码;再设置Settings中关闭SSL certificate verification(实验环境自签名证书常见)。然后创建请求,方法GET,URL填https://192.168.1.100/redfish/v1/UpdateService/FirmwareInventory,发送后即可在Pretty视图查看JSON。把常用请求保存为示例,后续只需切换环境变量即可复用到其他服务器。
@odata.id是资源定位符,可以逐级拼接访问;@odata.type标明资源类型,便于脚本判断。遇到401先检查账号权限,遇到404检查URI大小写,Redfish路径区分大小写。-k跳过证书校验,也不要在脚本中明文硬编码密码。建议导入BMC证书或使用会话Token,并将凭据放入受保护的变量或密钥管理工具。