![古老虚拟机上的疯狂时钟漂移](https://linux22.com/image/196976/%E5%8F%A4%E8%80%81%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%8A%E7%9A%84%E7%96%AF%E7%8B%82%E6%97%B6%E9%92%9F%E6%BC%82%E7%A7%BB.png)
我被困在 Centos 5.3 VM(在 Proxmox 上运行)上,它表现出巨大的时钟漂移。它被配置为每 5 分钟运行一次 ntpdate,但在两次执行之间时钟仍然不同步最多 20 秒。我尝试运行 ntpd (并停止 cron 作业),但它没有报告任何错误/我看不到在任何地方创建 ntp.drift 文件,并且时钟继续漂移。
我在集群上运行大约 30 个虚拟机和相同数量的容器 - 没有其他任何东西表现出相同的问题。 /etc/ntp.conf 中除了服务器地址外没有其他配置
答案1
内核的时间调整想法需要修复。该ntpd
过程通常会限制这一点,因此随着时间越来越接近现实,变化率就会降低。这可能是您尝试使用 修复时间步长而产生的交互的结果ntpdate
。
我的建议是,您确保知道您是否正在使用systemd
的时间同步,ntpd
或围绕 之类的东西构建的 bodge ntpdate
。
- 把它们全部关掉
- 让
/etc/adjtime
开(在你的问题中看到它的内容会很有趣) - 立即重启
在一台同步良好的机器上,我在 中具有以下值/etc/adjtime
,并且文件本身的最后一次修改是在二月份。不要复制这些值
0.001341 1613401384 0.000000
1613401384
UTC
查看man 5 adjtime
这些值,您会发现该系统的系统漂移为 0.001341 秒/天(一秒漂移需要两年),并且最后一次调整是在 2 月份。相当稳定。哦,系统时钟正确运行为 UTC。
根据您的情况需要考虑的其他事项
- 内核是否尝试从 VM Hypervisor 获取其日期/时间?
- 如果是这样,在虚拟机上使用任何时间同步工具都会扰乱时间保持
- 虚拟机在不活动期间是否进入睡眠状态或速度减慢?如果没有从 VM Hypervisor 同步,这可能会打乱挂钟
有一些有用的参考资料(除其他外)解释了 CentOS 5.3 没有kvm-clock
内核模块,
- https://forum.proxmox.com/threads/time-drift-centos-5-3.10961/
- https://s19n.net/articles/2011/kvm_clock.html
如果没有此模块,当虚拟机管理程序暂时(且正确地)使 VM 缺乏 CPU 资源时,VM 的时钟可能会减慢甚至停止。该模块保持 VM 内核时间的准确性。
您可以使用此命令检查您自己的情况,该命令应报告kvm-clock
:
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
这第一的这两个参考文献还建议更新到最新的 CentOS 5.3(当时是相关的),因为这解决了他们的时间问题。但到 2021 年可能不太现实。
另一个来源建议添加divider=10 clocksource=acpi_pm
到内核引导行,但这适用于 VMware,可能不适用于带有 kvm 的 Proxmox。