上下电常见问题指南
更新时间:2025/10/15
在Gitcode上查看源码

上下电常见问题指南

已经上电但是OS没有起来

执行 ipmcget -d powerstate,如果是M4状态,说明已经上电,联系相关负责人查看BIOS启动是否正常。

没上电首先确定对象是否分发完成

在app.log中查找关键字:fructrl objects distribution completed. uptime:

如果没有下面的打印,直接联系框架负责人。

没上电其次确认上电超时锁是否锁住

执行 ipmcget -t maint -d poweronlock,执行后若发现是上锁状态,操作如下命令:

  • 解锁:ipmcset -t maintenance -d poweronlock -v clear
  • 解锁后再次尝试上电,若仍无法上电,尝试执行ACCYCLE恢复:ipmcset -t maint -d accycle

若执行后还不能恢复,说明逻辑或硬件有问题,联系该机型的CPLD负责人。

若硬件需要查看具体事件或寄存器的值,提供以下命令:

5.3版本: 最后一个期望值是8,前几个期望值是0

bash
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_CpuBrdSMC_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x0C000D00 1

busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_ExpBoardSMC_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x1c001500 1

busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_CpuBrdSMC_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x0C001100 1

busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_ExpBoardSMC_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x1C001900 1

busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_CpuBrdSMC_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x0C000900 1

busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_ExpBoardSMC_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x1c001100 1

5.5版本: 南向设备树反合后换了path,期望值和前面5.3一致

bash
busctl --user call bmc.kepler.hwproxy /bmc/dev/Systems/1/CpuBoard/CpuBoard_1_Dev_010101/Smc/Smc_CpuBrdSMC_Dev_010101 bmc.dev.Chip.BlockIO Read a{ss}uu 0 0x0C000900 1

busctl --user call bmc.kepler.hwproxy /bmc/dev/Systems/1/ExpBoard/ExpBoard_1_Dev_0101/Smc/Smc_ExpBoardSMC_Dev_0101 bmc.dev.Chip.BlockIO Read a{ss}uu 0 0x1c001500 1

查看web界面上是否有上电超时或下电超时的告警

有告警,说明硬件有问题,联系相关负责人。

上下电常见问题自助定位方法

上电相关问题

发了上电命令,但是没有上电成功

  • 日志中搜索Notify cpld to send short button signal through hwproxy Accessor.,这个打印代表已经向硬件送了短按中断。如果还未上电,请联系硬件定位。

  • 请用该命令查询ipmcget -t main -d poweronlock,是否发生上电超时事件。如果回显为locked,则说明发生上电超时事件。

解决方案:

  1. 如果只想恢复环境,可直接使用该命令清除ipmcset -t maintenance -d poweronlock -v clear。如清除后依然无法上电,尝试执行accycle,若依然无法恢复,请联系硬件定位。

  2. 需要定位根因,请联系硬件

  • 请确定是否存在上电锁。关键词Update item successfully, appname,可以判断是哪个组件发送的上电锁。

  • 请检查固件版本是否配套,特别是CPLD版本。或将固件更新至最新版本

下电相关问题

发了下电命令,但是没有下电成功

  • 下电可以通过短按信号普通下电,也可以通过长按信号强制下电。在日志中可搜索Notify cpld to send short button signal through hwproxy Accessor.,或Notify cpld to send long button signal through hwproxy Accessor.。如果未下电,同样请联系硬件定位。

  • 下电同样也会出现失败的情况:

  1. 如果配置了安全下电超时时间,则系统在配置时间内未下电会执行强制下电。

  2. 如果未配置,默认下电超时时间为10min,超时则重新上电。

下电失败日志关键字:Power off timeout

PowerCycle相关问题

发了PowerCycle命令,但是没有执行

  • 请排查执行PowerCycle命令后,是否执行了其他的上下电操作,其他操作会打断PowerCycle命令的执行。

  • PowerCycle是将设备先下电再上电,其本质还是会出现上述下电失败或上电失败的情况。

  • 下电状态下无法执行PowerCycle

OS上下电命令来源问题

凡是经过BMC的上下电命令,必定会经过powerapi或者execute这两个文件,所以其他情况都是不经过BMC的上下电。

凡是不经过BMC的上下电命令,不归BMC负责。

上下电历史典型问题整理

问题一:AC后日志文件丢失

根因: syslog记录日志是先缓存,AC执行时还未落盘导致日志文件丢失。

解决方式: AC命令接口动作执行前先写入磁盘并刷cache,保证日志落盘后再AC。

问题二:异常掉电,未做任何操作就掉电

根因:

  1. 检查板子是否是早期板子

  2. CPU是否存在5小时bug,检查方法如下:

判断是否5h BUG CPU(OS读CPU寄存器):

bash
./devmem 0x40107e210

bit 139:137

  • 001 -> 正常CPU
  • 000 -> 5hBUG

解决方式: 换板子。

上下电设计规则

规则1:CPLD无法处理短按、长按信号同时到达的场景,需要BMC侧做屏蔽,两种信号需要间隔2s及以上。

规则2:上电超时,表示硬件电路有问题

上电超时,表示硬件电路有问题,额外的强制下电并不能解决问题,BMC侧仅记录日志即可。

这种场景需要修复电路后,通过清除CPLD的超时标记或者AC才能恢复。

规则3:PowerCycle、ForcePowerCycle等电源循环的优先级最低,任何的上下电动作都应打断cycle类动作。

规则4:PowerCycle、ForcePowerCycle需要在上电状态下才能执行。

规则5:ACCycle(AC)优先级最高,任何状态下都可以执行。

规则6:busctl的返回值不表示指令是否下达成功,而是表示是否将要执行。

需要BMC侧在收到busctl指令后,先判断条件,不具备执行条件时直接返回失败。

规则7:按钮事件是电平检测,会检测电平的持续时间,以长按为例,检测到约6s时就上报事件。

规则8:按钮不松开,BMC无法清除按钮事件。

规则9:只有上电和安全下电走状态机(主动改变状态机状态)。其他操作检测到电源状态变化后,状态机被动改变。

规则10:设置上电锁会屏蔽面板电源按钮,用于防止按钮上电。额外导致按钮长按下电也失效。

规则11:面板按钮屏蔽后,按钮事件正常上报,屏蔽的是上下电动作。

规则12:按钮上下电是由CPLD执行的,BMC仅接收事件上报,记录日志。

(后期可能改成行为可配置,三大洋单板按钮走软件流程)

规则13:强制重启OS和cycle操作需要在上电状态执行。

规则14:新版的扩展板要判断风扇板的PG信号是否传递过来,传过来才上电。(要升级同一产品版本的CPLD)

规则15:设计原则——谁下的电谁负责上,尽量不要让上下电模块过多的去判断上层结果。

规则16:通电开机策略上电前会等所有的上电锁解锁。

规则17:出于安全的考虑,上电前需要做BIOS自检,在确保flash不被篡改的前提下,才可以上电。

规则18:上电前需要广播信号(V3特有),用于BIOS捕获后做自检。仅由下电变上电的场景才需要广播,上电状态发上电时,不广播信号。

规则19:发短button给业务系统上电时,持续10s检测ACPI状态,如果上电失败就重试3次。

服务器一直是这样的策略,应用场景:比如有个电源短路故障了,单板一直没有发出sys_pwrgood寄存器给BMC,就是上电失败了,重试过程中,故障解除,又可以上电了。

CPLD是检测寄存器变化给南桥发脉冲,不重复写就没有脉冲。

规则20:冷复位与热复位

  • chassis control(netfn=0x00, cmd=0x02):冷复位是PowerCycle,热复位是重启OS
  • fru control(netfn=0x2c, cmd=0x04):冷复位是重启OS,热复位不支持。此外,子命令为02时的平滑复位是ForcePowerCycle

规则21:软复位不走通电开机策略。

V3软复位还是硬复位的判断,由一个保存到复位持久化数据库的变量判断。

规则22:AC起来后,CPLD会默认屏蔽按钮功能,防止误触发。

规则23:上电前需要清除电源告警锁存寄存器(PowerFail Event)。

该寄存器不清仅影响告警的消除和下次告警,不影响上电,为了方案简单,讨论后决定在上电前清除锁存。

有两个概念,真实的告警故障和锁存的告警事件,前者在上电后因CPLD不再上报消失,后者在BMC清除后就消失。

规则24:当发生上电超时或异常掉电问题时,CPLD会锁存相关寄存器(vcc_time_out和vcc_power_fail),并在上电时由CPLD清除。

规则25:上下电超时后,10min后状态机才发生变化

  • 上电超时后,热插拔状态需要回到M1,电源状态为下电
  • 下电超时后,热插拔状态需要回到M4,电源状态为上电

默认等待时间为10min。

规则26:复位原因,涉及到事件上报,所以需要收到控制命令后记录关键信息,等收到平台复位信号后使用对应原因。

规则27:LED测试的时候会写CPLD寄存器,开启装备模式,此时CPLD会上报按钮事件。

规则28:强制下电,是先下电,再触发M4->M6,状态跳变原因是掉电。安全下电,是先M4->M6,再下电。

规则29:公有云诉求,新增Redfish接口修改 PowerOnStrategyExceptions,属性为1时禁用通电开机策略。

(本质是解决下电接口耦合CPLD生效的中间措施)

人为AC起来后不清除标记,只有相关场景触发的AC才清除标记。

规则30:V3设计原则——越复杂的逻辑(综合多个条件)应该越在上层处理。

fructrl承载环境变了生效特性的原因:需要综合业务系统电源信息,并且在初始化阶段完成,在上下电时序控制维度可靠性比较高。

规则31:检测到高温,延时等待五分钟后上电,若5分钟后还是高温仍会再次下电。

高温下电动作由CPLD设置,清除动作由BMC在等待五分钟后执行。五分钟时长不可设置修改(配置在CSR里,不同单板可能有差异)。

规则32:V3新增软件侧的上电锁概念,提供给BIOS等需下电生效的固件一个接口来保证生效后再上电,指的是软件侧控制一个上电锁导致无法上电,资源树上属性名为PwrOnLocked

注意:上述上电锁与CLI命令ipmcget -t maintenance -d poweronlock中的锁不是一个概念。CLI命令的上电锁指的是默认状态下,若服务器在指定时间内未完成上电,则通过iBMC为服务器上电的功能被锁定,服务器将无法通过iBMC上电。即硬件侧上电超时导致的无法上电。

规则33:HPC的通电开机策略实现错峰的机制

打出"......."后 +(槽位号-1)*1分钟 再进行写寄存器。

规则34:复位信号的作用

复位信号和ipmi_core/BIOS/RAS的功能有关系,复位信号上报后,会记录一条normal级别的事件,不允许随意配置。