BMC在没有网络的时候如何升级固件

问题描述

BMC升级固件后网络ping不通,web无法登录,telnet也无法使用。接上串口后可以正常进系统,但是进系统后过一段时间会被切走。

尝试过使用OS端通过IPMI命令升级固件报错如下,应该是BMC那端没有打开带内的升级通道。系统是麒麟V10,参考连接【经验分享】带内固件升级方法汇总 - 交流互助区 - openUBMC 论坛

image

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2603

  • 硬件配置:[如 CPU、内存等]

重现步骤

期望结果

可以升级BMC固件,或者切换BMC的分区,从备用分区启动

实际结果

BMC可以正常启动,可以进串口,但是网络ping不通

尝试过的解决方案

尝试过使用OS端通过IPMI命令升级固件报错如下,应该是BMC那端没有打开带内的升级通道。

image

分析结论

[详细总结您对此问题的分析结论]

答案内容由AI生成,仅供参考:

:white_check_mark: 总结

项目 推荐操作
当前最优路径 通过串口进入U-Boot → 手动切换分区 → 启动原正常固件
次优方案 使用SFTP传固件 → ipmcset -d upgrade 修复
长期预防 升级前确认签名兼容性、使用过渡包、保留可用分区
终极手段 若所有分区损坏,需返厂或烧片恢复

:bell: 温馨提示:操作前请确保电源稳定,避免中途断电导致进一步损坏。

点击此处查看详细分析解答

BMC在无网络情况下固件升级及故障恢复方案

根据您提供的问题描述,您的BMC在固件升级后出现网络不通、Web和SSH/Telnet服务不可用的情况,但串口可访问。这属于典型的“固件升级异常导致服务部分失效”场景。以下将基于知识库内容,为您提供完整的分析与解决方案。


:magnifying_glass_tilted_left: 问题分析

:pushpin: 当前状态总结:

  • :white_check_mark: 串口可连接,能进入系统;
  • :cross_mark: 网络无法ping通;
  • :cross_mark: Web界面无法登录;
  • :cross_mark: SSH/Telnet无法使用;
  • :warning: 系统可能自动切换串口到OS侧(导致操作中断);
  • :cross_mark: 带内IPMI升级命令报错:Cannot execute command, command disabled
  • :light_bulb: 大概率为主分区固件升级失败或配置异常,可尝试切换至备用分区恢复。

:magnifying_glass_tilted_right: 核心原因推断:

  1. 固件升级成功但启动失败

    • 升级完成后,BMC尝试从新分区启动,但由于签名不匹配、配置丢失或服务异常,导致关键服务(web、ssh)未启动。
    • 如知识库中提到:“升级实际上是成功的,但复位后BMC系统启动失败,三次未成功则触发分区切换回原版本。
  2. 串口被系统自动切换至OS侧

    • 出厂默认串口方向为OS侧,BMC启动完成后会自动切换,导致用户无法继续输入命令。
    • 参考文档 FAQ:“通电后BMC启动过程中串口输出的是BMC的启动信息,BMC启动完成后,串口会自动切到OS侧。”
  3. 带内升级通道未启用

    • tpmtool raw 0x30 0x90 0x20 报错 command disabled 表明该功能未启用或固件未支持。
    • 实际应为 ipmitool,可能是命令误写(tpmtoolipmitool)。
  4. 可能涉及过渡包或签名问题

    • 若使用了非标准签名固件(如自签名),而未通过过渡包安全迁移,可能导致服务受限。
    • 特别在OpenUBMC环境中,从V2升级到V3需解决证书信任问题,否则签名校验失败。

:white_check_mark: 解决方案

:white_check_mark: 方案一:强制串口保持在BMC侧(确保操作连续性)

目的:防止串口被切换走,以便持续调试

# 在BMC端设置串口方向为BMC侧(持久化配置)
ipmcset -d uart -v 0

注:部分平台可通过 BIOS 设置或 /etc/inittab 修改串口归属。


:white_check_mark: 方案二:通过串口切换BMC分区(推荐)

适用于当前主分区固件损坏、无法正常启动服务的情况。

:hammer_and_wrench: 操作步骤:

  1. 通过串口登录BMC系统
  2. 判断当前分区状态
# 查看当前BMC版本信息
ipmcget -d version
  1. 尝试手动触发分区切换(冷重启)
# 主动重启BMC
ipmcset -d reset -v cold
  1. 若无法重启,进入U-Boot手动切换分区

根据知识库【BMC固件损坏时恢复环境指导】第五条:

  • 上电/复位,在启动提示出现时按 Ctrl+B 进入U-Boot;
  • 查看当前启动分区环境变量:
# U-Boot命令行下执行
printenv boot_part
  • 若当前为 boot_part=0(异常分区),尝试修改为另一分区(如1):
setenv boot_part 1
saveenv
reset

:warning: 部分设备无 boot_part 变量,需查看具体平台文档。


:white_check_mark: 方案三:通过串口执行本地固件升级(修复异常固件)

适用于能进入系统但服务异常的情况。

步骤如下:

  1. 通过SFTP/XFTP将正常固件包上传至BMC的 /tmp 目录

    • 固件格式通常为 .hpm.bin
    • 示例文件名:image.hpm
  2. 执行升级命令

# 启动升级(立即生效)
ipmcset -d upgrade -v /tmp/image.hpm activemode=Immediately

:warning: 若提示 command not found,说明 ipmcset 工具缺失,可能固件严重损坏。

  1. 等待自动重启并观察恢复情况

:white_check_mark: 方案四:通过OS带内通道升级(若带内通道可用)

您提到尝试失败,提示 command disabled,需先确认前提条件。

前提要求:

  • BMC端已启用带内升级通道(默认可能关闭);
  • 使用正确的工具:ipmitool 而非 tpmtool
  • OS已加载 veth 或 edma 驱动。

正确操作流程:

# 1. 检查虚拟网口是否加载
ifconfig veth0

# 2. 加载驱动(如未加载)
insmod host_edma_drv.ko
insmod host_veth_drv.ko

# 3. 发送固件包到BMC
send_file /tmp/image.hpm

# 4. 在BMC上执行升级(需BMC支持接收)
ipmcset -d upgrade -v /tmp/image.hpm

:red_exclamation_mark: 报错 Unable to send RAW command... command disabled 表明 BMC 固件未开放此功能,或当前处于保护模式。


:white_check_mark: 方案五:通过Web界面升级(若Web可访问)

不适用于当前场景(Web不可访问),但作为补充说明:

  • 登录地址:https://192.168.16.103/UI/Static/#/navigate/manager/upgrade
  • 路径:iBMC管理 → 固件升级 → 固件更新

:counterclockwise_arrows_button: 特殊情况处理建议

:puzzle_piece: 情况1:无 ipmcsetipmcget 命令

  • 表示核心管理工具缺失,可能是过渡包或异常固件导致;
  • 解决方法:
    • 尝试通过串口进入 U-Boot,切换回出厂固件分区
    • 或通过烧片方式恢复原始镜像(最后一招)。

:puzzle_piece: 情况2:所有分区均损坏

  • 参考知识库:“如果每个分区都损坏,返厂维修
  • 或使用专业工具(如 JTAG/Burner)重新烧录BMC Flash。

:puzzle_piece: 情况3:密码错误或账户异常

  • 可通过带内IPMI重置密码:
ipmitool user set password 2 Admin@1234

:books: 推荐参考资料(来自知识库)

文档标题 内容摘要
BMC固件损坏时恢复环境指导 提供了SSH可用/不可用、Web不可用、串口切换等多种场景下的恢复方法
升级常见问题指南 分析了升级后版本不变、分区切换、bmc_core重启等问题
基础通用问题FAQ 包含默认IP、串口切换、升级方式等基础信息
1711模组更新openUBMC固件问题 指出自签名包升级需注意证书问题,否则无法后续升级

:shield: 预防建议

  1. 升级前备份当前固件和配置
  2. 使用双分区策略,确保有一个可用分区;
  3. 优先使用过渡包(Transition Package) 实现签名迁移;
  4. 避免直接刷自签名包,除非确认兼容性;
  5. 升级前关闭串口切换机制,确保全程可调试。

:white_check_mark: 总结

项目 推荐操作
当前最优路径 通过串口进入U-Boot → 手动切换分区 → 启动原正常固件
次优方案 使用SFTP传固件 → ipmcset -d upgrade 修复
长期预防 升级前确认签名兼容性、使用过渡包、保留可用分区
终极手段 若所有分区损坏,需返厂或烧片恢复

:bell: 温馨提示:操作前请确保电源稳定,避免中途断电导致进一步损坏。

如有更多日志(如U-Boot输出、ipmcget -d version 结果),可进一步精准定位问题。

BMC网络异常导致无法在WEB上更新固件,我的解决方法是:

接BMC的串口,进系统后快速输入用户名和密码,使用命令/opt/debug/busybox telnet localhost进入debug模式,使用命令ipmcset -d serialdir -v 1,将串口切换道BMC侧,使用命令ipmcset -d rollback将BMC切到备用分区启动。BMC的网络恢复正常。