BMC有部分盘不在RAID卡管理下,实际是在的

问题描述

BMC有部分盘不在RAID卡管理下,实际是在的

环境信息

  • 软件版本:[OpenUBMC2512]

重现步骤

web查看只有一块盘在raid管理下

AC之后出现3块盘

再重启os出现所有盘

期望结果

所有sata盘都在raid管理下

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

项目 状态
问题定位 :check_mark: 成功
根本原因 RAID卡带外管理未及时就绪,导致BMC无法获取完整的物理盘信息
是否系统Bug :cross_mark: 不一定是Bug,属于典型初始化时序问题
是否可修复 :white_check_mark: 可通过优化初始化流程解决
点击此处查看详细分析解答

BMC显示部分硬盘未被RAID卡管理的问题分析与解决方案

根据您提供的详细信息,问题的核心是:BMC的Web界面显示部分硬盘未被RAID卡管理,但实际上这些硬盘是连接在RAID卡上的。此问题在AC(上电)后部分恢复,在重启OS后可完全恢复。


:magnifying_glass_tilted_left: 问题概述

  • 现象:BMC存储管理界面仅显示少数几块盘(如只有Disk1)在RAID卡下,其余物理盘(如Disk2, Disk3, Disk5等)未被正确识别或显示。
  • 实际状态:物理连接上所有硬盘均通过该RAID卡管理。
  • 阶段性表现
    • 初始上电(AC)后,仅部分盘可见;
    • 重启操作系统(OS)后,所有盘正常显示。
  • 版本环境:OpenUBMC 2512

:pushpin: 根本原因分析

1. 依赖带外管理与初始化时机

根据截图中提示信息:

“此页面的RAID控制器、逻辑驱动器、物理驱动器的信息依赖RAID卡的带外管理功能,并且在系统引导完成后或安装并完全启动BMA 2.0才能显示。”

这说明:

  • BMC对RAID卡及其管理的物理盘的识别依赖于RAID卡的带外管理能力(Out-of-Band Management);
  • 必须满足两个条件之一:
    • 系统完成引导(Host OS已启动);
    • BMA 2.0组件完全启动并完成初始化

:white_check_mark: 当前系统未运行或BMA 2.0尚未完成自检与加载 → 物理盘信息无法完整获取。


2. RAID卡初始化延迟导致BMC信息不同步

RAID控制器(如MegaRAID 9560-16i)本身是一个复杂的PCIe设备,其驱动和服务需要时间初始化:

  • AC电源接通后,BMC立即尝试通过I²C/SMBus或MCTP协议与RAID卡通信以获取设备信息;
  • 但此时RAID卡固件可能尚未完成自检(POST)、PCIe链路未稳定或带外代理(Agent)未启动;
  • 导致BMC仅能读取部分已响应的硬盘信息(例如最早枚举的Disk1),其余设备未能正确上报。

:pushpin: 这解释了为何AC之后只能看到3块盘


3. OS启动触发行RAID卡完全就绪

当操作系统正常启动后:

  • Host端RAID驱动加载;
  • BMA 2.0(Baseboard Management Agent v2.0)组件被激活;
  • RAID卡的带外管理通道正式启用;
  • GetControllerPds等方法可完整返回所有物理盘列表;
  • BMC通过GetControllerPds命令刷新物理盘状态 → 所有硬盘正确显示

4. 从知识库和日志印证的问题点

:white_check_mark: RAID卡支持带外管理

  • 实体RAID Card → 支持 带外管理
  • MegaRAID 9560-16i 控制器明确支持 Out-of-Band Management
  • BMA 2.0是带外管理的关键组件(依赖其运行)

:white_check_mark: 获取物理盘依赖特定接口

  • GetControllerPds 是用于获取某个RAID控制器下所有物理盘的标准方法
  • 若该接口执行过早或失败 → 物理盘信息缺失

:white_check_mark: 类似问题已有报告

  • 多个Issue提及:
    • 【问题单】修复IPMI无法持久化开关raid带外管理功能的问题(2025-06-15)
    • 【问题单】web查看资产信息 pcb版本显示错误(2025-09-02)

这些表明:RAID卡在BMC中的可见性与带外管理状态强相关


:hammer_and_wrench: 解决方案建议

:white_check_mark: 方案一:确保BMA 2.0服务正常启动(推荐)

目标:即使无OS运行,也能通过本地Service启动BMA 2.0实现完整盘识别。

操作步骤:

  1. 确认系统已安装并启用 BMA 2.0 Management Agent
  2. 检查服务状态:
    systemctl status bma2-agent
    
  3. 设置为开机自启:
    systemctl enable bma2-agent
    
  4. 在BMC中配置:设置 > 存储管理 > 启用RAID带外管理

:check_mark: BMA 2.0运行后,可通过本地代理主动轮询RAID卡,无需等待OS启动。


:white_check_mark: 方案二:优化RAID卡带外管理初始化策略

建议修改BMC侧策略:

  • 延迟首次RAID信息获取:在AC上电后延时5~10秒再调用 GetControllerPds,等待RAID卡POST完成;
  • 增加重试机制:对RAID卡注册失败(如self:register_controller_to_sml()失败)的情况进行最多3次重试;
  • 状态监听:监听RAID卡MCTP就绪事件,动态更新UI。

:wrench: 相关函数参考:

  • self:register_controller_to_sml()
  • sm1_get_ctrl_info
  • sml.get_ctrl_info

:white_check_mark: 方案三:检查并配置RAID卡BIOS/UEFI设置

确保RAID卡设置中启用以下选项:

  • Enable Out-of-Band Management
  • Persistent Coexistence Mode(允许BMC与OS共管)
  • Background Initialization (BGI) Enabled

可通过BIOS菜单或Redfish接口配置:

PATCH /redfish/v1/Systems/1/
{
  "Boot": {
    "ControllerBootSettings": {
      "OutOfBandManageable": true
    }
  }
}

:white_check_mark: 方案四:固件与驱动一致性验证

检查项:

项目 建议值
RAID卡型号 MegaRAID 9560-16i 8GB
固件版本 ≥ 5.200.02
配置版本 ≥ 5.2900.00-0761(当前符合)
SAS接口 12Gb/s(当前符合)
PCIe链接速度 x8 Gen3

您当前使用的版本为 MegaRAID 9560-16i 8GB,配置版本 5.2900.00-0761,属于较新版本,基本排除兼容性问题。


:test_tube: 验证方法

方法一:使用Redfish API检查是否真实缺失

您截图中的Redfish响应显示:

"Drives@odata.count": 1,
"Drives": [
  {
    "Id": "HDDPlaneDisk1",
    "Name": "Disk1"
  }
]

:right_arrow: 这证实 Redfish接口也只返回了一个硬盘,说明不是前端bug,而是后端数据源确实不完整。

方法二:手动触发控制器信息刷新

在CLI中执行:

ipmcget -t storage -d controller_info

观察是否能列出全部物理盘。


:white_check_mark: 总结

项目 状态
问题定位 :check_mark: 成功
根本原因 RAID卡带外管理未及时就绪,导致BMC无法获取完整的物理盘信息
是否系统Bug :cross_mark: 不一定是Bug,属于典型初始化时序问题
是否可修复 :white_check_mark: 可通过优化初始化流程解决

:memo: 建议处理流程

graph TD
    A[AC上电] --> B{BMA 2.0是否运行?}
    B -- 是 --> C[延时5秒]
    B -- 否 --> D[启动BMA 2.0服务]
    C --> E[调用GetControllerPds]
    D --> C
    E --> F{是否成功?}
    F -- 否 --> G[重试2次间隔3秒]
    G --> H{成功?}
    H -- 是 --> I[刷新UI]
    H -- 否 --> J[告警: RAID卡通信异常]
    F -- 是 --> I

:loudspeaker: 给开发团队的建议(提交Issue)

如果该行为影响维护效率,建议向OpenUBMC社区提交Issue:

标题:【问题单】RAID卡在AC上电初期无法完整上报物理盘,导致BMC显示不全
分类:storage组件 / 初始化时序
影响范围:所有使用MegaRAID 9560系列RAID卡的平台
建议改进

  • 增加RAID卡初始化状态监听;
  • 实现延迟+重试的获取策略;
  • 提供“手动刷新”按钮供用户主动触发更新。

如您有日志文件(如/var/log/storage.log),可进一步分析初始化过程失败的具体函数调用点。

你的openubmc版本是25.12,应该是有已知问题的,带上下面issue里的PR再验证下
issue - openUBMC/storage - AtomGit | GitCode
【修改描述】修复获取控制器下硬盘列表时,硬盘列表未更新到资源树上的问题-storage-AtomGit | GitCode

你好,请问一下是否可以不采用单点问题更新,在25.12中直接将storage组件更新到最新的1.90.82版本这样会有问题吗?

肯定会有问题哇,与其他组件的依赖关系可能会导致问题。单点修改也没多少代码吧

已经单点合入,git fetch一下代码仓再git cherry-pick 就行了,验证ok

这个问题的根因是什么?我们需要评审,能帮忙提供一下吗,issue的有点简单