升级你的BMC
更新时间:2025/5/17
在Gitcode上查看源码IMPORTANT
本章的学习需要使用《构建你的BMC》章节构建出的BMC升级包,请确保已完成该章节的动作。
在章节《构建你的BMC》中,我们学习了如何构建一个属于自己的BMC升级包。本章节将学习如何在环境上升级你的BMC
1. 升级命令
web界面升级
固件升级位置
- iBMC管理 >> 固件升级 >> 固件更新
CLI命令升级
启动升级
ipmcset -d upgrade -v <filepath> [activemode]
filepath e.g.:/tmp/image.hpm
activemode e.g. 1
0:firmware need to reboot manually after BMC is upgraded
1:firmware will reboot after BMC is upgraded
Redfish接口升级
- URL POST
https://<device_ip>/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate
- 请求头:
X-Auth-Token : auth_value
Content-Type : header_type
- 请求消息体:
json
{
"ImageURI":filepath,
"TransferProtocol":protocol,
"ActiveMode":activemode,
"BiosActiveMode":biosactivemode,
"RestoreFactorySettings":restoresettings,
"SystemId":systemid
}
参数 | 参数说明 | 取值 |
---|---|---|
auth_value | 请求消息的鉴权参数 | 可通过/redfish/v1/SessionService/Sessions创建会话时获得 |
header_type | 请求消息的格式 | 支持的消息格式包括:application/json 或者application/json;charset=utf-8 |
filepath | 升级包所在路径 | 升级包的URL(支持本地tmp目录升级),本地tmp目录支持的最大长度为255个字符,远程目录支持的最大长度为1004个字符(传输协议长度不计算在内,如"sftp://") |
protocol | iBMC从远程服务器下载升级包时使用的协议 | 取值:HTTP 、SCP 、SFTP 、CIFS 、NFS 。本地升级不需要该字段 |
activemode | BMC固件的升级生效模式 | 取值:Immediately (成功升级BMC固件后BMC自动复位生效)、ResetBMC (成功升级BMC固件后需要手动复位BMC生效)。不加该参数默认升级后立即生效 |
biosactivemode | bios无感升级生效区域,使用该字段使BIOS在业务面上电状态升级,并立即生效指定区域 | 取值:Default (默认缓存BIOS升级包,下电或重启后升级并生效)、IMU (升级BIOS后立即复位生效IMU)、M7 (升级BIOS后立即复位生效M7)、All (升级BIOS后立即复位生效IMU和M7)、None (仅升级BIOS,升级完成后需要手动重启或使用BIOS独立生效命令生效IMU或M7)。不加该参数默认缓存BIOS升级包,下电或重启后升级并生效 |
restoresettings | 是否恢复出厂设置 | true (升级完成之后恢复出厂设置)false (升级完成后不恢复出厂设置)。如果不加该参数,默认升级完成后不恢复出厂设置 |
systemid | Multi-Host场景下指定升级某host的固件 | 字符串[1-N] :表示升级第[1-N]个host上的固件,要求对应host在位 |
SNMP接口升级
启动升级
snmpset -t 10 -v3 -l priv -a <SNMPv3鉴权算法> -X <SNMPv3加密算法> -u <username> -A <password> -X <SNMPv3加密密码> <bmc_ip:端口> 1.3.6.1.4.1.{SnmpOemIdentifier}.30.1.0 s <filepath>
查看升级状态
snmpget -t 10 -v3 -l priv -a <SNMPv3鉴权算法> -X <SNMPv3加密算法> -u <username> -A <password> -X <SNMPv3加密密码> <bmc_ip:端口> 1.3.6.1.4.1.{SnmpOemIdentifier}.30.2.0
IPMI命令升级
启动升级
ipmitool -H <bmc_ip> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x30 0x91 <manufacture_id(三个字节)> 0x06 0xaa 0x00 0x00 <flag> <length> <filepath>
flag
:[0-6]:offset [7]级联标志,0=最后一帧数据 1=后面还有数据length
:本帧数据的长度filepath
:路径名,单帧请求不超过16个字节 例:
ipmitool -H <bmc_ip> -I lanplus -p 623 -U <username> -P <password> -C 17 raw 0x30 0x91 <manufacture_id(三个字节)> 0x06 0xaa 0x00 0x00 0x00(flag) 0x0c(length,此处为/tmp/BMC.hpm的长度,即12个字节) 0x2f 0x74 0x6d 0x70 0x2f 0x42 0x4d 0x43 0x2e 0x68 0x70 0x6d(filepath,此处为/tmp/BMC.hpm)
2. 升级与资源协作接口属性ActiveImage
取值对应关系
我们采用双镜像分区策略来保证系统的稳定性和可靠性。 升级成功之后,BMC会自动切换到另一个镜像分区。 我们可以通过资源协作接口属性ActiveImage
查看当前使用的分区
- Object:/bmc/kepler/UpdateService/UpdateMgmt
- interface:bmc.kepler.UpdateService.UpdateMgmt
- property:
ActiveImage
- description:标识当前处于active状态的镜像。取值:0x01和0x02,表示image1和image2。
如果当前使用的是image1,则备份镜像是image2。在升级成功后,当前使用的镜像将被切换成image2。