920B机型sel time set不生效

问题描述

在920B机型通过ipmi发送sel time set命令不生效

image

环境信息

  • 软件版本:55.00.01.16

  • 硬件配置:920B

分析结论

查看日志,发现rtc芯片时间已被修改,但在后续被设置回原时间了;怀疑为os或ntp时间同步有影响,但是ntp未开启,os下电再发送ipmi命令依旧无法成功设置

日志体积超过论坛限制大小,如需日志辅助分析我会通过邮件发送

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

:white_check_mark: 结论

项目 内容
问题本质 BMC每隔6秒从RTC同步时间,导致IPMI设置的SEL时间被覆盖
根本原因 时间管理机制设计为以RTC为权威时间源
解决方案 使用 date -s + hwclock -w --systohc 修改系统并写入RTC
是否可直接用IPMI设置? :cross_mark: 不可持久,最多维持6秒
适用场景 所有基于openUBMC的平台(包括920B机型)
点击此处查看详细分析解答

920B机型执行ipmitool sel time set命令不生效问题分析与解决方案

根据提供的日志和系统行为分析,920B机型上通过IPMI设置SEL时间(sel time set)后立即失效的根本原因是:BMC系统存在一个定时机制,每隔6秒从RTC(实时时钟芯片)同步时间,覆盖了通过IPMI手动设置的时间。此机制优先级高于IPMI命令,导致设置操作被自动还原。


:magnifying_glass_tilted_left: 问题现象总结

  • 执行命令

    ipmitool sel time set "01/01/14 01:01:01"
    

    命令返回成功,显示时间为 2014-01-01 01:01:01

  • 查询结果

    ipmitool sel time get
    

    返回时间为 2026-04-10 15:13:04,与设置值严重不符。

  • 关键日志证据

    bmc_core NOTICE: timeiptables.c(59): bmc_time = 1774927488, rtc time = 1341558161, update time
    

    该日志表明:BMC正在用RTC的时间(rtc time)更新自身时间(bmc_time),即BMC时间正被RTC覆盖


:puzzle_piece: 根本原因分析

:white_check_mark: 主要机制:BMC定时从RTC同步时间

openUBMC 系统中,BMC每隔6秒主动读取一次RTC芯片的时间,并以此更新自身的系统时间
因此,即使通过 ipmitool sel time set 修改了SEL时间,最多6秒后就会被RTC时间覆盖

这在以下信息中得到验证:

  • 知识图谱关系

    BMC <--(reads every 6 seconds)--> RTC
    

    “BMC code reads time every 6 seconds from the RTC chip to update the system time, causing any manually set time via IPMI to be overwritten.”

  • 论坛讨论佐证(Document Chunk #2

    “当前机制是每隔6秒从RTC时钟芯片同步时间,所以ipmi设置后会被同步……”


:cross_mark: 排除其他可能因素

可能原因 是否成立 说明
NTP服务影响 已确认NTP未开启,且Time Setting受NTP控制时才会禁用IPMI修改,当前未启用NTP
OS时间同步干扰 即使主机下电后重试,问题依旧存在,说明与OS无关
命令格式错误 ipmitool 返回成功,格式为 "m/d/Y H:M:S",符合要求
权限不足 使用管理员账户Administrator,且命令可执行
RTC写入失败 日志显示RTC时间已被修改(短暂生效),说明写入有效

:hammer_and_wrench: 解决方案:如何持久修改BMC时间?

由于直接通过IPMI设置的时间会被RTC覆盖,正确做法是:先通过带内系统修改OS时间 → 同步到RTC → BMC自动读取RTC新时间

:white_check_mark: 推荐操作流程

方法一:通过操作系统层同步时间到RTC(持久生效)

适用于主机可访问且处于运行状态的场景。

# 1. 登录主机操作系统,设置系统时间
date -s "2024-11-11 17:40:40"

# 2. 将系统时间写入RTC芯片(关键步骤)
hwclock -w --systohc

# 3. 等待BMC自动读取RTC(约6秒内)
# BMC将自动获取新时间,无需使用ipmitool sel time set

:white_check_mark: 优势:时间持久,不会被覆盖
:locked_with_key: 符合设计规范:这是openUBMC推荐的时间同步路径


方法二:禁用RTC同步功能(仅限调试用途)

若必须通过IPMI直接控制时间,可尝试关闭RTC同步机制(需确认CSR配置支持)

  1. 检查CSR配置项 RtcSupported 是否允许关闭:
    {
      "Name": "RtcSupported",
      "Type": "Boolean",
      "Default": true,
      "Description": "是否启用从RTC芯片同步时间"
    }
    
  2. 若支持,可在CSR中设置为 false,重启BMC
  3. 此时再使用 ipmitool sel time set 才能生效

:warning: 警告:此操作非常规手段,可能影响系统日志准确性,仅限测试环境使用


:books: 补充说明

:alarm_clock: 时间显示差异问题(+8小时偏移)

用户报告中曾出现 “设置时间-8小时” 或 “显示时间-8小时” 的现象,这通常是因为:

  • BMC内部时间以 UTC时间存储
  • Web UI或日志显示时未正确应用 UTC+8(CST) 时区转换
  • ipmitool sel time get 命令本身不处理时区逻辑(见Ipmitool Sel Time Get实体描述)

:white_check_mark: 解决方案:前端或工具应自行完成UTC到本地时区的转换,避免误解。


:white_check_mark: 结论

项目 内容
问题本质 BMC每隔6秒从RTC同步时间,导致IPMI设置的SEL时间被覆盖
根本原因 时间管理机制设计为以RTC为权威时间源
解决方案 使用 date -s + hwclock -w --systohc 修改系统并写入RTC
是否可直接用IPMI设置? :cross_mark: 不可持久,最多维持6秒
适用场景 所有基于openUBMC的平台(包括920B机型)

:pushpin: 建议

  1. 运维规范建议:将时间设置纳入标准操作流程,明确要求通过OS层修改并写入RTC
  2. 开发侧改进:可在Web UI中集成“设置系统时间”功能,自动完成hwclock操作
  3. 文档完善:在openUBMC文档中明确说明“禁止直接使用ipmitool sel time set作为长期时间配置手段”

如需进一步调试RTC通信状态,可通过以下命令查看RTC芯片通信情况:

ipmitool raw 0x30 0x90 0x48  # 查询RTC状态(视具体平台而定)

设置是否成功日志可以看下操作日志
sel time set只会设置BMC时间,不会将时间设置至RTC
根据贴的日志,可以看到,是由于当前时间和RTC时间有时间差,因此同步了RTC时间。
因此出现此现象的原因是,sel time set设置BMC时间之后,监测到BMC时间与RTC时间有时间差,重新同步至RTC
建议:可以打开NTP,NTP同步失败后,再通过sel time set设置时间查看是否生效
image

但是这里rtc时间是我修改的1341558161(2012-07-06 15:02:41),bmc时间是1774927488(2026-03-31 11:24:48),这条日志的意思我理解是从rtc芯片同步时间到bmc吧

从操作日志看是成功的

2012-07-06 15:02:41 ``IPMI,Administrator@192.168.43.232``,bmc_time,Set time to (Fri Jul 06 15:02:41 2012) successfully

麻烦附一下完整日志

你可以截全以前bmc_time的日志

上面的日志不是从rtc同步的

只是表征2012是你设置的时间

只是会和rtos作比较

用于更新一个变量而已

设置时间被刷新回去就是因为rtc时间会轮询同步的

本身ipmi命令主要就是针对无时间源的场景使用的

app.log.txt (1.7 MB)

需要完整的一键收集日志麻烦发下邮箱,日志太大了没法发在论坛

这是ipmi设置的时候bmc的软件时间,每隔6秒bmc又会从rtc同步时间,所以设置了又会被修改