跳到主要内容

Rocky Linux 10 时间同步与虚拟机休眠时间漂移问题笔记

一、背景说明

在 Rocky Linux 10 中,系统默认不再提供 ntpdate 命令,时间同步统一由 chrony(chronyd / chronyc) 负责。

虚拟机环境(如 Parallels Desktop、VMware、VirtualBox)中,如果 宿主机进入休眠 / 挂起

  • 虚拟机 CPU 会被暂停
  • 虚拟机内部时间不再流逝
  • 唤醒后,虚拟机时间仍停留在休眠前

这在 K8s 节点、数据库、日志系统中会引发严重问题。


二、问题现象

典型表现:

  • 宿主机真实时间:2025-12-18
  • 虚拟机时间仍为:2025-12-17
  • chronyc -a makestep 返回 200 OK,但时间未修正
  • cron 中已配置时间同步任务,但无效

三、根本原因分析

1. 虚拟机休眠导致时钟冻结

宿主机休眠期间:

  • 虚拟机 vCPU 停止
  • guest OS 内核时钟冻结
  • 唤醒后不会自动追赶真实时间

2. Rocky 10 中 chrony 的默认行为

chrony 的设计原则:

  • 小偏差:平滑调整(slew)
  • 大偏差:只在特定条件下跳变(step)

Rocky 10 默认配置:

makestep 1.0 3

含义:

  • 偏差 > 1 秒才允许 step
  • 只在前 3 次时间更新时允许 step

👉 系统运行一段时间后,即使时间差一天,也禁止自动 step


四、为什么 ntpdate 不存在了

  • RHEL 9 / Rocky 9+ 开始 彻底移除 ntpdate
  • 原因:
    • ntpdate 会粗暴修改系统时间
    • 与现代时间同步机制冲突
  • 官方替代方案:
    • chronyc makestep
    • chronyc burst

五、关键命令解释(核心)

1️⃣ chronyc -a 'burst 4/4'

作用:

  • 立即向 NTP 服务器发送一组请求
  • 强制获取最新真实时间

适用场景:

  • 虚拟机刚从休眠唤醒
  • chrony 尚未更新 offset

2️⃣ chronyc -a makestep

作用:

  • 当时间偏差过大时
  • 直接跳变系统时间(step)

说明:

  • 管理员手动执行的 makestep
  • 不受 chrony.conf 中 step 次数限制

3️⃣ 组合拳(推荐记住)

chronyc -a 'burst 4/4' && chronyc -a makestep

👉 专治:

  • 虚拟机休眠
  • 快照恢复
  • 时间冻结

六、正确的 chrony 配置(强烈推荐)

修改配置文件

vi /etc/chrony.conf

将:

makestep 1.0 3

改为:

makestep 1.0 -1

含义:

  • 偏差 > 1 秒就 step
  • 系统运行期间始终允许 step

重启服务

systemctl restart chronyd

七、cron 时间同步的正确姿势

❌ 不推荐

*/10 * * * * chronyc -a makestep

原因:

  • makestep 不会主动拉取最新时间
  • offset 过期时可能什么都不做

✅ 推荐(兜底方案)

*/10 * * * * /usr/bin/chronyc -a 'burst 4/4' && /usr/bin/chronyc -a makestep >/dev/null 2>&1

说明:

  • burst 先获取真实时间
  • makestep 再决定是否跳变

八、虚拟化平台时间同步(可选但推荐)

Parallels Desktop 为例:

  • 虚拟机设置 → Options → Time
  • 勾选:Sync time with host

并在虚拟机中确认:

systemctl status prl-tools

九、常用排查命令

chronyc tracking
timedatectl

重点关注:

  • System clock synchronized: yes
  • System time 偏差是否接近 0

十、最佳实践总结

  • Rocky Linux 10 不使用 ntpdate
  • chrony 是唯一官方时间同步方案
  • 虚拟机环境 必须允许 makestep 永久在线
  • 推荐配置:
    makestep 1.0 -1
  • 遇到时间冻结:
    chronyc -a 'burst 4/4' && chronyc -a makestep

一句话结论(面试 / 笔记版)

Rocky Linux 10 使用 chrony 替代 ntpdate,虚拟机休眠会导致系统时钟冻结,需通过 makestep 1.0 -1 或 burst + makestep 强制修正时间,否则 chrony 默认禁止大幅时间跳变。

Bottom GIF
Top GIF