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 makestepchronyc 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: yesSystem 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 默认禁止大幅时间跳变。

