【NVME】上电状态下对NVME盘做热插拔,概率性导致nvme盘的温度传感器丢失

Atlas 800I A3设备上电,对nvme硬盘(slot2/3)做热插拔验证(两块盘交替或同时做较快速插拔),大约半个小时,概率性出现nvme盘温度传感器(SSD Diskx Temp)丢失。

查看温度传感器的ThresholdSensor对象,如下:

~ ~ $ mdbctl lsobj ThresholdSensor |grep -i ThresholdSensor_NvmeTemp
ThresholdSensor_NvmeTemp_0101081003
ThresholdSensor_NvmeTemp_0101081004
~ ~ $ mdbctl lsprop ThresholdSensor_NvmeTemp_0101081003
bmc.kepler.Object.Properties
ClassName=“ThresholdSensor”
ObjectIdentifier=[1,“1”,“1”,“0101081003”]
ObjectName=“ThresholdSensor_NvmeTemp_0101081003”
TraceSamplingRate=0
bmc.kepler.Systems.ThresholdSensor
Capabilities=104
EntityId=4
EntityInstance=101
LowerCritical=0
LowerNoncritical=0
LowerNonrecoverable=0
NegativeHysteresis=2
OriginalReading=0
OwnerLun=0
PositiveHysteresis=2
Reading=20
ReadingMask=6168
ReadingStatus=1
SensorIdentifier=“”
SensorName=“SSD Disk2 Temp”
SensorNumber=255
SensorType=1
UpperCritical=85
UpperNoncritical=84
UpperNonrecoverable=0
bmc.kepler.Systems.ThresholdSensorDisplay
AssertStatus=0
Health=“”
LowerCriticalDisplay=“”
LowerNoncriticalDisplay=“”
LowerNonrecoverableDisplay=“”
NegativeHysteresisDisplay=“”
PositiveHysteresisDisplay=“”
ReadingDisplay=“”
Status=“”
UnitDisplay=“”
UpperCriticalDisplay=“”
UpperNoncriticalDisplay=“”
UpperNonrecoverableDisplay=“”
Private
Accuracy=0
Analog=1
AssertMask=29312
B=0
BA=0
BaseUnit=1
BelongsToSystem=false
DeassertMask=29312
Initialization=127
IsValid=true
Linearization=0
M=100
MT=0
MaximumReading=127
MinimumReading=128
ModifierUnit=0
NominalReading=25
NormalMaximum=0
NormalMinimum=0
OwnerId=32
RBExp=224
ReadingType=1
Unit=128

~ ~ $ mdbctl lsprop ThresholdSensor_NvmeTemp_0101081004
bmc.kepler.Object.Properties
ClassName=“ThresholdSensor”
ObjectIdentifier=[1,“1”,“1”,“0101081004”]
ObjectName=“ThresholdSensor_NvmeTemp_0101081004”
TraceSamplingRate=0
bmc.kepler.Systems.ThresholdSensor
Capabilities=104
EntityId=4
EntityInstance=101
LowerCritical=0
LowerNoncritical=0
LowerNonrecoverable=0
NegativeHysteresis=2
OriginalReading=0
OwnerLun=0
PositiveHysteresis=2
Reading=20
ReadingMask=6168
ReadingStatus=1
SensorIdentifier=“”
SensorName=“SSD Disk3 Temp”
SensorNumber=255
SensorType=1
UpperCritical=85
UpperNoncritical=84
UpperNonrecoverable=0
bmc.kepler.Systems.ThresholdSensorDisplay
AssertStatus=0
Health=“”
LowerCriticalDisplay=“”
LowerNoncriticalDisplay=“”
LowerNonrecoverableDisplay=“”
NegativeHysteresisDisplay=“”
PositiveHysteresisDisplay=“”
ReadingDisplay=“”
Status=“”
UnitDisplay=“”
UpperCriticalDisplay=“”
UpperNoncriticalDisplay=“”
UpperNonrecoverableDisplay=“”
Private
Accuracy=0
Analog=1
AssertMask=29312
B=0
BA=0
BaseUnit=1
BelongsToSystem=false
DeassertMask=29312
Initialization=127
IsValid=true
Linearization=0
M=100
MT=0
MaximumReading=127
MinimumReading=128
ModifierUnit=0
NominalReading=25
NormalMaximum=0
NormalMinimum=0
OwnerId=32
RBExp=224
ReadingType=1
Unit=128

在查看传感器的Scanner对象,有如下报错:

~ ~ $ mdbctl lsprop Scanner_Temp_0101081003
bmc.kepler.Object.Properties
ClassName=“Scanner”
ObjectIdentifier=[1,“1”,“1”,“0101081003”]
ObjectName=“Scanner_Temp_0101081003”
TraceSamplingRate=0
BMC.Error.Unknow: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: chip: Chip_Temp_0101081003, bus: I2c_7, read failed: chip.lua:697: response error, chip internal error, SMC comple tion code: 4

bmc.kepler.Scanner.Aggregate
AggregateOffset=0
AggregateStatus=false
Private
Chip=“Chip_Temp_0101081003”
Debounce=“MidAvg_DiskTemp_0101081003”
FailureDebounceCount=10
Mask=255
NominalValue=20
Offset=3
Period=2000
ScanEnabled=1
Size=1
SuccessDebounceCount=10
Type=0

~ ~ $ mdbctl lsprop Scanner_Temp_0101081004
bmc.kepler.Object.Properties
ClassName=“Scanner”
ObjectIdentifier=[1,“1”,“1”,“0101081004”]
ObjectName=“Scanner_Temp_0101081004”
TraceSamplingRate=0
BMC.Error.Unknow: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: chip: Chip_Temp_0101081004, bus: I2c_7, read failed: chip.lua:697: response error, chip internal error, SMC comple tion code: 4

bmc.kepler.Scanner.Aggregate
AggregateOffset=0
AggregateStatus=false
Private
Chip=“Chip_Temp_0101081004”
Debounce=“MidAvg_DiskTemp_0101081004”
FailureDebounceCount=10
Mask=255
NominalValue=20
Offset=3
Period=2000
ScanEnabled=1
Size=1
SuccessDebounceCount=10
Type=0

Atlas 800I A3设备上电,对nvme硬盘(slot2/3)做热插拔验证(两块盘交替或同时做较快速插拔),大约半个小时,概率性出现nvme盘温度传感器(SSD Diskx Temp)丢失。

查看温度传感器的ThresholdSensor对象,如下:

~ ~ $ mdbctl lsobj ThresholdSensor |grep -i ThresholdSensor_NvmeTemp
ThresholdSensor_NvmeTemp_0101081003
ThresholdSensor_NvmeTemp_0101081004
~ ~ $ mdbctl lsprop ThresholdSensor_NvmeTemp_0101081003
bmc.kepler.Object.Properties
ClassName=“ThresholdSensor”
ObjectIdentifier=[1,“1”,“1”,“0101081003”]
ObjectName=“ThresholdSensor_NvmeTemp_0101081003”
TraceSamplingRate=0
bmc.kepler.Systems.ThresholdSensor
Capabilities=104
EntityId=4
EntityInstance=101
LowerCritical=0
LowerNoncritical=0
LowerNonrecoverable=0
NegativeHysteresis=2
OriginalReading=0
OwnerLun=0
PositiveHysteresis=2
Reading=20
ReadingMask=6168
ReadingStatus=1
SensorIdentifier=“”
SensorName=“SSD Disk2 Temp”
SensorNumber=255
SensorType=1
UpperCritical=85
UpperNoncritical=84
UpperNonrecoverable=0
bmc.kepler.Systems.ThresholdSensorDisplay
AssertStatus=0
Health=“”
LowerCriticalDisplay=“”
LowerNoncriticalDisplay=“”
LowerNonrecoverableDisplay=“”
NegativeHysteresisDisplay=“”
PositiveHysteresisDisplay=“”
ReadingDisplay=“”
Status=“”
UnitDisplay=“”
UpperCriticalDisplay=“”
UpperNoncriticalDisplay=“”
UpperNonrecoverableDisplay=“”
Private
Accuracy=0
Analog=1
AssertMask=29312
B=0
BA=0
BaseUnit=1
BelongsToSystem=false
DeassertMask=29312
Initialization=127
IsValid=true
Linearization=0
M=100
MT=0
MaximumReading=127
MinimumReading=128
ModifierUnit=0
NominalReading=25
NormalMaximum=0
NormalMinimum=0
OwnerId=32
RBExp=224
ReadingType=1
Unit=128

~ ~ $ mdbctl lsprop ThresholdSensor_NvmeTemp_0101081004
bmc.kepler.Object.Properties
ClassName=“ThresholdSensor”
ObjectIdentifier=[1,“1”,“1”,“0101081004”]
ObjectName=“ThresholdSensor_NvmeTemp_0101081004”
TraceSamplingRate=0
bmc.kepler.Systems.ThresholdSensor
Capabilities=104
EntityId=4
EntityInstance=101
LowerCritical=0
LowerNoncritical=0
LowerNonrecoverable=0
NegativeHysteresis=2
OriginalReading=0
OwnerLun=0
PositiveHysteresis=2
Reading=20
ReadingMask=6168
ReadingStatus=1
SensorIdentifier=“”
SensorName=“SSD Disk3 Temp”
SensorNumber=255
SensorType=1
UpperCritical=85
UpperNoncritical=84
UpperNonrecoverable=0
bmc.kepler.Systems.ThresholdSensorDisplay
AssertStatus=0
Health=“”
LowerCriticalDisplay=“”
LowerNoncriticalDisplay=“”
LowerNonrecoverableDisplay=“”
NegativeHysteresisDisplay=“”
PositiveHysteresisDisplay=“”
ReadingDisplay=“”
Status=“”
UnitDisplay=“”
UpperCriticalDisplay=“”
UpperNoncriticalDisplay=“”
UpperNonrecoverableDisplay=“”
Private
Accuracy=0
Analog=1
AssertMask=29312
B=0
BA=0
BaseUnit=1
BelongsToSystem=false
DeassertMask=29312
Initialization=127
IsValid=true
Linearization=0
M=100
MT=0
MaximumReading=127
MinimumReading=128
ModifierUnit=0
NominalReading=25
NormalMaximum=0
NormalMinimum=0
OwnerId=32
RBExp=224
ReadingType=1
Unit=128

在查看传感器的Scanner对象,有如下报错:

~ ~ $ mdbctl lsprop Scanner_Temp_0101081003
bmc.kepler.Object.Properties
ClassName=“Scanner”
ObjectIdentifier=[1,“1”,“1”,“0101081003”]
ObjectName=“Scanner_Temp_0101081003”
TraceSamplingRate=0
BMC.Error.Unknow: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: chip: Chip_Temp_0101081003, bus: I2c_7, read failed: chip.lua:697: response error, chip internal error, SMC comple tion code: 4

bmc.kepler.Scanner.Aggregate
AggregateOffset=0
AggregateStatus=false
Private
Chip=“Chip_Temp_0101081003”
Debounce=“MidAvg_DiskTemp_0101081003”
FailureDebounceCount=10
Mask=255
NominalValue=20
Offset=3
Period=2000
ScanEnabled=1
Size=1
SuccessDebounceCount=10
Type=0

~ ~ $ mdbctl lsprop Scanner_Temp_0101081004
bmc.kepler.Object.Properties
ClassName=“Scanner”
ObjectIdentifier=[1,“1”,“1”,“0101081004”]
ObjectName=“Scanner_Temp_0101081004”
TraceSamplingRate=0
BMC.Error.Unknow: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: chip: Chip_Temp_0101081004, bus: I2c_7, read failed: chip.lua:697: response error, chip internal error, SMC comple tion code: 4

bmc.kepler.Scanner.Aggregate
AggregateOffset=0
AggregateStatus=false
Private
Chip=“Chip_Temp_0101081004”
Debounce=“MidAvg_DiskTemp_0101081004”
FailureDebounceCount=10
Mask=255
NominalValue=20
Offset=3
Period=2000
ScanEnabled=1
Size=1
SuccessDebounceCount=10
Type=0

一键式日志(去掉后缀zip再解压):

disk–lost-A800IA3_2102315QYP10S3100024_20260519-0954.rar.zip (9.7 MB)

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

总结

该问题的根本原因是在上电状态下对 NVMe 硬盘(特别是 Slot 2 和 Slot 3)进行快速、反复的热插拔操作时,BMC 与 NVMe 盘温度传感器芯片之间的 I2C 通信链路 因硬件电气特性或协议交互异常而中断,导致 BMC 无法成功读取温度数据,表现为温度传感器“丢失”。

这是一个已知的、与特定硬件平台(Atlas 800I A3)和操作行为(上电热插拔)相关的概率性硬件兼容性或固件稳定性问题

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

根据您提供的上下文信息,关于 Atlas 800I A3 设备在上电状态下对 NVMe 盘进行热插拔导致温度传感器丢失的问题,分析如下:

根本原因

问题出在热插拔操作导致 I2C 通信链路中断,使得 BMC 无法通过 Scanner 对象正常读取 NVMe 硬盘的温度传感器数据。

  1. 现象与日志分析

    • 执行命令 mdbctl lsprop Scanner_Temp_0101081003Scanner_Temp_0101081004 时,系统报错:
      BMC.Error.Unknow: ... chip: Chip_Temp_..., bus: I2c_7, read failed: chip.lua:697: response error, chip internal error, SMC completion code: 4
    • 此错误明确指示:BMC 在尝试通过 I2C 总线 (I2c_7) 访问NVMe 盘的温度传感器芯片 (Chip_Temp_…) 时,读取失败,并返回了“芯片内部错误”和“SMC 完成码为 4”。
  2. 技术关联

    • 根据知识图谱,Scanner_Temp 是一个用于监控硬件组件(尤其是 NVMe 驱动)温度状态的数据源,它通过 Chip_TempChip 传感器来获取原始温度数据。
    • NVME Disk 实体与 Temperature Sensor Loss 概念直接相关联,明确指出:在 Atlas 800I A3 系统中,反复热插拔操作后,NVME 盘存在温度传感器丢失的概率
    • 传感器数据读取依赖于稳定的 SmbusI2C 通信接口。热插拔操作的电气瞬变或握手时序问题,可能导致 I2C 链路上出现拥塞通信故障,从而使得 BMC 认为对应的温度传感器芯片“丢失”或无法响应。
  3. 受影响的对象

    • 根据日志,受影响的传感器为 ThresholdSensor_NvmeTemp_0101081003(对应 Slot 2)和 ThresholdSensor_NvmeTemp_0101081004(对应 Slot 3),表现为 SSD Disk2 TempSSD Disk3 Temp 传感器读值丢失。

总结

该问题的根本原因是在上电状态下对 NVMe 硬盘(特别是 Slot 2 和 Slot 3)进行快速、反复的热插拔操作时,BMC 与 NVMe 盘温度传感器芯片之间的 I2C 通信链路 因硬件电气特性或协议交互异常而中断,导致 BMC 无法成功读取温度数据,表现为温度传感器“丢失”。

这是一个已知的、与特定硬件平台(Atlas 800I A3)和操作行为(上电热插拔)相关的概率性硬件兼容性或固件稳定性问题

BMC.Error.Unknow: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: chip: Chip_Temp_0101081003, bus: I2c_7, read failed: chip.lua:697: response error, chip internal error, SMC completion code: 4

该报错信息显示通过I2C与硬件读写时发生了错误,且错误原因来自于硬件内部,smc收到的返回错误码为4。建议先与逻辑进一步确认此时报错的具体原因进行检查