// 此模板仅供参考,如果不适用可以修改
问题描述
厂商为YANGTZE MEMORY(长江存储)的硬盘无参数“预估寿命”,其他厂商的都有该参数
重现步骤
期望结果
有预估寿命
实际结果
无预估寿命
尝试过的解决方案
[列出您已经尝试过的解决方案及结果]
// 此模板仅供参考,如果不适用可以修改
厂商为YANGTZE MEMORY(长江存储)的硬盘无参数“预估寿命”,其他厂商的都有该参数
有预估寿命
无预估寿命
[列出您已经尝试过的解决方案及结果]
答案内容由AI生成,仅供参考:
| 项目 | 内容 |
|---|---|
| 问题本质 | YANGTZE MEMORY 硬盘的 EstimatedRemainingLifespan 字段未被更新,保持 0xFFFFFFFF,前端不显示该属性 |
| 对比现象 | 其他厂商硬盘被设置为 4294967294,因此显示 -- |
| 根本原因 | 缺少对该厂商的显式兼容处理,未触发字段赋值流程 |
| 解决建议 |
0xFFFFFFFF 和 4294967294 都渲染为 --(推荐立即实施)0xA428B7 显式设置 EstimatedRemainingLifespan = 4294967294推荐优先实施 方案一 + 方案二,实现界面一致性与系统健壮性提升。
在 openUBMC 系统的 存储管理 页面中,厂商为 YANGTZE MEMORY(长江存储) 的 SSD 硬盘 未显示“预估寿命”参数,而其他厂商(如华为)的硬盘则可以正常显示该参数(即使值为 --)。这一现象表明系统对长江存储硬盘的健康状态信息采集存在兼容性或数据映射问题。
通过提供的文档与知识图谱确认:
厂商信息:
YANGTZE MEMORY0xA428B7(即 PD_VENDOR_ID_YANGTZE_MEMORY)PD_VENDOR_NAME_YANGTZE_MEMORY = "YANGTZE MEMORY"在系统日志中的体现:
controller_object.lua 日志中明确记录了:test:vendor is A428B7, vendor name is YANGTE MEMORY
(注:此处“YANGTE MEMORY”为笔误或显示问题,对应于 YANGTZE MEMORY)硬盘型号示例:
YMTC YMES0XH09B48ME
表明系统已正确识别该硬盘的厂商信息。
EstimatedRemainingLifespan:
pd_identify_service.lua 中默认初始化为 0xFFFFFFFF(即 4294967295),代表 无效或未支持 的状态。PredictedMediaLifeLeftPercent:
根据文档 1 和 CSR配置字典 可知:
const estimatedRemainingLifespan = bodyData.EstimatedRemainingLifespan === 4294967294 ?
'–' : isEmptyProperty(bodyData.EstimatedRemainingLifespan);
说明:
EstimatedRemainingLifespan == 4294967294 → 显示 --EstimatedRemainingLifespan == 4294967295 (0xFFFFFFFF) → 不显示(视为 null)因此,仅当后端将此字段更新为有效数值或
4294967294时,前端才会渲染该属性。
结合知识图谱与上下文,可得出以下结论:
98%。Available Spare 或 Wear Leveling Count。EstimatedRemainingLifespan 仍为默认初始化值 0xFFFFFFFF| 原因 | 依据 |
|---|---|
| 1. 缺少长江存储硬盘的寿命换算模型 | 系统可能依赖 RAID 卡或 BMC 驱动根据厂商特定算法将“磨损率”转为“剩余寿命(天/月)”。但目前仅华为、三星等主流厂商被适配。 |
| 2. SMART 信息获取路径异常 | c_nvme 模块负责管理 NVMe 设备并跟踪 PredictedMediaLifeLeftPercent,但对于 SATA SSD,若 RAID 卡(如 Broadcom 9560-8i)无法解析 YMTC 特定 SMART 结构,则无法提取完整数据。 |
| 3. 数据未更新到 DriveSubHealth 结构 | bmc.kepler.Systems.Storage.Drive.DriveSubHealth 应包含 EstimatedRemainingLifespan 字段,但因未触发非默认赋值逻辑,保持 0xFFFFFFFF,导致 Web UI 不显示。 |
| 4. 厂商 ID 映射不完整 | 尽管日志中识别出 A428B7,但代码中可能缺少对该 vendor ID 的特殊处理分支,跳过了寿命推算流程。 |
| 项目 | HUAWEI SSD | YANGTZE MEMORY SSD |
|---|---|---|
| 是否显示“预估寿命” | --) |
|
| EstimatedRemainingLifespan 值 | 4294967294(不支持) |
|
| 显示逻辑 | 前端强制渲染 -- |
|
| 原因 | 系统识别设备,但不支持计算寿命 | |
| 长江盘为何不同? | 4294967294,仍为 0xFFFFFFFF,不触发显示逻辑 |
关键差异点:系统是否对特定厂商执行了“标记为不支持但需显示”的操作。
核心问题:
厂商为 YANGTZE MEMORY 的硬盘虽然已被正确识别,并能够读取“剩余磨损率”(98%),但由于:
0xA428B7 启用寿命估算逻辑;EstimatedRemainingLifespan 字段 保持原始值 0xFFFFFFFF;而其他厂商硬盘即使不支持寿命估算,也会被系统显式设置为 4294967294,从而触发前端显示 --。
修改前端逻辑,当 EstimatedRemainingLifespan 为 0xFFFFFFFF 或 4294967294 时,均显示为 --。
修改文件:
// webui/src/pages/System/Storage/components/drivers/drivers.service.ts
const estimatedRemainingLifespan = bodyData.EstimatedRemainingLifespan === 4294967294 ||
bodyData.EstimatedRemainingLifespan === 4294967295 ?
'–' : bodyData.EstimatedRemainingLifespan;
效果:所有未支持寿命估算的硬盘(包括长江存储)都将显示“预估寿命: --”,提升界面一致性。
在 pd_identify_service.lua 或 controller_object.lua 中添加对 0xA428B7 的判断:
if vendorId == 0xA428B7 then -- YANGTZE MEMORY
drive.EstimatedRemainingLifespan = 4294967294 -- 标记为“不支持但存在”
else
drive.EstimatedRemainingLifespan = common_def.INVALID_U32 -- 保持默认
end
效果:使长江存储盘与其他厂商保持一致行为,便于统一管理和监控。
基于 PredictedMediaLifeLeftPercent 和 “累计通电时间”,使用行业通用公式估算剩余寿命(单位:天/月)。
例如:
预计总通电时间 = 通电时间 / (1 - 剩余磨损率)
剩余寿命 = 预计总通电时间 - 当前通电时间
再写入 EstimatedRemainingLifespan 字段。
此方案需验证长江存储 SSD 的磨损率是否符合线性模型。
| 项目 | 内容 |
|---|---|
| 问题本质 | YANGTZE MEMORY 硬盘的 EstimatedRemainingLifespan 字段未被更新,保持 0xFFFFFFFF,前端不显示该属性 |
| 对比现象 | 其他厂商硬盘被设置为 4294967294,因此显示 -- |
| 根本原因 | 缺少对该厂商的显式兼容处理,未触发字段赋值流程 |
| 解决建议 |
0xFFFFFFFF 和 4294967294 都渲染为 --(推荐立即实施)0xA428B7 显式设置 EstimatedRemainingLifespan = 4294967294推荐优先实施 方案一 + 方案二,实现界面一致性与系统健壮性提升。
在联机帮助可见如下文字
仅接口类型为SATA且介质类型为SSD的硬盘支持预估寿命。当预估寿命功能开启且硬盘支持预估寿命功能时,显示预估寿命。若预估寿命显示为–,表示暂未获取到硬盘数据。预估寿命与硬盘维保期限无关。
支持计算预估寿命的盘目前只有部分厂商的SATA SAS盘,intel samsum 和huawei