mdbctl 版本信息 项目 内容 组件版本 1.130.2 首发版本 openUBMC 26.09 文档作者 openUBMC 社区 最后更新 2026-09-15 许可证 Mulan PSL v2
1. 组件概述 1.1 组件简介 mdbctl(micro-component command-line interface)是 openUBMC 微组件在线调试命令行客户端。它通过 MDB(Management DataBase)查询资源树元数据,通过 MACA 获取组件信息,再调用目标组件的 D-Bus 对象、属性和方法,实现资源树浏览、属性查询、方法调用、日志控制、组件自定义命令、内存快照、属性跟踪、性能统计和 IPMI 消息跟踪等调试能力。 mdbctl 的组件类型为 command。系统构建阶段会把以下别名追加到 /etc/profile:
bash alias mdbctl = '/opt/bmc/skynet/lua /opt/bmc/apps/mdbctl/service/mdbctl.lua' mdbctl 支持两种执行方式:
执行方式 示例 状态是否保留 适用场景 直接执行 mdbctl lsmc否;执行一条命令后退出 无需 attach 的一次性查询 交互执行 先执行 mdbctl,再在 % 提示符下输入命令 是;在本次进程内保留已连接组件等上下文 attach 后执行 lscmd、dloglevel、dlogtype、snapshot、traceprop 或组件自定义命令
1.2 解决什么问题 统一资源树调试入口 :开发者无需先查找对象的服务名和对象路径,可用对象名查询类、对象、接口、属性和方法。降低 D-Bus 调试门槛 :mdbctl 根据对象自省信息自动解析属性或方法签名,并把命令行参数封装成 D-Bus 消息。提供组件在线调试会话 :通过 attach 与目标微组件建立调试控制台连接,获取组件自定义命令并调整其调试日志。支持高风险操作审计 :setprop 和 call 的成功或失败结果会通过统一日志接口记录操作日志。提升问题定界效率 :可生成内存快照、跟踪属性变化、统计 Signal/RPC 调用、设置预置跟踪采样点并跟踪 IPMI 消息。区分发布与调试能力 :Release 包保留只读查询和受控调试能力;Debug 包额外提供属性修改、任意方法调用、快照和性能分析等能力。1.3 核心功能 组件和资源树发现 :lsmc、lsclass、lsobj。属性和方法查看 :lsprop、getprop、Debug 包中的 lsmethod。组件调试会话 :attach、lscmd、目标组件自定义命令。日志控制 :dloglevel、dlogtype。跟踪与性能分析 :trace、traceipmi、Debug 包中的 traceprop、profiling、snapshot。高风险调试操作 :Debug 包中的 setprop、call。命令框架扩展 :支持新增内置命令,也支持目标组件通过符合约定的 D-Bus 接口和自省注解动态提供命令。1.4 关键术语表 术语 解释 MDB Management DataBase,在本组件中用于查询类、命名对象、对象归属服务和匹配对象等资源树元数据 MACA 微组件管理组件;mdbctl 使用其接口获取组件列表,并通过 MDB 服务查询资源树信息 命名对象 资源树中可由 ObjectName 唯一标识的对象;mdbctl 根据对象名解析实际服务名和对象路径 attach在当前 mdbctl 进程中连接一个目标微组件,并建立调试控制台及心跳通道;该状态不会跨进程保存 Release 命令 Release 和 Debug 构建中均安装的命令,源码位于 command/release Debug 命令 仅 CMAKE_BUILD_TYPE=DEBUG 时安装的命令,源码位于 command/debug 组件自定义命令 目标组件在符合命名约定的 Release/Debug 接口中公开的方法;mdbctl 在 attach 后通过自省动态发现并调用 Context mdbctl 调用部分目标接口时自动添加的 a{ss} 上下文,包含调用界面、用户名、客户端地址、鉴权和权限信息等 Override setprop set 使用的覆盖模式;对外显示覆盖值,但不等同于持久化配置或写硬件Sampling Rate TraceSamplingRate,取值 0~1;0 表示取消覆盖采样配置,非零值表示设置采样率Snapshot 目标组件输出的进程内存对象快照;通常位于 /dev/shm/snapshot_<module> 或 /dev/shm/snapshotdiff_<module>
1.5 外部交互边界图 1.5.1 主要依赖和调用边界 用途 服务名 对象路径 接口/方法 获取组件列表 bmc.kepler.maca/bmc/kepler/MacaServicebmc.kepler.MCAdmin.GetComponentListMDB 查询 当前源码直接调用时使用 bmc.kepler.maca /bmc/kepler/MdbServicebmc.kepler.Mdb;其他查询由 mc.mdb.mdb_service 封装连接目标组件 bmc.kepler.<module>/bmc/kepler/<module>/MicroComponentbmc.kepler.MicroComponent.Debug.AttachDebugConsole / DetachDebugConsole日志级别和输出方式 bmc.kepler.<module>/bmc/kepler/<module>/MicroComponentbmc.kepler.MicroComponent.Debug内存快照 bmc.kepler.<module>/bmc/kepler/<module>/MicroComponentbmc.kepler.MicroComponent.Snapshot性能统计 bmc.kepler.<module>/bmc/kepler/<module>/MicroComponentbmc.kepler.MicroComponent.Performance属性上下文操作 对象实际归属服务 MDB 返回的实际对象路径 bmc.kepler.Object.Properties.SetWithContext 等IPMI 消息跟踪 bmc.kepler.ipmi_core/bmc/kepler/Debug/IpmiCore/TraceIpmibmc.kepler.Debug.IpmiCore.TraceIpmi.Trace
1.5.2 安装和临时文件 路径 用途 生命周期 /opt/bmc/apps/mdbctlmdbctl 安装目录 随镜像存在 /opt/bmc/apps/mdbctl/service/mdbctl.lua命令入口脚本 随镜像存在 /dev/shm/<pid>.sockattach 调试控制台 Socket mdbctl 进程级;正常 bye 时删除 /dev/shm/<pid>.hbsockattach 心跳 Socket mdbctl 进程级;正常 bye 时删除 /dev/shm/snapshot_<module>基线内存快照 由目标组件生成;需人工清理或由系统机制清理 /dev/shm/snapshotdiff_<module>差异内存快照 由目标组件生成;需人工清理或由系统机制清理
2. API 使用说明与示例 2.1 命令语法和通用规则 功能说明 mdbctl 将 CLI 命令作为用户接口。直接执行形式为:
bash mdbctl < comman d > [arguments...] 交互执行形式为:
bash $ mdbctl
...
% < comman d > [arguments...] 记号 含义 <name>必选参数 [name]可选参数或数量可变的参数 单引号或双引号 将带空格的文本作为一个参数,例如 "hello world"
通用限制条件 attach 状态只存在于当前 mdbctl 进程;必须连接后再在同一交互会话 中执行依赖 attach 的命令。源码没有把每条命令的布尔执行结果作为进程退出参数传给 os.exit。自动化脚本不能只检查 $?,还要检查终端响应中的 Failed、D-Bus 错误或预期成功文本。 setprop 和 call 会记录完整命令行的成功/失败操作日志。不要把口令、密钥或其他敏感数据作为其明文参数。参数封装支持常用 D-Bus 基础类型、数组、字典和结构体;当前消息封装器不支持直接从 CLI 构造 Variant (v)。 数组参数首先填写元素数量。例如签名 as 的两个字符串可写为 2 value1 value2。 布尔值接受:1/yes/y/true/t 和 0/no/n/false/f。 对象名必须能由 MDB 唯一解析;不存在和重名都会拒绝后续操作。 当前命令矩阵 命令 Release 包 Debug 包 需要 attach 主要风险 help、bye是 是 否 低 lsmc、lsclass、lsobj、lsprop、getprop是 是 否 低,只读 attach是 是 否 中,建立调试连接 lscmd、dloglevel、dlogtype是 是 是 中,改变目标组件调试状态 trace、traceipmi是 是 否 中,可能增加日志量或性能开销 lsmethod否 是 否 低,只读 setprop、call否 是 否 高,可能改变运行状态或调用任意方法 snapshot、traceprop否 是 是 中到高,可能增加内存、日志和性能开销 profiling否 是 否;attach 后仅统计已连接组件 中,短时增加统计开销 组件自定义命令 取决于目标接口 取决于目标接口 是 取决于目标命令
启动示例 bash $ mdbctl
**********************************************************************
Debug Shell
Copyright ( C ) 2023
**********************************************************************
% help 直接执行只适用于单条无状态命令:
2.2 help 功能说明 显示当前 mdbctl 进程已经注册、且在当前 attach 状态下可见的命令帮助。帮助内容包含命令格式和描述。
属性 内容 接口形式 helpSDK 首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 低 废弃状态 正常可用
参数说明 该命令设计上不需要参数。当前实现会忽略 help 后的多余参数并继续打印帮助,不会返回通用参数错误;该宽松行为不属于稳定接口,调用方不应传入多余参数。
返回值与异常 返回/提示 含义 触发条件 处理建议 命令帮助列表 成功 正常执行 根据 Usage 选择命令 attach 相关命令未显示 当前尚未连接组件 need_attach=true 的命令会被帮助列表隐藏先执行 attach <module>,再在同一会话执行 help
应用场景 查看当前镜像实际安装了哪些 Release/Debug 命令。 连接目标组件后查看 attach 相关命令。 限制条件 help 的可见内容受构建类型和 attach 状态影响。当前实现对 help 后的多余参数不做校验,不应依赖这一行为。 调试示例 mdbctl bash % help
Usage: help
Get all command help information.
Usage: lsmc
List all micro component names.
... 2.3 bye 功能说明 退出交互式 mdbctl。若已 attach,先通知目标组件断开调试控制台,再删除当前进程的 Socket 和心跳 Socket。
属性 内容 接口形式 bye首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否;已 attach 时负责清理连接 风险等级 低 废弃状态 正常可用
参数说明 该命令不接受参数。多余参数通常会返回 Failed: invalid input parameter.。
返回值与异常 返回/提示 含义 触发条件 处理建议 Byebye. See you next time.成功退出 无参数且清理完成 无 Detach failed, failed to detach previous module.解除连接失败 目标组件不可达或拒绝 DetachDebugConsole 检查目标组件状态;必要时确认 /dev/shm/<pid>.*sock 是否残留 Failed: invalid input parameter.参数非法 输入了额外参数 删除多余参数
应用场景 正常结束 attach 调试会话。 确保目标组件恢复默认调试输出方式并停止心跳连接。 限制条件 建议使用 bye 正常退出,而不是直接关闭终端。 异常终止时可能留下临时 Socket;是否需要清理由实际现场状态决定。 调试示例 mdbctl bash % bye
Byebye. See you next time. 2.4 lsmc 功能说明 调用 MACA 的组件管理接口,列出当前系统可识别的全部微组件名称,并按字典序输出。
属性 内容 接口形式 lsmc首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 低,只读 废弃状态 正常可用
参数说明 该命令不接受参数。多余参数通常会返回 Failed: invalid input parameter.。
返回值与异常 返回/提示 含义 触发条件 处理建议 组件名列表 成功 MACA 返回组件列表 选择目标组件用于 lsclass 或 attach D-Bus 错误文本 查询失败 MACA 未启动、总线不可用或权限不足 检查 bmc.kepler.maca 和用户总线 Failed: invalid input parameter.参数非法 输入了额外参数 删除多余参数
应用场景 确认组件是否已加载。 为 attach 或按组件过滤类名提供候选值。 限制条件 列表来自运行环境,示例中的组件名不保证在所有产品存在。 仅表示组件已被 MACA 枚举,不代表其全部资源对象均正常。 调试示例 mdbctl bash % lsmc
hwdiscovery maca persistence ... 组件列表和顺序依目标镜像而变化。
busctl 交叉验证 bash busctl --user call bmc.kepler.maca /bmc/kepler/MacaService bmc.kepler.MCAdmin GetComponentList 'a{ss}' 0 2.5 lsclass 功能说明 列出全板资源树中的类名,或只列出指定组件拥有的类名。结果去重后按字典序输出。
属性 内容 接口形式 lsclass [module name]SDK 首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 低,只读 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 module name输入,可选 String 组件名称;省略时查询全板类名 lsmc 输出中的有效组件名
返回值与异常 返回/提示 含义 触发条件 处理建议 类名列表 成功 MDB 查询完成 可继续执行 lsobj <class> Failed: invalid input parameter.组件名无效或参数过多 组件不在 MACA 列表,或多传参数 先执行 lsmc,使用准确的组件名 D-Bus/封装异常文本 MDB 查询失败 MDB 服务异常 检查 /bmc/kepler/MdbService
应用场景 限制条件 组件过滤依赖 MACA 组件名。 同名类会去重,输出不体现其归属服务数量。 调试示例 mdbctl bash % lsclass hwdiscovery
Connector MicroComponent ObjectGroup 2.6 lsobj 功能说明 查询指定类的全部命名对象,并逐行输出按字典序排列的对象名。
属性 内容 接口形式 lsobj <class name>首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 低,只读 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 class name输入,必选 String 资源树类名 使用 lsclass 获取
返回值与异常 返回/提示 含义 触发条件 处理建议 对象名列表 成功 类下存在对象 可继续执行 lsprop、getprop 或 lsmethod Object not found.未找到对象 类不存在或类下当前没有对象 确认类名、组件启动状态和对象注册状态 Failed: invalid input parameter.参数非法 缺少类名或参数过多 按命令格式重新输入
应用场景 限制条件 只输出对象名,不显示对象的 service/path。 同名对象问题应在后续命令中根据 Duplicated objects 提示定界。 调试示例 mdbctl bash % lsobj Connector
Connector_Exu_1_01 2.7 lsprop 功能说明 列出指定命名对象的公开 D-Bus 属性和 Private 属性。可选接口名用于过滤公开接口;Private 属性仍会单独输出。
属性 内容 接口形式 lsprop <object name> [interface name]首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 低,只读 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 object name输入,必选 String 命名对象 使用 lsobj 获取;必须唯一 interface name输入,可选 String 仅显示指定公开接口 对象自省中存在的接口名
返回值与异常 返回/提示 含义 触发条件 处理建议 接口及 property=value 列表 成功 对象解析、自省和 GetAll 成功 根据值继续定界 Failed: Object does not exist.对象不存在 MDB 未找到该命名对象 检查对象名和对象注册状态 Failed: Duplicated objects.对象名不唯一 MDB 返回多个同名对象 修正模型命名或使用其他工具确认归属 D-Bus 错误文本 接口或属性读取失败 对象服务异常、接口不支持 GetAll 或权限不足 用 busctl introspect 交叉验证
应用场景 一次查看对象全部属性。 只查看某个接口的公开属性。 查看资源树 Private 数据。 限制条件 指定一个不存在的接口时,当前实现可能只输出 Private 部分而不报“接口不存在”;应检查目标接口标题是否出现。 大量数组或字典以 JSON 形式输出。 调试示例 mdbctl bash % lsprop Connector_Exu_1_01 bmc.kepler.Object.Properties
bmc.kepler.Object.Properties
ClassName="Connector"
ObjectName="Connector_Exu_1_01"
Private
... 2.8 getprop 功能说明 读取指定对象、接口和属性的当前值,并在存在来源详情时输出引用、同步或默认值等详细信息。接口名为 Private 时读取私有属性。
属性 内容 接口形式 getprop <object name> <interface name> <property name>首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 低,只读 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 object name输入,必选 String 命名对象 使用 lsobj 获取;必须唯一 interface name输入,必选 String 公开接口名,或特殊值 Private 使用 lsprop 获取 property name输入,必选 String 属性名 目标接口中存在的属性
返回值与异常 返回/提示 含义 触发条件 处理建议 属性值 成功 属性读取成功 字符串带双引号;数组/字典按 JSON 输出 -------- details --------存在属性来源详情 属性为引用、同步等派生类型 结合 type、source、expression 和 default 定位数据来源 UnknownInterface接口不存在 接口名错误 先执行 lsprop UnknownProperty属性不存在 属性名错误 检查大小写和接口归属 对象不存在/重名提示 无法解析对象 MDB 无唯一对象 检查对象注册和命名
应用场景 读取单个关键属性。 确认属性的实际来源、引用链或同步表达式。 限制条件 当前函数以终端文本表示返回值,不保留 D-Bus 类型元数据。 Private 属性由目标对象的 GetPrivateProperties 返回 JSON。 调试示例 mdbctl bash % getprop Connector_Exu_1_01 bmc.kepler.Object.Properties ObjectName
"Connector_Exu_1_01" 2.9 attach 功能说明 连接指定微组件的调试控制台。mdbctl 校验组件名、Ping 目标 MicroComponent 对象、解除旧连接、通知新组件建立调试连接,并加载目标组件的自定义命令。
属性 内容 接口形式 attach <module name>首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否;执行成功后建立当前会话状态 风险等级 中 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 module name输入,必选 String 目标组件名 lsmc 输出中的有效组件
返回值与异常 返回/提示 含义 触发条件 处理建议 Success连接成功 组件存在、可 Ping、未被占用且 AttachDebugConsole 成功 继续执行 help、lscmd 或 attach 相关命令 Failed: invalid input parameter.组件名无效 组件不在 MACA 列表或缺少参数 先执行 lsmc Detach failed, failed to detach previous module.旧组件解除连接失败 切换组件时旧目标异常 先定界旧目标组件;不要假定新连接已建立 Resource is busy, module has already been attached or connection error occured.资源忙或连接错误 目标已被其他调试会话占用,或 AttachDebugConsole 失败 结束其他会话、检查目标组件和 /dev/shm Socket D-Bus Ping 错误 目标服务不可达 服务未注册或 MicroComponent 路径不存在 检查服务名和对象路径
应用场景 连接组件并显示其自定义命令。 调整目标组件调试日志。 执行快照或属性变更跟踪。 限制条件 必须在交互式 mdbctl 中保留状态;先执行 mdbctl attach hwproxy 再启动另一个 mdbctl dloglevel 无效。 一个 mdbctl 进程同一时间只保存一个 attach 目标;再次 attach 会先 detach 旧目标。 调试示例 mdbctl bash $ mdbctl
...
% attach hwdiscovery
Success
% help
... busctl 交叉验证 bash busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/hwdiscovery/MicroComponent org.freedesktop.DBus.Peer Ping 2.10 lscmd 功能说明 列出当前 attach 组件通过 Release/Debug 调测接口公开的自定义命令、参数类型、默认值和描述。
属性 内容 接口形式 lscmd首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 是 风险等级 低,只读 废弃状态 正常可用
参数说明 该命令不接受参数。多余参数通常会返回 Failed: invalid input parameter.。
返回值与异常 返回/提示 含义 触发条件 处理建议 Usage: <command> ... 列表成功 已 attach 且目标组件公开符合约定的方法 按输出格式调用自定义命令 空行 无可显示命令 未 attach,或目标组件没有匹配命令 先 attach;检查接口命名和构建类型 D-Bus 自省错误 无法加载命令 目标对象不可达或自省失败 检查目标组件对象和接口
应用场景 发现目标组件专属调试命令。 确认参数是否必选、可选以及默认值。 限制条件 Release mdbctl 只发现 bmc.<namespace>.Release.* 接口;Debug mdbctl 还发现 bmc.<namespace>.Debug.*。 同一命令存在于多个对象时,Usage 会增加 <ObjectName> 参数。 调试示例 mdbctl bash % attach maca
Success
% lscmd
Usage: mocklog < Coun t > < Tex t > [RepeatText]
... 2.11 dloglevel 功能说明 查询或临时设置当前 attach 组件的调试日志级别。设置时可指定生效小时数,默认 1 小时。
属性 内容 接口形式 dloglevel [level] [effective hours]首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 是 风险等级 中 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 level输入,可选 Enum String 目标调试日志级别;省略时查询 debug、info、notice、warning、erroreffective hours输入,可选 Integer 临时级别生效时长 1~24;默认 1
返回值与异常 返回/提示 含义 触发条件 处理建议 "<level>"查询成功 未传 level 确认当前值 空响应 设置成功 SetDlogLevel 调用成功 可再次执行无参数 dloglevel 验证 Failed: invalid attach module.未连接组件 当前会话没有 attach_service 先 attach Failed: invalid input parameter.参数非法 级别不在枚举中,或小时数不是 1~24 的整数 修正参数 D-Bus 错误文本 目标拒绝设置 接口不支持、权限不足或目标异常 检查目标组件调试接口
应用场景 临时提升某组件日志级别以复现问题。 查询当前组件的调试日志级别。 限制条件 设置成功时当前实现可能只输出空行,不打印 Success;应再次查询确认。 提高日志级别可能显著增加日志量,定位结束后恢复合理级别。 调试示例 mdbctl bash % attach maca
Success
% dloglevel
"notice"
% dloglevel debug 1
% dloglevel
"debug" busctl 交叉验证 bash busctl --user get-property bmc.kepler.maca /bmc/kepler/maca/MicroComponent bmc.kepler.MicroComponent.Debug DlogLevel 2.12 dlogtype 功能说明 查询或设置当前 attach 组件的调试日志输出方式。local 将调试输出导向当前调试控制台,file 恢复文件输出。
属性 内容 接口形式 dlogtype [type]首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 是 风险等级 中 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 type输入,可选 Enum String 日志输出方式;省略时查询 file 或 local
返回值与异常 返回/提示 含义 触发条件 处理建议 "file" / "local"查询成功 未传 type 确认当前输出方式 Success设置成功 SetWithContext 成功 观察相应输出位置 Failed: invalid attach module.未连接组件 当前会话未 attach 先 attach Set debug log type failed设置失败 目标调用失败 检查目标组件和权限
应用场景 把目标组件调试日志临时输出到当前 mdbctl 会话。 恢复文件输出。 限制条件 local 可能产生大量终端输出,应先缩小复现窗口。正常 detach/bye 时目标组件应恢复 file;异常中止后应重新查询确认。 调试示例 mdbctl bash % attach hwproxy
Success
% dlogtype local
Success
% dlogtype
"local"
% dlogtype file
Success busctl 交叉验证 bash busctl --user get-property bmc.kepler.hwproxy /bmc/kepler/hwproxy/MicroComponent bmc.kepler.MicroComponent.Debug DlogType 2.13 trace 功能说明 管理资源对象的预置跟踪采样率。当前源码只注册 sampling 操作:不传对象时查询全部已采样对象;传对象名或类名时设置/取消采样。
属性 内容 接口形式 trace sampling [object name] [rate]首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 中 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 sampling输入,必选 Literal 当前唯一操作 必须为 sampling object name输入,可选 String 命名对象或类名;省略时查询 MDB 中存在的对象名或类名 rate输入,可选 Double 采样率;省略时默认 1 0~1;0 表示取消覆盖采样
返回值与异常 返回/提示 含义 触发条件 处理建议 <object> <rate> 列表查询成功 只输入 trace sampling 确认已启用采样点 Success设置成功 对象或类解析并设置完成 复现业务后收集对应跟踪日志 Failed: invalid trace operation: ...操作名非法 不是 sampling 使用 trace sampling Failed: invalid input parameter.参数非法 采样率不在 0~1 或参数过多 修正参数 set <object> trace status failed: ...单对象设置失败 目标属性设置失败 检查对象归属服务、权限和 TraceSamplingRate 支持情况
应用场景 查询当前预置采样点。 对单对象或某类全部对象设置采样率。 限制条件 对类名操作时会遍历该类对象;应评估日志量和性能开销。 当前类级遍历不会汇总每个对象的失败结果,终端可能先打印单对象失败、最后仍打印 Success;批量设置后应执行 trace sampling 或逐对象核验。 采样率 0 的实现语义是取消 Override,而不是写入一个永久的 0。 调试示例 mdbctl bash % trace sampling
LogMock_0 1.0
% trace sampling LogMock_0 0.25
Success
% trace sampling LogMock_0 0
Success 2.14 traceipmi 功能说明 启动或停止指定通道的 IPMI 消息跟踪,可按 NetFn 和 Cmd 过滤。当前实现只支持输出到文件。
属性 内容 接口形式 traceipmi <operation type> <log type> <channel> [netfn] [cmd]首发版本 openUBMC 26.09 可用构建 Release、Debug 是否需要 attach 否 风险等级 中到高 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 operation type输入,必选 Enum String 开始或停止跟踪 start、stoplog type输入,必选 Literal 跟踪输出类型 当前仅 file channel输入,必选 Enum String IPMI 通道 bt、ipmb、edma、ipmbethnetfn输入,可选 U8 NetFn 过滤值 0~255;默认 255(不过滤) cmd输入,可选 U8 Cmd 过滤值 0~255;默认 255(不过滤)
返回值与异常 返回/提示 含义 触发条件 处理建议 Success.操作成功 ipmi_core Trace 调用成功 按平台配置收集跟踪文件 Failed: invalid operation type: ...操作非法 不是 start/stop 修正参数 Failed: invalid log type: ...输出类型非法 不是 file 使用 file Failed: invalid channel: ...通道非法 不在支持列表 选择受支持通道 Failed: invalid input parameter.过滤值非法 NetFn/Cmd 不是 0~255 数值 修正过滤值 D-Bus 错误文本 跟踪调用失败 ipmi_core 服务/对象不存在或拒绝操作 检查 ipmi_core 状态和接口
应用场景 抓取特定通道的 IPMI 请求和响应。 按 NetFn/Cmd 缩小问题范围。 限制条件 跟踪可能包含敏感管理报文,需按安全要求保存和传递。 启动后应成对执行 stop,避免长期产生大量日志。 源码未包含跟踪文件的最终收集路径配置,需按目标平台确认。 调试示例 mdbctl bash $ mdbctl traceipmi start file bt 0x30 0x01
Success.
$ mdbctl traceipmi stop file bt 0x30 0x01
Success. busctl 交叉验证 bash busctl --user introspect bmc.kepler.ipmi_core /bmc/kepler/Debug/IpmiCore/TraceIpmi bmc.kepler.Debug.IpmiCore.TraceIpmi 2.15 lsmethod 功能说明 通过对象自省列出指定命名对象的 BMC 接口方法、输入签名和参数名。可按接口过滤。
属性 内容 接口形式 lsmethod <object name> [interface name]SDK 首发版本 openUBMC 26.09 可用构建 仅 Debug 是否需要 attach 否 风险等级 低,只读 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 object name输入,必选 String 命名对象 MDB 中存在且唯一 interface name输入,可选 String 只显示指定接口 对象上存在的 bmc.* 接口
返回值与异常 返回/提示 含义 触发条件 处理建议 接口和方法列表 成功 对象自省成功 可据此准备 call 参数 Failed: Interface does not exist.接口不存在 指定接口未找到 省略接口先查看全部 对象不存在/重名提示 对象无法解析 MDB 无唯一对象 检查对象名 D-Bus 自省错误 无法读取方法 目标服务异常 用 busctl introspect 交叉验证
应用场景 在使用 call 前确认方法名和输入签名。 检查目标对象是否公开预期接口。 限制条件 仅 Debug 包安装。 只展示以 bmc 开头且含方法的接口;系统通用接口可能不列出。 调试示例 mdbctl bash % lsmethod Connector_Exu_1_01 bmc.kepler.Connector
bmc.kepler.Connector
Reload a{ss}sssy < Contex t > < Bo m > < I d > < AuxI d > < IdentifyMod e > 2.16 setprop 功能说明 设置、取消覆盖或常规修改指定对象属性。命令先读取属性当前 D-Bus 签名,再按签名解析命令行值,最后调用 SetWithContext。
属性 内容 接口形式 setprop <set|unset|modify> <object name> <interface name> <property name> [parameter list]首发版本 openUBMC 26.09 可用构建 仅 Debug 是否需要 attach 否 风险等级 高 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 operation type输入,必选 Enum String 操作类型 set、unset、modifyobject name输入,必选 String 命名对象 MDB 中存在且唯一 interface name输入,必选 String 属性所在接口 对象上存在的接口 property name输入,必选 String 目标属性 接口上存在的属性 parameter list输入,可变 按 D-Bus 签名解析 属性值;unset 不得带值 由属性签名决定
返回值与异常 返回/提示 含义 触发条件 处理建议 Success设置成功 SetWithContext 成功 立即执行 getprop 验证 Failed: invalid operation type: ...操作非法 不是 set/unset/modify 修正操作类型 Failed to parse ...值与属性类型不匹配 数值范围、布尔文本或复杂结构不合法 先查询属性类型,按签名重组参数 PropertyReadOnly常规修改只读属性失败 modify 目标不可写不要使用 modify;评估是否允许临时 set Override UnknownInterface / UnknownProperty接口或属性不存在 名称错误 先执行 lsprop Too few/Too many parameters for signature.参数数量不匹配 复杂值参数不足或过多 按 D-Bus 签名补齐
应用场景 临时覆盖只读或业务驱动属性,用于受控故障注入。 取消先前的 Override。 对目标明确支持写入的属性执行正常修改。 限制条件 仅 Debug 包安装,并会记录操作日志。 set 是 Override:不会自动等同于持久化或写硬件;unset 恢复原始值;modify 走普通属性写入语义,影响由目标组件决定。禁止在不了解业务影响时修改关键电源、散热、安全或升级属性。 当前 CLI 参数封装不支持 Variant (v)。 调试示例 mdbctl bash % setprop set Connector_Exu_1_01 bmc.kepler.Connector GroupPosition test_value
Success
% getprop Connector_Exu_1_01 bmc.kepler.Connector GroupPosition
"test_value"
% setprop unset Connector_Exu_1_01 bmc.kepler.Connector GroupPosition
Success 2.17 call 功能说明 调用指定命名对象的任意 D-Bus 方法。mdbctl 先自省目标方法,获取输入和输出签名,再封装参数并以 JSON/文本打印响应。
属性 内容 接口形式 call <object name> <interface name> <method name> [parameter list]首发版本 openUBMC 26.09 可用构建 仅 Debug 是否需要 attach 否 风险等级 高 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 object name输入,必选 String 命名对象 MDB 中存在且唯一 interface name输入,必选 String 目标接口 对象自省中存在 method name输入,必选 String 目标方法 接口自省中存在 parameter list输入,可变 按方法输入签名解析 方法参数 由自省签名决定
返回值与异常 返回/提示 含义 触发条件 处理建议 JSON/文本响应 调用成功且有出参 目标返回数据 按方法定义解释 空行 调用成功且无出参 方法返回签名为空 结合目标状态确认效果 UnknownInterface / UnknownMethod目标接口或方法不存在 名称错误 先用 lsmethod 或 busctl introspect Too few/Too many parameters for signature.参数数量不匹配 参数与输入签名不一致 按签名重新输入 D-Bus 错误文本 目标方法执行失败 业务校验、权限或内部错误 根据错误和目标组件日志排查
应用场景 调用只在 D-Bus 上暴露、但无专用 mdbctl 命令的方法。 快速验证目标接口和参数封装。 限制条件 仅 Debug 包安装,并会记录完整命令行操作日志。 可调用方法的业务影响由目标组件决定;在生产环境执行前必须完成风险评估。 无返回正文不代表业务状态一定符合预期,应查询目标属性或日志。 调试示例 mdbctl bash % call Connector_Exu_1_01 org.freedesktop.DBus.Properties GetAll bmc.kepler.Object.Properties
{ "ClassName" : "Connector" , "ObjectName" : "Connector_Exu_1_01" ,...} 2.18 snapshot 功能说明 请求当前 attach 组件生成基线内存对象快照或差异快照。
属性 内容 接口形式 snapshot <start|diff>首发版本 openUBMC 26.09 可用构建 仅 Debug 是否需要 attach 是 风险等级 中到高 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 operation type输入,必选 Enum String 快照操作 start 或 diff
返回值与异常 返回/提示 含义 触发条件 处理建议 snapshot file: /dev/shm/snapshot_<module>基线快照成功 start 完成 保存并分析文件 diff snapshot file: /dev/shm/snapshotdiff_<module>差异快照成功 先 start 后 diff 与基线对比增长对象 Failed: invalid attach module.未连接组件 当前会话未 attach 先 attach Failed: invalid operation type: ...操作非法 不是 start/diff 修正操作类型 目标异常文本 生成失败 目标不支持或资源不足 检查组件 Snapshot 接口和内存状态
应用场景 分析组件内存对象分布。 对复现前后快照做差,辅助定位增长对象。 限制条件 仅 Debug 包安装。 diff 应在同一目标上先执行 start。操作可能增加内存消耗;低内存场景必须谨慎。 快照位于 tmpfs /dev/shm,重启后通常不可保留,应及时导出。 调试示例 mdbctl bash % attach maca
Success
% snapshot start
snapshot file: /dev/shm/snapshot_maca
notice: this operation may cause memory consumption.
% snapshot diff
diff snapshot file: /dev/shm/snapshotdiff_maca
notice: this operation may cause memory consumption. 2.19 traceprop 功能说明 启动或停止指定属性的变更跟踪。目标对象必须归属于当前 attach 的组件。
属性 内容 接口形式 traceprop <trace|untrace> <object name> <interface name> <property name>首发版本 openUBMC 26.09 可用构建 仅 Debug 是否需要 attach 是 风险等级 中到高 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 operation type输入,必选 Enum String 开始或停止跟踪 trace、untraceobject name输入,必选 String 命名对象 必须归属当前 attach 服务 interface name输入,必选 String 属性接口 对象上存在 property name输入,必选 String 目标属性 接口上存在
返回值与异常 返回/提示 含义 触发条件 处理建议 Success操作成功 SetWithContext 完成 复现属性变化并收集目标组件日志 Failed: invalid attached module, expected module: <name>.连接了错误组件 对象归属服务与 attach_service 不同 attach 提示中的 expected module Failed: invalid operation type: ...操作非法 不是 trace/untrace 修正参数 Set trace property changes failed, ...目标拒绝跟踪 属性不支持、权限或内部错误 检查目标接口和日志
应用场景 定位属性被谁、在何时修改。 在复现窗口内临时开启高价值属性跟踪。 限制条件 仅 Debug 包安装。 跟踪可能显著增加日志量,应在复现后执行 untrace。 对象必须属于已 attach 组件。 调试示例 mdbctl bash % attach hwdiscovery
Success
% traceprop trace Connector_Exu_1_01 bmc.kepler.Connector GroupPosition
Success
% traceprop untrace Connector_Exu_1_01 bmc.kepler.Connector GroupPosition
Success 2.20 profiling 功能说明 统计组件进程在指定时长内的 Signal 和 RPC 调用信息。未 attach 时尝试对全部组件启动统计;已 attach 时只统计当前组件。
属性 内容 接口形式 profiling [duration]首发版本 openUBMC 26.09 可用构建 仅 Debug 是否需要 attach 否;attach 状态会改变作用范围 风险等级 中 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 duration输入,可选 Unsigned Integer 统计时长参数 1~30;默认 5
返回值与异常 返回/提示 含义 触发条件 处理建议 Success启动统计成功 目标调用完成 等待结果由目标组件按其实现输出 Failed: duration is out of range.时长非法 小于 1 或大于 30 使用 1~30 D-Bus 错误文本 统计启动失败 MDB/目标组件异常 检查组件服务和 Performance 接口
应用场景 分析单组件 RPC/Signal 热点。 对全系统组件做短时调用统计。 限制条件 仅 Debug 包安装。 未 attach 时会遍历多个组件,开销更大;建议先缩小范围。 未 attach 的全组件路径不会汇总每个目标调用的失败结果,Success 只表示遍历流程完成,不保证所有组件都已启动统计;必须结合各组件日志或结果逐项确认。 当前命令只表示启动统计成功;结果输出位置由目标组件实现决定,需结合组件日志或返回机制。 调试示例 mdbctl bash % profiling 5
Success
% attach hwproxy
Success
% profiling 5
Success 2.21 组件自定义命令 功能说明 在 attach 后,mdbctl 把目标组件符合命名和自省注解约定的方法动态映射为顶层命令。命令名可来自方法名,也可由 cmd 注解指定。
属性 内容 接口形式 <custom-command> [ObjectName] [arguments...]首发版本 openUBMC 26.09 可用构建 Release 接口命令可用于 Release/Debug;Debug 接口命令仅 Debug 是否需要 attach 是 风险等级 由目标命令决定 废弃状态 正常可用
参数说明 参数名 方向 类型 描述 取值范围 custom-command输入,必选 String 由 lscmd 显示的命令名 目标组件公开的命令 ObjectName输入,条件必选 String 当同一命令由多个对象提供时选择对象 lscmd Usage 显示该参数时必填arguments输入 按方法签名解析 必选/可选参数;可选参数缺省时使用注解默认值 由 lscmd 输出决定
返回值与异常 返回/提示 含义 触发条件 处理建议 目标返回值 执行成功 参数、鉴权和目标业务均通过 按命令说明解释 Failed: invalid input parameter.参数不足、过多或对象选择错误 未按 Usage 输入 重新执行 lscmd 权限/D-Bus 错误 鉴权或业务失败 当前用户权限不足、目标拒绝或超时 使用具备必要权限的账号并检查目标日志 超时错误 目标命令超过时限 执行超过 180 秒 优化目标命令或拆分操作
应用场景 运行目标组件专属诊断。 避免为每个组件把专属命令硬编码进 mdbctl。 限制条件 必须先 attach 并执行 lscmd 确认命令格式。 Release 非超级用户调用会携带鉴权和权限上下文;可执行性由目标组件最终决定。 命令参数中的 Variant (v) 不能由当前通用解析器直接构造。 调试示例 mdbctl bash % attach maca
Success
% lscmd
Usage: mocklog < Coun t > < Tex t > [RepeatText]
...
% mocklog 2 hello world
... 3. 组件扩展案例 3.1 扩展能力概述 mdbctl 有两类扩展方式:
目标组件自定义命令(推荐) :目标组件通过符合命名规则的 D-Bus 接口和自省注解公开方法。mdbctl 本体无需随每个业务命令修改。新增 mdbctl 内置命令 :在 command/release 或 command/debug 新增命令类,并加入对应 init.lua 注册列表。适合跨组件通用能力。3.2 扩展点一:目标组件自定义命令 3.2.1 接口发现规则 mdbctl attach 目标组件后,查询该服务中匹配以下规则的对象:
接口类别 接口名规则 Release mdbctl Debug mdbctl Release 自定义命令 bmc.<namespace>.Release.<name>可发现 可发现 Debug 自定义命令 bmc.<namespace>.Debug.<name>不发现 可发现 当前实现要求 bmc 与 Release/Debug 之间只有一个命名段,例如 bmc.kepler.Release.Example。
3.2.2 自省注解约定 mdbctl 从 D-Bus Introspection XML 读取以下信息:
方法上的 annotation name="cmd":值是 JSON,可包含 cmd 和 description。 以入参名为 annotation name 的参数注解:值是 JSON,可包含 optional、default、description 和 struct。 第一个名字为空的入参通常为 Context。mdbctl 在 CLI 帮助中跳过它,并在实际调用前自动添加 a{ss} 鉴权上下文。 若未配置 cmd,默认使用 D-Bus 方法名作为命令名。 同一命令/接口由多个对象提供时,mdbctl 自动把 <ObjectName> 放到命令参数首位。 下面是 mdbctl 能识别的自省输出契约示例 。具体 MDS/代码生成源文件写法由目标组件的建模工具决定: xml < interface name = "bmc.kepler.Release.Example" >
< method name = "DumpState" >
< annotation name = "cmd"
value = "{ " cmd " : " dumpstate " , " description " : " Dump component state. " }" />
< arg name = "" type = "a{ss}" direction = "in" />
< arg name = "Detail" type = "b" direction = "in" />
< annotation name = "Detail"
value = "{ " optional " :true, " default " :false, " description " : " Print detailed data. " }" />
< arg name = "Result" type = "s" direction = "out" />
</ method >
</ interface > 期望的 mdbctl 展示和调用形式:
bash % attach example
Success
% lscmd
Usage: dumpstate [Detail]
Dump component state.
Detail [Type:b][Def: false ] Print detailed data.
% dumpstate true
{ "status" : "ok" } 3.2.3 验证方法 确认目标组件已出现在 lsmc 中。 在同一 mdbctl 交互会话执行 attach <module>。 执行 lscmd,确认命令名、参数和默认值符合预期。 用最小合法参数调用命令,确认响应和目标组件日志。 使用权限不同的账号分别验证允许和拒绝场景。 Release 接口还应在 Release 镜像验证;Debug 接口只在 Debug 镜像验证。 3.2.4 注意事项 自定义命令调用超时为 180 秒。 Release 非超级用户调用会带鉴权标志和权限位;不要在目标组件中绕过权限校验。 参数顺序应保持“必选参数在前、可选参数在后”。 不要把密码、私钥或 Token 作为可回显的命令参数。 输出为单个字符串且内容是合法 JSON 时,mdbctl 会直接格式化输出该 JSON;其他返回值按 D-Bus 签名转换后编码为 JSON。 3.3 扩展点二:新增内置命令 3.3.1 新建命令类 以下示例新增一个无参数 version 命令:
lua local class = require 'mc.class'
local cmd_base = require 'command.base'
local version = class (cmd_base)
function version : ctor ()
self . name = 'version'
self . desc = 'Print mdbctl component version.'
end
function version : init ()
self . super . init ( self )
end
function version : execute (args)
if not self . super . execute ( self , args) then
return false
end
print ( '1.120.4 \n ' )
return true
end
return version Release 通用命令放置到:
text src/lualib/command/release/version.lua Debug 专用命令放置到:
text src/lualib/command/debug/version.lua 3.3.2 注册命令 在对应包的 init.lua 的 cmd_list 中加入 version:
lua local cmd_list = {
-- existing commands
'version'
} 命令对象构造时会通过基类自动注册到 commandset。
3.3.3 参数和校验 self.required:必选参数,帮助中显示为 <...>。self.optional:可选参数,帮助中显示为 [...]。self.flexible:签名相关的可变参数。自定义 check_<parameter_name>:参数解析后自动调用。例如 operation type 对应 check_operation_type。 execute 返回 true/false,并向终端打印清晰、可定界的响应。3.3.4 验证方法 bash
mdbctl help | grep -A1 'Usage: version'
mdbctl version
mdbctl version extra 预期:
text 1.120.4
Failed: invalid input parameter. 3.4 扩展注意事项 Release 命令始终安装;Debug 命令目录仅在 CMAKE_BUILD_TYPE=DEBUG 时安装。 新命令应优先复用 cmd_base:get_named_object、transport.message 和 transport.introspect,避免重复实现对象解析和签名转换。 所有 D-Bus 连接都应在成功和失败路径关闭。 高风险命令必须增加权限控制和操作审计;当前 mdbctl 入口只对内置 setprop、call 自动记录操作日志。 新增命令时同步补充单元测试、集成测试、帮助输出、错误场景和本文档。 4. 日志说明 4.1 一键日志收集 mdbctl 是短生命周期 CLI,不是常驻服务。源码没有创建独立的 mdbctl.log,也没有包含系统“一键日志收集”的文件映射配置。社区现有《mdbctl setprop 命令介绍》示例将操作日志展示在 /var/log/operation.log;当前源码也能确认 setprop、call 通过统一操作日志接口记录成功或失败,但仅凭本组件源码仍无法确认目标 SDK 的一键日志包是否收集该文件、以及它在收集包中的最终相对路径。 发布前应由组件维护者和一键日志负责人确认目标 SDK 的实际收集项。当前能够确认的证据如下:
文件/证据 是否由源码明确 内容说明 建议收集方式 mdbctl 终端回显 是 命令、成功文本、参数错误、D-Bus 错误 复现时用 script 保存完整会话 /var/log/operation.log路径由社区 setprop 资料佐证;源码确认通过 mc.logging:operation 统一写入 setprop、call 的完整命令行及成功/失败先按时间和 mdbctl 关键字查询;仍需确认一键日志包是否收集及归档路径 目标组件运行日志 由目标组件决定 attach、日志级别、属性、方法、自定义命令等执行细节 一键日志应同时收集被调试组件日志 MACA/MDB 相关日志 路径不在本源码中 组件列表、类/对象和归属查询失败证据 一键日志应包含 MACA/MDB 所属进程日志 /dev/shm/snapshot_<module>是 基线内存快照 snapshot start 后及时复制出 tmpfs/dev/shm/snapshotdiff_<module>是 差异内存快照 snapshot diff 后及时复制IPMI Trace 输出文件 目标平台决定 traceipmi 产生的跟踪数据由 ipmi_core/日志收集配置确认实际路径 保存交互会话示例:
bash script -q /tmp/mdbctl-session.log
mdbctl
exit 查看保存结果:
bash sed -n '1,240p' /tmp/mdbctl-session.log 4.2 关键日志和终端信息 日志/终端片段 类型 含义解读 建议处理动作 invalid command name "...".终端错误 命令未注册,也不是当前 attach 组件的自定义命令 执行 help/lscmd;确认 Release/Debug 构建和 attach 状态 Failed: invalid input parameter.终端错误 缺少必选参数、存在多余参数、枚举或范围非法 根据 Usage 重新输入 Failed: Object does not exist.终端错误 MDB 未找到命名对象 用 lsclass/lsobj 确认对象是否注册 Failed: Duplicated objects.终端错误 同一 ObjectName 对应多个对象 修正模型命名并收集 MDB 查询证据 UnknownInterface / UnknownProperty / UnknownMethodD-Bus 错误 接口、属性或方法名称错误,或目标基线不支持 用 lsprop/lsmethod/busctl introspect 确认 Too few parameters for signature.参数封装错误 输入参数少于 D-Bus 签名要求 按签名补充参数;数组要先给元素数 Too many parameters for signature.参数封装错误 输入参数多于 D-Bus 签名要求 删除多余参数 Resource is busy...attach 错误 组件已被其他会话连接或连接失败 清理旧会话并检查目标组件 Failed: invalid attached module, expected module: ...traceprop 错误 当前 attach 组件不是目标对象归属组件 attach 提示中的组件 mdbctl <command> successfully操作日志 setprop/call 成功 关联用户、客户端地址和业务变更确认 mdbctl <command> failed操作日志 setprop/call 失败 结合同一时间的终端响应和目标组件日志排查 notice: this operation may cause memory consumption.风险提示 snapshot 可能增加内存占用 检查可用内存并及时导出/清理快照
5. 问题定界指南 5.1 典型问题定界 现象描述 是否为 mdbctl 问题 判断依据 关键证据收集方法 shell 提示 mdbctl: command not found 可能是打包/环境问题 mdbctl 依赖 /etc/profile 中的 alias type mdbctl、grep mdbctl /etc/profile、检查 /opt/bmc/apps/mdbctl/service/mdbctl.lua直接执行 mdbctl attach X 成功,随后 mdbctl dloglevel 却提示未 attach 否,属于使用方式问题 两条命令分别启动两个进程,attach 状态不跨进程 保存命令历史;改为同一交互会话复现 help 中没有 setprop/call/snapshot通常不是缺陷 这些命令只安装在 Debug 构建;snapshot 还会在未 attach 时隐藏 检查构建类型和 CMake 安装结果;attach 后再次 help lsmc 失败可能是 MACA/总线问题 lsmc 直接依赖 bmc.kepler.maca busctl 调用 GetComponentList,收集 MACA 日志 lsclass/lsobj 失败多数是 MDB 或模型问题 资源元数据由 MdbService 提供 busctl 检查 MdbService;确认目标组件对象注册 lsprop/getprop 提示对象不存在多数是目标组件/模型问题 mdbctl 仅根据 MDB 返回结果解析对象 lsobj <class>、MDB 查询、目标组件启动日志attach 报 Resource is busy可能是旧会话或目标组件问题 目标拒绝 AttachDebugConsole 或连接资源被占用 ps 查 mdbctl、检查 /dev/shm/*.sock、目标组件日志自定义命令不显示 可能是目标组件扩展配置问题 接口命名、构建类型、自省注解或 attach 对象不符合约定 busctl introspect 目标对象;检查 Release/Debug 接口名 setprop/call 返回权限错误 通常不是 mdbctl 缺陷 目标组件根据 mdbctl 上下文执行鉴权 记录账号、权限、ClientIp、目标错误和操作日志 snapshot 成功但没有文件 目标组件或文件系统问题 文件由目标 Snapshot 方法生成 保存方法响应;ls -l /dev/shm/snapshot*;目标组件日志 traceipmi 成功但一键日志没有跟踪文件 日志收集配置问题 mdbctl 源码不定义最终文件映射 检查 ipmi_core 和一键日志清单,确认 stop 已执行 自动化脚本只看 $? 把失败判为成功 脚本判断问题 mdbctl 未把命令返回布尔值传给 os.exit 同时匹配响应文本和预期数据
5.2 错误信息速查表 mdbctl 没有统一数字错误码,主要通过固定文本和目标 D-Bus 错误定界。
错误信息 含义 可能原因 排查建议 Failed: invalid input parameter.通用参数非法 缺参、多参、枚举/范围错误、组件名无效 先执行 help,逐项核对参数 Failed: Object does not exist.对象不存在 对象未注册、拼写错误、已被删除 lsclass → lsobj → lsprop 逐级确认 Failed: Duplicated objects.对象名重复 多个服务注册同名对象 修正 ObjectName 唯一性 Object not found.指定类无对象 类错误或对象尚未创建 检查类名和组件启动状态 Failed: invalid attach module.当前无 attach 服务 直接执行了 attach 依赖命令或会话已结束 在同一交互会话 attach Resource is busy...attach 资源忙/连接失败 其他会话占用、目标组件异常 结束旧会话、清理残留、检查目标日志 Detach failed...旧组件 detach 失败 旧目标不可达 先处理旧目标,不要继续假定切换成功 UnknownInterface接口不存在 接口名错误或版本不匹配 lsprop/lsmethod/busctl introspect UnknownProperty属性不存在 属性名错误或版本不匹配 lsprop UnknownMethod方法不存在 方法名错误或版本不匹配 lsmethod/busctl introspect PropertyReadOnly属性只读 使用 modify 写只读属性 评估是否允许临时 set Override Failed to parse ...值无法转换 类型/范围/格式不匹配 按 D-Bus 签名输入 Too few/Too many parameters for signature.参数数量与签名不符 复杂类型展开错误 检查数组元素数和结构体顺序 Failed: duration is out of range.profiling 时长非法 不在 1~30 使用有效时长
5.3 调试方法 5.3.1 确认安装和基线 bash type mdbctl
ls -l /opt/bmc/apps/mdbctl/service/mdbctl.lua
find /opt/bmc/apps/mdbctl/lualib/command -maxdepth 2 -type f -name '*.lua' | sort 若 alias 未生效,可使用完整命令:
bash /opt/bmc/skynet/lua /opt/bmc/apps/mdbctl/service/mdbctl.lua lsmc 5.3.2 分层验证资源查询 bash % lsmc
% lsclass hwdiscovery
% lsobj Connector
% lsprop Connector_Exu_1_01
% getprop Connector_Exu_1_01 bmc.kepler.Object.Properties ObjectName 判断分层:
lsmc 失败:先查 MACA/用户总线。lsmc 成功而 lsclass/lsobj 失败:查 MDB 服务和模型数据。对象可列出但 lsprop/getprop 失败:查对象归属组件、接口和属性。 attach 成功但自定义命令失败:查目标调测接口、参数、权限和业务处理。 5.3.3 busctl 交叉验证 bash
busctl --user call bmc.kepler.maca /bmc/kepler/MacaService bmc.kepler.MCAdmin GetComponentList 'a{ss}' 0
busctl --user introspect bmc.kepler.maca /bmc/kepler/MdbService bmc.kepler.Mdb
MODULE = hwdiscovery
busctl --user call "bmc.kepler.${ MODULE }" "/bmc/kepler/${ MODULE }/MicroComponent" org.freedesktop.DBus.Peer Ping 6. 常见问题解答 Q1:mdbctl 是常驻服务吗? 问题描述 :在 systemd 中找不到 mdbctl 服务。一句话答案 :mdbctl 是按需启动的命令组件,不是常驻 daemon。根因说明 :组件元数据类型是 command,通过 /etc/profile alias 启动 Lua 入口脚本。解决方案 :检查 alias、入口脚本和依赖服务;不要查找不存在的 mdbctl.service。规避方案 :自动化脚本可直接调用完整 Lua 命令路径。适用版本 :1.130.2。Q2:为什么先执行 mdbctl attach hwproxy,再执行 mdbctl dloglevel 仍提示未 attach? 问题描述 :两条 shell 命令分别显示 attach 成功和 attach 无效。一句话答案 :两条命令启动了两个进程,attach 状态没有跨进程保存。根因说明 :直接执行模式一条命令后立即退出;attach 上下文保存在进程内存中。解决方案 :先运行 mdbctl,再在同一 % 提示符中执行 attach 和后续命令。规避方案 :不要把 attach 依赖命令拆成多个独立 shell 进程。适用版本 :全部版本。Q3:为什么 help 中没有 setprop、call、snapshot 或 lsmethod? 问题描述 :文档有命令,但目标镜像 help 不显示。一句话答案 :这些命令只安装在 Debug 构建;snapshot 还要求当前已 attach 才在 help 中显示。根因说明 :CMake 仅在 CMAKE_BUILD_TYPE=DEBUG 时安装 command/debug;help 还会隐藏 need_attach=true 的命令。解决方案 :确认镜像构建类型;attach 后再次执行 help。规避方案 :Release 现场不要依赖 Debug 命令。适用版本 :1.130.2。Q4:<> 和 [] 分别表示什么? 问题描述 :不清楚 Usage 中参数是否必填。一句话答案 :<> 是必选参数,[] 是可选或可变参数。根因说明 :命令基类分别根据 required、optional、flexible 生成帮助。解决方案 :按从左到右顺序输入;带空格的单个值使用引号。规避方案 :先执行 help/lscmd 复制 Usage。适用版本 :全部版本。Q5:setprop set、unset 和 modify 有什么区别? 问题描述 :三种操作看起来都在改属性。一句话答案 :set 建立 Override,unset 移除 Override,modify 执行普通写属性。根因说明 :set/unset 通过 Context.OverrideMode 控制覆盖值;modify 清除 OverrideMode 后按目标属性写入规则处理。解决方案 :临时故障注入用 set/unset;只有确认属性可写和业务影响时才用 modify。规避方案 :每次操作前后执行 getprop,并保存操作日志。适用版本 :1.130.2。附录 附录 A 修订记录 版本 日期 修订人 修订内容 1.130.2 2026-08-17 创建组件说明文档