电源策略-电源工作模式

// 此模板仅供参考,如果不适用可以修改

求助描述

在多电源的主备模式下,能否默认使能主用电源列表呢?

在社区文档没有看到有相关的配置介绍:CSR配置字典之PowerStrategy类 | 文档中心 | openUBMC

求助如何配置默认的主用电源列表。

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

电源工作模式配置:主备模式下默认使能主用电源列表问题分析与解决方案

根据您的求助描述,您希望在多电源的主备(Active/Standby)模式下,能够默认设置并使能主用电源列表(Expected Active PSU List)。您尝试在 PSR.srPowerStrategy_1 对象中配置 ExpectedActivePSU 字段但未生效。以下将结合知识库内容进行综合分析,并提供可行的配置方法。


:magnifying_glass_tilted_left: 问题核心解析

:white_check_mark: 症结所在:

虽然存在 ExpectedActivePSU 这一属性用于定义预期的主用电源单元,但它必须依赖正确的配置方式和前提条件才能生效,尤其是在主备模式(Active/Standby)下的行为控制。

您遇到的“配置不生效”问题,通常由以下几个因素造成:

  1. 未正确启用主备模式支持 (ActiveStandbySupported = false)
  2. 未通过正确的参数接口设置工作模式和主用电源
  3. ExpectedActivePSU 是只读或运行时属性,无法直接静态写入
  4. 配置路径或语法不符合 openUBMC CSR 框架要求

:books: 关键概念与机制说明

1. 电源工作模式(PowerWorkingMode

  • 取值范围"LoadBalancing""Active/Standby"
  • 功能说明:定义系统电源的操作模式。
    • LoadBalancing:所有电源均分负载,全部为主用;
    • Active/Standby:仅指定电源为主用,其余为备用电源。
  • :white_check_mark: 配置路径示例(CSR):
    PowerStrategy_Basic:
      PowerWorkingMode: "Active/Standby"
    

2. 是否支持主备模式?(ActiveStandbySupported

  • 类型:布尔型(Boolean)
  • 默认值false
  • :warning: 关键点:即使配置了 PowerWorkingMode: "Active/Standby",如果 ActiveStandbySupported = false,系统仍不会真正启用主备逻辑。
  • :white_check_mark: 必须显式启用:
    PowerStrategy_Basic:
      ActiveStandbySupported: true
    

3. 主用电源列表设置机制(Custom_ExpectedActivePSU

:red_exclamation_mark: 您提到的 ExpectedActivePSU 是一个只读数组,用于反映当前系统的预期主用电源列表(来自知识图谱描述),不能直接通过 CSR 静态赋值生效

:white_check_mark: 正确的配置方式是使用 Custom_ExpectedActivePSU 参数,在出厂定制或运行时通过 BMC 设置指令来指定主用电源 ID 列表。

配置示例(BMC 出厂定制):

BMCSet_PowerWorkingMode=Active/Standby
Custom_ExpectedActivePSU=2,3

含义:设置工作模式为“主备”,并将 PSU2 和 PSU3 设为主用电源。

来源依据:BMCSet_PowerWorkingModeCustom_ExpectedActivePSU 的处理流程文档中明确指出此组合配置方式。


:white_check_mark: 推荐解决方案

方案一:通过 BMC 出厂配置文件(如 .ini 或定制脚本) 设置

适用于系统初始化时即确定主用电源的场景。

:white_check_mark: 配置项如下:

# 启用主备工作模式
BMCSet_PowerWorkingMode=Active/Standby

# 指定主用电源槽位(例如 PSU2 和 PSU3)
Custom_ExpectedActivePSU=2,3

# 确保主备功能被支持
ActiveStandbySupported=true

# (可选)设置电源数量预期
BMCSetExpectedPSCount=4

:pushpin: 注意事项

  • Custom_ExpectedActivePSU 必须配合 BMCSet_PowerWorkingMode=Active/Standby 使用;
  • 若未设置 ActiveStandbySupported=true,系统可能忽略主备配置;
  • 该配置需在系统的 PSR 配置阶段BMC 启动初始化阶段 加载。

方案二:通过 运行时 API 或命令接口 设置

如果您希望在系统运行后动态配置主用电源列表,可通过以下方式:

方法①:调用 D-Bus 接口 SetPowerWorkMode

# 设置 PSU2 为主用(Enabled)
busctl call /bmc/kepler/Systems/system0/PowerMgmt/PSU2 \
    bmc.kepler.Systems.PowerMgmt.OnePower SetPowerWorkMode "a{ss}y" \
    1 "work_mode" "enabled" 0

# 设置 PSU1 为备用(StandbySpare)
busctl call /bmc/kepler/Systems/system0/PowerMgmt/PSU1 \
    bmc.kepler.Systems.PowerMgmt.OnePower SetPowerWorkMode "a{ss}y" \
    1 "work_mode" "standby_spare" 1

接口说明:该接口位于 /bmc/kepler/Systems/:SystemId/PowerMgmt/:ID,由 SetPowerWorkMode 方法实现。

方法②:使用 ipmitool 命令(需整机模式配置)

根据知识库信息,单个 PSU 的 IPMI 设置容易被整机策略覆盖

推荐使用整机电源配置命令:

# 设置整机电源模式为主备,并指定主用电源
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x24 0x00 0x01 ...

但具体子命令和参数需参考 Set Power Saving Configuration 文档(NetFn: 0x30, Cmd: 0x93, Sub-cmd: 0x24)。


:cross_mark: 为什么直接配置 ExpectedActivePSU 不生效?

根据知识图谱数据:

{
  "entity": "ExpectedActivePSU",
  "type": "data",
  "description": "ExpectedActivePSU is a read-only array of unsigned 8-bit integers listing the expected primary power supply units."
}

:no_entry: 结论

  • ExpectedActivePSU 是一个 只读属性(read-only),由系统策略模块(如 PowerStrategy)在应用 Custom_ExpectedActivePSU自动生成并填充
  • 无法通过手动修改 CSR 文件直接写入生效,否则会被系统忽略或覆盖。

:white_check_mark: 正确做法:应配置 Custom_ExpectedActivePSU,由系统自动映射为只读的 ExpectedActivePSU


:hammer_and_wrench: 验证建议

1. 检查当前电源工作模式

busctl get-property bmc.kepler.Systems.PowerStrategy /bmc/kepler/Systems/system0/PowerStrategy \
    bmc.kepler.Systems.PowerStrategy PowerWorkingMode

2. 查看主用电源列表

busctl call bmc.kepler.Systems.PowerStrategy /bmc/kepler/Systems/system0/PowerStrategy \
    bmc.kepler.Systems.PowerStrategy GetPowerStrategyInfo

或通过日志查看:

journalctl -u power_strategy | grep "Active/Standby"

3. 确认 ActiveStandbySupported 已启用

busctl get-property bmc.kepler.Systems.PowerStrategy /bmc/kepler/Systems/system0/PowerStrategy \
    bmc.kepler.Systems.PowerStrategy ActiveStandbySupported

:white_check_mark: 总结与建议

问题 解决方案
想默认设置主用电源列表 使用 Custom_ExpectedActivePSU 参数配置,而非 ExpectedActivePSU
主备模式不生效 确保 ActiveStandbySupported = truePowerWorkingMode = "Active/Standby"
配置写入后未生效 应通过出厂定制配置或 D-Bus 接口设置,避免直接写只读字段
支持多 PSU 主备 当前 openUBMC 支持 4 电源主备,但需代码适配,建议提交 Issue 确认机型兼容性

:light_bulb: 最终建议操作步骤:

  1. 编辑 BMC 初始化配置文件(如 bmc_config.ini 或 PSR 定制模板):

    BMCSet_PowerWorkingMode=Active/Standby
    Custom_ExpectedActivePSU=2,3
    ActiveStandbySupported=true
    BMCSetExpectedPSCount=4
    
  2. 重新生成镜像并刷机,确保配置加载。

  3. 上电后验证

    • Web 页面是否显示 PSU2/PSU3 为主用;
    • 使用 busctl 检查 PowerWorkingMode 和主用状态;
    • 检查日志是否出现 "Set PowerActualWorkingMode to Active/Standby"
  4. 如有问题:检查电源健康状态、在位状态、是否满足主备策略的冗余条件(参考文档中“系统中有效电源模块冗余时才支持主备供电模式”提示)。


如仍有问题,建议向 openUBMC 社区提交 Issue,并附上 power_strategy 组件日志(journalctl -u power_strategy),以便进一步排查自动切换逻辑或兼容性问题。

相关链接:

  1. 问题咨询:对电源设置主备模式时,未插电源线的电源是如何显示主备状态?
  2. 【问题反馈】power_strategy电源工作模式自动切换逻辑和显示不一致问题
  3. 关于电源主备的问题
  4. 【问题求助】通过ipmitool设置PSU主备模式不生效
  5. CSR配置字典之PowerStrategy类 | 文档中心 | openUBMC

当前仅2个电源支持主备模式设置,不支持多电源

2个电源可以设置默认主用电源是哪个吗?怎么设置呢

当前默认为负载均衡模式,若需要设置主备模式,需自行设置主用电源编号。

web/redfish/IPMI命令均可设置

电源设置2主4备的时候,出现这个报错信息,是为什么呢?

{
    "error": [
        {
            "code": "ActivePsNotEnough",
            "message": "Active PSUs are insufficient. Please reset SupplyList or set PowerWorkingMode to Sharing"
        }
    ]
}

这是电源的PowerStrategy对象,和这个ExpectedActivePSU有关系吗?

当前仅支持2个电源的主备设置
ExpectedActivePSU为设置的主用电源