问题描述
烧片后或重启BMC后, 出现首页机框图不显示的问题;
定位过程如下:
1.怀疑web请求有问题;
异常 ‘https://70.183.12.117/UI/Static/theme/custom/bmcimg/product/null.png’
正常 https://70.189.80.157/UI/Static/theme/custom/bmcimg/product/img_01.png
-
该请求来自/UI/Rest/Overview的返回, 发现为null;
-
/UI/Rest/Overview来自资源树路径/bmc/kepler/Systems/1/Product;
-
环境/bmc/kepler/Systems/1/Product的资源树路径不见了
异常如下图
正常如下图
-
该资源树来自bmc.kepler.product_mgmt
-
日志查看发现闭源模块product_mgmt有db相关报错
怀疑可能是烧片后没有持久化文件, 而模块没有正确处理导致初始化过程中断;
以下是一键收集
dump_null_20260416-0750.tar.gz (1.5 MB)
环境信息
- 软件版本:openUBMC 1230LTS sp1
重现步骤
- 烧片后有大概率出现
- 重启也有可能出现
答案内容由AI生成,仅供参考:
1711烧片后闭源product_mgmt模块资源树路径丢失问题分析
问题现象
在1711烧片或重启BMC后,出现首页机框图不显示的问题。具体表现为:
- Web请求路径异常:
https://70.183.12.117/UI/Static/theme/custom/bmcimg/product/null.png
- 正常应为:
https://70.189.80.157/UI/Static/theme/custom/bmcimg/product/img_01.png
/UI/Rest/Overview接口返回的ProductImage字段为null
- 资源树路径
/bmc/kepler/Systems/1/Product丢失
问题定位过程
1. 资源树结构对比
异常环境资源树缺失情况:
/bmc/kepler/Systems/1/Product // 该路径完全缺失
正常环境资源树结构:
└─/bmc/kepler/Systems
└─/bmc/kepler/Systems/1
├─/bmc/kepler/Systems/1/Contact
└─/bmc/kepler/Systems/1/Product // 存在Product路径
该资源树由bmc.kepler.product_mgmt模块提供,其正常运行对产品信息显示至关重要。
2. 日志分析
从app.log.1中发现大量与product_mgmt模块相关的错误日志:
1. 2026-04-16 07:07:33.153243 product_mgmt ERROR: persist_client_lib.lua(446): read by tables call failed, error: BMC.Error.Unknow: ... attempt to index local 'db' (a nil value)
2. 2026-04-16 07:11:45.731335 product_mgmt ERROR: service.lua(49): Get product obj failed!
3. 2026-04-16 07:11:45.732531 product_mgmt ERROR: app_preloader.lua(232): ...pcall failed(...mc/apps/product_mgmt/lualib/digital_warranty/service.lua:50: Get product obj failed)
关键错误信息显示:
- 数据库访问失败(
attempt to index local 'db' (a nil value))
- 无法获取产品对象(
Get product obj failed!)
- 连续多次pcall调用失败,表明初始化过程反复失败
3. 根本原因分析
根据知识图谱信息和日志分析,问题的根本原因如下:
数据库持久化机制失效
product_mgmt模块依赖于数据库持久化存储来管理产品信息。然而,在烧片或重启过程中,出现了以下问题:
-
持久化数据未正确创建
烧片过程中,/data/persistence目录未能成功创建,导致数据库文件无法持久化存储。这与"复位持久化"机制有关:数据在BMC重启后可保留,但在BMC升级、AC掉电和Flash擦写时会丢失。
-
模块容错机制不足
product_mgmt模块在初始化时尝试访问数据库,但由于db对象为nil值,导致"attempt to index local ‘db’"错误。模块未能妥善处理数据库不存在或初始化失败的情况,导致整个服务启动失败。
-
服务级联失败
由于product_mgmt服务启动失败,依赖它的digital_warranty等子服务也无法正常工作,形成级联故障。
问题关联知识
相关实体关系
| 实体 |
关系 |
目标实体 |
描述 |
Bmc.Kepler.Product_Mgmt |
实现 |
bmc.kepler.Systems.Product |
product_mgmt模块负责提供产品信息接口 |
bmc.kepler.Systems.Product |
映射 |
ProductPicture |
产品图片信息通过此接口暴露 |
复位持久化 |
特性 |
BMC升级 |
升级过程中数据会丢失 |
相似问题案例
在Topic 3606中,昆仑太科_安阳阳报告了类似问题:“最终定位是BMC环境问题,不是白牌包问题,重启BMC后,升级成功,页面也可以正常访问”。这表明product_mgmt模块对环境状态敏感,环境异常可能导致服务初始化失败。
在Topic 5073中,日志分析显示/data/persistence目录未创建,导致数据库无法打开,这与当前问题高度相似。
解决方案建议
短期解决方案
-
检查并修复持久化目录
# 确保持久化目录存在且可写
mkdir -p /data/persistence
chmod 755 /data/persistence
-
强制重启BMC恢复
根据昆仑太科_安阳阳的经验,重启BMC服务可以解决临时状态问题。
-
验证product_mgmt组件版本
检查/etc/package_info中product_mgmt组件的版本信息,确保使用的是最新稳定版本。
长期改进建议
-
增强模块容错能力
- 修改
product_mgmt模块代码,增加数据库初始化前的健壮性检查
- 实现当数据库不可用时的降级机制,至少保证基础服务可用
-
优化烧片流程
- 在烧片脚本中加入对
/data/persistence目录的预创建和权限设置
- 增加烧片后验证步骤,确保关键服务正常运行
-
改进持久化策略
- 考虑将关键产品信息采用"掉电持久化"而非"复位持久化"
- 实现配置文件备份机制,防止升级导致数据丢失
-
完善监控告警
- 增加对
product_mgmt服务状态的健康检查
- 当资源树关键路径缺失时触发告警
验证方法
-
检查资源树路径是否存在:
mdbctl tree | grep "/bmc/kepler/Systems/1/Product"
-
验证ProductPicture属性值:
mdbctl lsprop /bmc/kepler/Systems/1/Product bmc.kepler.Systems.Product ProductPicture
-
确认Web接口返回正常:
curl https://<BMC_IP>/UI/Rest/Overview
应返回正确的ProductImage值如img_01而非null。
vyasa
(欧文健)
3
psr没有配置product对象,升级一下psr试试呢