我一直在看到一堆这样的日志消息
Jan 3 00: 58: 57 foo kernel: set_rtc_mmss: can't update from 0 to 58
它们发生在 VMware 上运行的 CentOS 6.4 虚拟机上。我知道这与来宾操作系统上未正确设置硬件时钟有关。我发现这个命令将硬件时钟设置为当前系统时间:
sudo hwclock --systohc
这是虚拟机的正确设置吗?另外,在哪里可以设置它以使其持久化?在内核启动参数?我希望新配置的虚拟机没有这个问题。
更新 1
按照要求:
me@foo:~> ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) .LOCL. 10 l 43 64 377 0.000 0.000 0.000
+dtc-nist01.ntp. .ACTS. 1 u 174 1024 377 3.311 -8.554 0.497
*nist1-nj.ustimi .ACTS. 1 u 205 1024 377 6.737 3.775 0.433
+nist1-pa.ustimi .ACTS. 1 u 55 1024 377 8.610 4.688 0.337
我看到这个虚拟机上的 vmwaretools 已经过时了。也许我用于管理 vmwaretools 安装的 puppet 模块没有正确安装它。我去看看然后回复你。
更新 2
是的,vmware tools 已安装并且是最新版本。
me@foo:~> ps aux | grep vmtools
root 56021 0.0 0.1 59508 4156 ? S Jan09 3:29 /usr/sbin/vmtoolsd
更新 3
我尝试在虚拟机上启用“与主机同步访客时间”:
me@foo:~> vmware-toolbox-cmd timesync status
Disabled
me@foo:~> vmware-toolbox-cmd timesync enable
me@foo:~> vmware-toolbox-cmd timesync status
Enabled
但我仍然收到这些消息。事实上,date
现在hwclock --show
相隔几分钟,而过去它们很紧。
过去,较旧的 SLES 9 虚拟机受益于 VMware 文章Timekeeping best practice for Linux guest中的设置,但它指出 CentOS/RHEL 6 来宾不需要设置任何额外的内核参数。
更新 4
升级到 CentOS 6.5 并没有帮助。内核是:
Linux foo 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
VMWare 在知识库中确实有一些关于如何在您的来宾操作系统中配置 ntp 客户端的建议。首先要确保禁用 vmware-toolbox timesync,因为您只希望 ntp 更新时间。
来自Linux 客人的计时最佳实践:
这是他们的样本
/etc/ntp.conf
:第一行 (
tinker panic 0
) 允许大时间跳跃。(例如系统状态被保存/恢复)另一种方法是在来宾中禁用 ntp 并启用 vmware-tools 时间同步。
您正在运行 CentOS 6.4 的最新内核版本吗?我会尝试使用clocksource=acpi_pm 启动。另外,我会做 ntpdate -u tick.usno.navy.mil && hwclock --systohc 让事情坐下来。如果事情继续,那么添加 divizor=10 为好。
老实说,我怀疑问题部分与您特定内核中用于设置和读取实时时钟的代码有关 - 这就是您收到错误消息的原因。另一部分是由于虚拟时间中断没有足够定期地传递,或者定时器中断处理程序没有正确缩放内核时间 - 这就是让你时钟漂移的原因。
不幸的是,迫使 ntp 更具侵略性只是解决问题的一个拐杖。
是否有更新的内核可供您使用?这可能是你最安全的选择。祝你好运。
根据我读过的所有其他内容,听起来这些警告似乎是良性的,尤其是如果
date
您的服务器上的警告很好的话。不过有点烦人。我会让来自 ntp.org 的这个花絮让我放心:
根据http://www.ntp.org/ntpfaq/NTP-s-trbl-spec.htm#Q-LINUX-SET-RTC-MMSS:
那应该工作