Scanner加载失败

问题描述

os上电的时候拔nvme硬盘,下电再插上,再上电,此时获取不到温度,看日志scanner加载失败

2026-04-28 10:14:53.390704 hwproxy ERROR: object_manage.lua(283): AddObject Scanner_Temp_0101030C02 failed, life_cycle_id:1, error:./opt/bmc/libmc/lualib/mc/context.lua:203: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: chip: Chip_Temp_0101030C01, bus: I2c_5, read failed: i2c.lua:120: response error, i2c read fail, ret: 5, input:{“rw_type”:1,“type”:0,“len”:1,“is_trace”:false,“offsetWidth”:1,“addrWidth”:1,“addr”:213,“bus_type”:0,“offset”:3,“requestor”:“Scanner_Temp_0101030C01”,“has_error”:false,“mask”:4294967295,“name”:“Chip_Temp_0101030C01”}

环境信息

  • 软件版本:OpenUBMC2512

重现步骤

  1. [第一步]os上电的时候拔硬盘

  2. [第二步]下电再插上

  3. [第三步]上电

期望结果

能正确获取温度

实际结果

i2c读失败,scanner加载失败

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

Scanner加载失败导致无法获取NVMe硬盘温度问题分析

问题描述

在OpenUBMC2512系统中,当OS上电时拔出NVMe硬盘,然后下电再插入硬盘并重新上电后,系统无法获取硬盘温度信息。日志显示Scanner加载失败,I2C读取操作返回错误。

故障现象

  • 故障表现:无法获取NVMe硬盘温度
  • 日志信息
2026-04-28 10:14:53.390704 hwproxy ERROR: object_manage.lua(283): AddObject Scanner_Temp_0101030C02 failed, life_cycle_id:1, 
error:./opt/bmc/libmc/lualib/mc/context.lua:203: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: 
chip: Chip_Temp_0101030C01, bus: I2c_5, read failed: i2c.lua:120: response error, i2c read fail, ret: 5, 
input:{“rw_type”:1,“type”:0,“len”:1,“is_trace”:false,“offsetWidth”:1,“addrWidth”:1,“addr”:213,“bus_type”:0,“offset”:3,“requestor”:“Scanner_Temp_0101030C01”,“has_error”:false,“mask”:4294967295,“name”:“Chip_Temp_0101030C01”}

问题分析

错误码分析

  • ret: 5:表示I2C通信失败,这是嵌入式系统中常见的I2C传输错误码
  • response error:表明在I2C总线上未收到预期的响应
  • i2c read fail:明确指出I2C读取操作失败

根本原因

根据知识库信息,此类问题通常由以下原因引起:

  1. I2C总线通信异常ret: 5错误码直接关联到I2C通信失败,可能由于设备未正确响应或总线冲突
  2. 热插拔后的状态不一致:在OS运行时拔插NVMe硬盘可能导致BMC与设备间的状态同步出现问题
  3. Scanner初始化失败AddObject Scanner_Temp_... failed表明温度传感器扫描器对象创建失败

相关技术背景

  • 温度传感器监控机制:系统通过I2C总线访问Chip_Temp芯片来读取NVMe硬盘温度
  • Scanner工作原理:BMC使用Scanner组件周期性地轮询硬件传感器状态
  • I2C通信依赖:所有传感器数据读取都依赖于稳定的I2C通信链路

解决方案建议

1. 软件层面优化

可参考类似问题的处理方案(如topic_id: 2718),实施防抖机制:

  • 连续多次读取失败后再判定为真实故障
  • 短时间内允许一定次数的读取重试
  • 采用上次有效值作为临时替代

2. 硬件/固件检查

  • 检查NVMe硬盘的I2C接口是否正常
  • 验证Chip_Temp_0101030C01设备在I2C总线上的地址(213)是否正确
  • 确认I2C总线无冲突或其他设备干扰

3. 系统配置优化

  • 增加I2C通信超时时间和重试次数
  • 在设备热插拔事件后添加适当的延迟再尝试初始化Scanner
  • 完善热插拔处理流程,确保状态同步

预防措施

  1. 避免在OS运行时热插拔NVMe硬盘
  2. 完善热插拔处理机制
  3. 增强I2C通信鲁棒性
  4. 实现更智能的错误恢复策略

该问题需要结合硬件稳定性、I2C通信可靠性和软件错误处理机制进行综合优化解决。

I2c报错是通常硬件链路的问题,有可能是对端硬件不存在,或者链路不通,请排查下硬件问题

硬件肯定没问题,重启就恢复了,而且换了别的机器和别的硬盘也是一样的效果

是否是下电状态下无法访问硬盘导致Scanner报错,上电后可以正常访问,所以上电后重启能恢复

上电之后还需要重启bmc这正常吗?