maca最小系统启动说明
更新时间: 2026/04/08
在Gitcode上查看源码背景介绍
最小系统是韧性系统的一个特性集,支持最小系统特性的韧性系统具备检测系统受损状态并通过优雅降级机制持续维持系统实现 Mission 的能力。在最小系统模式下,BMC只保留了部分组件功能。以最小系统模式启动时,低可信组件不会被启动,可以通过环境上的/opt/bmc/trust/mini_system.json文件查看最小系统组件清单
最小系统又被称为“逃生通道”,是系统的一个确定运行状态。由于攻击等严重外部异常,导致系统无法维持正常服务状态时,系统可以主动或被动进入最小系统状态。在该状态下,系统持续提供恢复整个系统的能力,以及自定义的其它“核心服务”,确保在条件允许时能够重新恢复系统正常运行
实现介绍
正常进入最小系统调用 trust 的接口,强制进入最小系统不依赖 BMC 组件,直接写/data/trust下的标志位文件
调用 maca 组件重启系统的资源树接口,其中重启类型参数 reset_type: 0 即正常启动,1 表示最小系统
shell# 执行以下mdbctl或busctl命令可重启 mdbctl call MacaService_0 bmc.kepler.SystemControl GracefulReset 0 1 busctl --user call bmc.kepler.maca /bmc/kepler/MacaService bmc.kepler.SystemControl GracefulReset a{ss}y 0 1当进入最小系统启动时,maca会将最小系统标志
MinimizedSystem写入到恢复模式标志位文件/data/trust/recovery_mode_flagmaca执行重启接口进行重启
成功重启后清除标志位文件,再次重启即可退出最小系统,恢复到正常重启
案例介绍
BMC 升级后,很多复位无响应,查不到资源树,环境Web无法使用,日志示例如下
shellbios ERROR: debug.lua(341): failed to get stat of skynet service snlua fault_diagnosis/service/main: TIMEOUT bios ERROR: debug.lua(341): failed to get stat of skynet service snlua ai_engine/service/main: TIMEOUT bios ERROR: debug.lua(341): failed to get stat of skynet service snlua pcie_device/service/main: TIMEOUT bmc_time ERROR: debug.lua(341): failed to get stat of skynet service snlua manufacture/service/main: TIMEOUT bmc_time ERROR: debug.lua(341): failed to get stat of skynet service snlua bmc_soc/service/main: TIMEOUT bmc_time ERROR: debug.lua(341): failed to get stat of skynet service snlua bmc_health/service/main: TIMEOUT bmc_time ERROR: debug.lua(341): failed to get stat of skynet service snlua ipmi_core/service/main: TIMEOUT event ERROR: debug.lua(341): failed to get stat of skynet service snlua sensor/service/main: TIMEOUT event ERROR: debug.lua(341): failed to get stat of skynet service snlua host_agent/service/main: TIMEOUT ... ...原因分析:框架日志发现只有 23 个组件启动,且 BMC 正常启动,分析是从最小系统重启 BMC,只包含核心服务,部分低可信组件未启动,再 CLI 执行重启即可恢复到正常 BMC 系统