2. Supermicro硬件与固件基础

在 Supermicro 服务器上做自动化运维,第一步不是写脚本,而是搞清楚“谁管谁”。一台机器上同时存在主板、BMC、BIOS 三套相对独立的运行环境,它们通过 IPMI 和 Redfish 两条管理通道对外暴露能力。批量配置的本质,就是找到正确的通道,把参数写到正确的对象上,并确认写入结果。理解这层关系,后面所有批量操作才有稳定的落点。

主板、BMC、BIOS 三者的职责边界

主板是物理载体,承载 CPU、内存、PCIe 插槽、网卡、硬盘背板以及一颗独立的管理芯片。Supermicro 主板通常把管理子系统称为 BMC(Baseboard Management Controller),在 X11、X12、H13 等世代上,BMC 芯片多为 ASPEED AST2500 或 AST2600,运行一套独立的嵌入式 Linux 系统,拥有自己的网口(常标注为 IPMI LAN 或 Dedicated LAN)、自己的 MAC 地址和 IP 地址。

关键点在于:BMC 与主机操作系统是两套电源域和两套网络栈。主机断电、系统崩溃、操作系统未安装时,只要服务器接入市电且 BMC 已上电,BMC 就可用。因此批量配置中,带外(out-of-band)操作全部走 BMC,不依赖主机系统。

BIOS(Supermicro 界面中也称 UEFI Setup)运行在主机侧,负责硬件初始化、启动顺序、CPU 特性、内存频率、PCIe 拆分、虚拟化开关等。BIOS 设置保存在主板上的 NVRAM 中,掉电不丢失。BMC 本身不能直接修改 BIOS 的每一项,但可以通过 IPMI 或 Redfish 下发“下次启动进入 BIOS 配置”或直接写入 BIOS 配置项,这是批量改 BIOS 的技术基础。

IPMI 与 Redfish:两条管理通道

IPMI 是较早的带外管理规范,基于 UDP 623 端口,提供电源控制、传感器读取、SEL 日志、SOL 串口重定向、FRU 信息等能力。Supermicro 的 ipmitool 用法非常典型:

ipmitool -I lanplus -H 10.0.20.31 -U ADMIN -P 'PASSWORD' chassis power status
ipmitool -I lanplus -H 10.0.20.31 -U ADMIN -P 'PASSWORD' sensor list | grep -i cpu
ipmitool -I lanplus -H 10.0.20.31 -U ADMIN -P 'PASSWORD' fru print

IPMI 的短板是数据模型偏底层、返回格式不统一、扩展性差。Redfish 是新一代基于 HTTPS 和 JSON 的管理接口,默认端口 443,路径以 /redfish/v1/ 为根,用资源树的方式组织 Systems、Chassis、Managers、UpdateService 等对象。Supermicro 在 X11 后期及 X12、H13 世代上对 Redfish 支持较完整,适合做批量、结构化、可编程的配置。

两条通道不是替代关系,而是互补:IPMI 适合快速电源操作和兼容老机型,Redfish 适合批量读取/写入结构化配置、固件升级和事件订阅。批量脚本通常以 Redfish 为主,IPMI 作为兜底。

Supermicro 服务器管理对象与批量配置通道 主机侧(Host Domain) BIOS / UEFI Setup 启动顺序 · CPU/内存 · PCIe 虚拟化 · NVRAM 持久化 主板 / 硬件平台 CPU · 内存 · PCIe · 背板 FRU · 传感器 · 风扇 操作系统 / 业务 依赖 BIOS 设置生效 不参与带外配置 管理侧(BMC Domain,独立供电与网络) BMC 固件 AST2500 / AST2600 IPMI 通道 UDP 623 · 电源/SEL/SOL Redfish 通道 HTTPS 443 · JSON 资源树 批量配置执行层 配置清单 IP / 账号 / 参数 批量脚本 Redfish 优先 / IPMI 兜底 结果校验 回读比对 / 日志 生效确认 重启 / 状态 BIOS 配置经 BMC 下发 FRU / 传感器读取 电源控制

批量配置为什么必须理解这层关系

批量配置的难点不在“循环发请求”,而在于不同参数归属不同对象、生效时机不同、校验方式不同。举几个典型例子:

  • BMC 网络参数(IP、掩码、网关、VLAN)属于 BMC 自身,通过 Redfish 的 Managers/1/EthernetInterfaces 或 IPMI lan set 修改,改完立即生效,但改错 IP 会直接失联。
  • BIOS 参数(如 Hyper-Threading、BootMode、PowerPerformanceTuning)属于主机侧,通过 Redfish 的 Systems/1/Bios 写入,通常需要重启主机才生效。
  • 电源策略(如 Restore on AC Power Loss)既涉及 BIOS 也涉及 BMC 的机箱电源策略,需要分别确认。
  • 用户与权限属于 BMC,通过 AccountService/Accounts 管理,批量创建运维账号时要注意权限级别和密码策略。

如果不区分对象,就会出现“脚本返回 200 但机器行为没变”的情况——请求写到了 BMC,但期望的是 BIOS 生效。因此批量脚本的第一步永远是:明确每个参数的目标对象、生效条件和校验方式。

一个可复用的批量配置参数归属表

下面这张表可以直接作为批量配置脚本的输入设计依据。字段含义:目标对象决定走哪个 Redfish 资源路径;生效方式决定是否需要重启;校验方式决定脚本如何判断成功。

配置项 目标对象 推荐通道 生效方式 校验方式
BMC IP / 掩码 / 网关BMCRedfish Managers立即回读 EthernetInterfaces
BMC 用户与权限BMCRedfish AccountService立即回读 Accounts 列表
启动顺序 BootOrderBIOSRedfish Systems/Bios重启后回读 Boot 属性
超线程 Hyper-ThreadingBIOSRedfish Systems/Bios重启后回读 Bios 属性
电源恢复策略BMC/机箱Redfish Chassis立即回读 PowerRestorePolicy
固件版本BMC/BIOSRedfish UpdateService升级后重启回读 FirmwareVersion
传感器阈值BMCIPMI / Redfish立即sensor list 比对

Redfish 批量读取的实际形态

以 Supermicro X12 平台为例,批量脚本通常先做一次“资产与配置采集”,确认每台机器的 BMC 固件版本、BIOS 版本、当前关键参数。Redfish 请求形如:

# 读取系统基本信息
curl -k -u ADMIN:'PASSWORD' https://10.0.20.31/redfish/v1/Systems/1

# 读取 BIOS 当前属性
curl -k -u ADMIN:'PASSWORD' https://10.0.20.31/redfish/v1/Systems/1/Bios

# 读取 BMC 固件版本
curl -k -u ADMIN:'PASSWORD' https://10.0.20.31/redfish/v1/Managers/1

返回的 JSON 中,FirmwareVersion、BiosVersion、PowerState 等字段可以直接进入资产库。批量场景下,把 IP 列表读入循环,逐台请求并落库,就能得到一份可对比的基线。后续配置变更前后各跑一次,diff 结果就是变更证据。

批量配置前先做一次全量采集,形成基线快照。没有基线的批量变更,出问题后无法判断是“本来就如此”还是“被改坏了”。

IPMI 与 Redfish 的选用判断

实际项目中可以按以下逻辑选择通道:

  1. 需要电源开/关/重启、SOL 串口、SEL 日志:优先 IPMI,命令短、兼容性好。
  2. 需要结构化读取或写入 BIOS、BMC、账户、固件:优先 Redfish,JSON 易解析、字段稳定。
  3. 老机型 Redfish 支持不完整:用 IPMI 兜底,但要把返回文本做规范化解析。
  4. 批量固件升级:走 Redfish UpdateService,配合任务轮询判断完成状态。
BMC 网络参数修改是高风险操作。批量改 IP 前必须确认新 IP 不与现有地址冲突,并保留带外 Console 或现场访问手段,否则一旦写错将无法远程恢复。

小结:批量配置的落点模型