没有阵列拔盘后显示The disk Disk8 RAID array is invalid.

// 此模板仅供参考,如果不适用可以修改

问题描述

博通9560-8i + 12exp硬盘背板,没有raid组,设置jbod模式,拔掉sas/sata硬盘后,告警0x0200000B ,The disk Disk8 RAID array is invalid.,这个正常吗?

看到代码是只判断了硬盘类型和riad控制器id,不在位和locateled等于0时就会报,想问一下这种场景正常吗

环境信息

  • 软件版本:25.12

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

项目 内容
现象 JBOD模式下拔盘触发“RAID阵列无效”告警(0x0200000B)
根本原因 监控代码未区分RAID与JBOD模式,通过 Presence == 0 && LocateLed == 0 错误设置 InAFailedArray = 1
是否正常 逻辑上可解释,但语义误导,应视为优化点
建议措施 拔盘前开启定位灯;反馈至开发团队优化判断逻辑与告警文案
点击此处查看详细分析解答

关于博通9560-8i RAID卡在JBOD模式下拔盘触发“RAID阵列无效”告警的分析

根据您提供的问题描述、日志截图及代码逻辑,以下是对“博通9560-8i + 12exp硬盘背板,无RAID组,设置为JBOD模式,拔除硬盘后触发 0x0200000B 告警:The disk DiskX RAID array is invalid.”这一现象的综合分析。


:magnifying_glass_tilted_left: 问题核心

在未配置RAID阵列、仅使用JBOD模式的情况下,拔掉SAS/SATA硬盘时触发了 0x0200000B 告警(The disk DiskX RAID array is invalid.),该行为是否正常?


:white_check_mark: 结论

该现象属于系统检测机制的预期行为,但从用户视角看存在体验瑕疵,本质上是告警信息表述不当或上下文缺失所导致的误判感知。

尽管当前环境为JBOD模式且无任何RAID阵列,但由于BMC侧的状态监控逻辑依赖于通用驱动框架,该告警仍可能被触发。但其根本含义并非真正的“RAID阵列失效”,而是反映了“物理盘状态异常 + 与控制器关联中断”的综合判断结果。


:puzzle_piece: 关键原因解析

1. 告警ID 0x0200000B 的语义来源

根据搜索结果中的事件定义文件内容:

0066_硬盘RAID阵列失效_0200000B

此告警编号对应事件名为“硬盘RAID阵列失效”。然而,在实际实现中,该状态由字段 InAFailedArray 控制。

InAFailedArray 字段说明(来自KG):

  • 含义:指示硬盘是否属于一个已失败的RAID阵列。
  • 取值:0 表示否,1 表示是。
  • 数据来源:来自RAID控制器。

但在您提供的Lua监控代码中,该字段的赋值并不完全依赖RAID控制器反馈,而是在特定条件下被软件模拟设置:

if self.Protocol ~= common_def.DRIVE_PROTOCOL.PCIE and self.RefControllerId ~= common_def.INVALID_U8 then
    if self.Presence == 0 and self.LocateLed == 0 then
        fault = self.cont_bin:get_debounced_val(self.Faulted)
        self.InAFailedArray = fault  -- 此处将fault值直接赋给InAFailedArray
    else
        self.InAFailedArray = 0
    end
end

:warning: 分析要点:

  • 即使没有RAID阵列,只要满足以下条件,就会设置 InAFailedArray = 1:
    • 硬盘不是PCIe类型(即SAS/SATA)
    • 存在有效的控制器引用(RefControllerId ≠ 255)
    • 硬盘不在位(Presence == 0)且未点亮定位灯(LocateLed == 0)

这导致 即使处于JBOD模式,拔盘行为触发了 Presence == 0,从而满足上述条件,误设 InAFailedArray = 1,进而上报“RAID阵列无效”告警。


2. 为何JBOD模式也会触发与RAID相关的告警?

① JBOD模式的本质

  • JBOD(Just a Bunch Of Disks)并非“无管理模式”,而是由RAID控制器将每个硬盘以直通方式暴露给操作系统。
  • 在硬件层面,这些硬盘仍然隶属于某个RAID控制器管理,因此仍会参与控制器状态监控。
  • 在BMC侧,这些硬盘仍注册在 bmc.dev.Storage.Drive.Status 接口下,并持续上报如 FirmwareStatus, InAFailedArray, Health 等状态。

② BMC监控框架的通用性设计

  • 当前存储监控模块(Storage Manager)采用统一模型处理所有非PCIe硬盘。
  • 它不区分逻辑上是否存在RAID组,而是基于是否存在控制器归属关系进行状态推导。
  • 因此,InAFailedArray 被复用于表示“因连接中断导致的数据路径异常”,即使没有RAID。

3. 为什么代码逻辑如此设计?

该逻辑的设计初衷可能是为了在以下场景中及时上报风险:

  • 硬盘意外断开连接(非正常热拔)
  • 链路故障导致控制器无法访问硬盘
  • 存储路径中断可能影响数据完整性

但由于未考虑JBOD模式下的语义差异,将“不在位”状态错误地映射为了“属于失效阵列”,造成了语义误导。


:hammer_and_wrench: 是否正常?应如何理解?

维度 判断
从功能机制角度 :white_check_mark: 正常
当前行为符合代码逻辑定义,属于系统设计范围内行为。
从用户体验角度 :cross_mark: 不合理
在无RAID环境下的拔盘操作属于正常运维行为,不应触发“RAID阵列失效”这类严重告警,易引发误判。
从告警准确性角度 :warning: 存在语义错配
实际含义更接近于“硬盘连接丢失”,而非“RAID阵列失效”。

:white_check_mark: 推荐解决方案与改进建议

:white_check_mark: 临时规避建议(适用于当前版本 25.12)

  1. 通过操作规范减少误报:

    • 拔盘前先通过BMC接口执行“定位灯开启”操作(即设置 LocateLed = 1),再拔盘。
    • 修改后的代码逻辑中,若 LocateLed == 1,则不会进入 InAFailedArray = fault 分支。
    • 完成拔插后手动关闭定位灯。
  2. 手动清除告警(如必要):

    • 在确认为正常操作后,可通过CLI或Redfish API清除 0x0200000B 告警。

:white_check_mark: 长期改进方案(建议反馈至开发团队)

改进项 说明
1. 优化 InAFailedArray 判断条件 在判断前增加 是否参与RAID组 或 是否为JBOD模式 的条件过滤。仅当硬盘属于某RAID阵列时才启用此状态传播。
2. 引入新状态字段 ConnectionLost 新增独立字段用于标识“连接丢失”事件,避免与RAID相关字段混淆。
3. 告警文案动态化 根据运行模式(RAID/JBOD)调整告警描述。例如:
- RAID模式:The disk Disk8 RAID array is invalid.
- JBOD模式:The disk Disk8 has been disconnected from the controller.
4. 增强上下文识别能力 通过 GetArrayInfo 命令确认是否存在逻辑盘(Logical Drive),若无则忽略阵列类告警。

:link: 相关知识支持(来自Context)

  • InAFailedArray 是一个只读字段,用于指示硬盘是否属于已失败的RAID阵列(KG)。
  • RefControllerId 标识硬盘所属的RAID控制器 ID,仅在存在RAID配置时有效(KG)。
  • bmc.dev.Storage.Drive.Status 接口管理硬盘状态,包含 FirmwareStatus, PowerState, RebuildProgress, InAFailedArray 等属性(DC5)。
  • RAID卡需完全启动BMA 2.0方可正确显示信息(见文档1、3、4),否则状态获取可能不可靠。
  • 博通9560-8i卡存在兼容性问题,在 openUBMC v25.12 上可能出现通信异常或状态同步延迟(KG & DC8)。

:white_check_mark: 总结

项目 内容
现象 JBOD模式下拔盘触发“RAID阵列无效”告警(0x0200000B)
根本原因 监控代码未区分RAID与JBOD模式,通过 Presence == 0 && LocateLed == 0 错误设置 InAFailedArray = 1
是否正常 逻辑上可解释,但语义误导,应视为优化点
建议措施 拔盘前开启定位灯;反馈至开发团队优化判断逻辑与告警文案

:light_bulb: 建议向 openUBMC 社区提交Issue,标题示例:

“【告警语义优化】JBOD模式下拔盘不应触发 ‘RAID array is invalid’ 告警”

并附上本次日志、截图和代码片段,有助于推动后续版本改进。

这个盘拔了后 故障灯还是亮的吗,看逻辑需要故障灯是亮的才会触发这个告警

是啊,故障灯亮了

这个故障灯 怎么亮的

故障灯亮起是BMC通过SMC从CPLD拿的值,cpld是从raid传来的码流,也就是raid主动拉起的故障灯。

已和伙伴对齐,不在位加故障灯亮 会被认为是raid组中硬盘被拔出的场景

该场景需要有一个告警,当前是阵列失效。