nvme盘拔插事件误告

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

问题描述

1.原来有nvme 盘插在disk2 disk3 上。后面拔出来一直没插上,做了一次不保留配置升级bmc 版本就出来当前告警了。然后现在机器不管怎么升级版本都会在当前告警中存在这两条告警了,并且后续的当前告警的时间都是第一次告警出来的时间。如下图:

环境信息

  • 操作系统:Ubuntu

  • 软件版本:OpenUBMC SP1

  • 硬件配置:只有2个sata 盘。没有nvme 盘插入

重现步骤

  1. 首次出现是不保留配置升级bmc 出现后,后面一直升级bmc 版本都会有出来,并且告警时间都是第一次当前告警出来的时间

期望结果

没有告警

实际结果

在当前告警中报nvme 盘拔插告警,并且后续升级也一直在当前告警中上报。

尝试过的解决方案

尝试升级bmc 版本也一样存在第一次告警的时间在当前告警中

分析结论

1.查看app.log 的确是有这两个事件告警。并且这个disk remove 事件是一个下降沿判断,不知道是否是误报,就存在持久化了?

Atlas800IA3_2102315QYP10RC100017_20260624-0928.tar.gz (6.2 MB)

答案内容由AI生成,仅供参考:
结论与建议

分析结论
您遇到的NVMe盘拔插事件误告警,根本原因是在NVMe盘拔出时,BMC未能成功将对应的Failure状态标记重置为false。这个错误的故障状态被持久化保存下来,因此在后续的BMC升级(即使是不保留配置升级)中也会被重新加载,导致告警持续存在,并且告警时间定格在第一次触发时。

建议的解决方案

  1. 尝试清除持久化数据:由于“不保留配置升级”未能清除该告警,可能需要通过更底层的操作来清除BMC的持久化存储数据,例如执行一次彻底的BMC配置清除(Factory Reset)或清除特定的非易失性存储区域。
  2. 代码层面修正:从根本上解决问题,需要在BMC的drive_object.lua(或类似的管理NVMe盘的代码模块)中,完善“拔盘”事件的回调逻辑。当检测到NVMe盘拔出时,除停止更新任务外,必须显式地将该盘对象的Failure属性设置为false,以确保告警状态被正确清除,避免状态被错误持久化。
点击此处查看详细分析解答

好的,已收到您的问题。我将根据提供的Context信息,为您分析NVMe盘拔插事件误告警的问题。


问题分析与解答

根据您描述的现象——NVMe盘移除后,BMC版本升级后仍持续报“盘拔出”告警,且告警时间不更新——该问题与NVMe盘故障告警的处理逻辑以及BMC的持久化机制高度相关。

结合知识库中的信息,此问题的根本原因可以归结为以下几点:

  1. 故障告警未正确清除:在NVMe盘拔出后,系统虽然停止了硬盘的动态信息更新任务,但未能正确清除与该盘位关联的“故障”状态。知识库文档《nvme盘故障后硬盘背板亮红灯问题分析》明确指出:

    故障告警通过 self.Failure = false 的方式来消除拔盘后的告警;故障灯不会被单独点灭。
    在停止任务的时候设置默认值 self.Failure = false

    这表明,当NVMe盘拔出时,其关联的Failure状态没有被重置为false,导致系统认为该盘仍处于故障状态。

  2. 告警状态被持久化:您提到“不保留配置升级BMC版本”后,告警依然存在。这说明该告警状态(很可能是Failure标志)已经被持久化到BMC的非易失性存储器中。即使升级固件,若未清除持久化的配置数据,该故障状态依然会被加载,从而导致升级后继续报错。文档中提到的“重启bmc也未恢复是因为映射关系做了复位持久化”也印证了这一点。

  3. 事件触发的下降沿逻辑:您观察到的“disk remove 事件是一个下降沿判断”是合理的。系统可能根据状态变化(从有盘变为无盘)来触发告警。然而,由于Failure标志一直保持为true,系统可能将此视为一个持久的故障状态,而非一次性的移除事件,从而导致告警持续存在。

结论与建议

分析结论
您遇到的NVMe盘拔插事件误告警,根本原因是在NVMe盘拔出时,BMC未能成功将对应的Failure状态标记重置为false。这个错误的故障状态被持久化保存下来,因此在后续的BMC升级(即使是不保留配置升级)中也会被重新加载,导致告警持续存在,并且告警时间定格在第一次触发时。

建议的解决方案

  1. 尝试清除持久化数据:由于“不保留配置升级”未能清除该告警,可能需要通过更底层的操作来清除BMC的持久化存储数据,例如执行一次彻底的BMC配置清除(Factory Reset)或清除特定的非易失性存储区域。
  2. 代码层面修正:从根本上解决问题,需要在BMC的drive_object.lua(或类似的管理NVMe盘的代码模块)中,完善“拔盘”事件的回调逻辑。当检测到NVMe盘拔出时,除停止更新任务外,必须显式地将该盘对象的Failure属性设置为false,以确保告警状态被正确清除,避免状态被错误持久化。

这个状态好像有点持久化的感觉,能帮忙看下吗?这个怎么解决吗。

或者说这个是不是告警一个设计意图,就是说如果没有插入nvme 硬盘,这个就会一直告警,直到AC 后才恢复,这个是正常逻辑?

后续升级也还存在上报,看起来像时有持久化健康状态,后续升级的日志如下:

A800IA3_2102315QYP10RC100017_20260625-1149.tar.gz (4.4 MB)

BMC的告警持久化策略是复位持久化,详见下面链接

硬盘拔出后产生告警,告警记录在数据库中,复位的话告警不会消失。

告警消除策略:

1、将NVMe盘插回去

2、通过AC直接恢复

多谢大佬