我看到了很多这样的日志消息
Jan 3 00: 58: 57 foo kernel: set_rtc_mmss: can't update from 0 to 58
它们出现在运行 VMware 的 CentOS 6.4 VM 上。我知道这与客户操作系统上的硬件时钟设置不正确有关。我发现这个命令将硬件时钟设置为当前系统时间:
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 VM 受益于 VMware 文章中的设置Linux 客户机的计时最佳实践,但它指出 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
答案1
VMWare 的知识库中确实有一些关于如何在客户操作系统中配置 ntp 客户端的建议。首先要确保 vmware-toolbox timesync 已禁用,因为您只希望 ntp 更新时间。
这是他们的样本/etc/ntp.conf
:
tinker panic 0
restrict 127.0.0.1
restrict default kod nomodify notrap
server 0.vmware.pool.ntp.org
server 1.vmware.pool.ntp.org
server 2.vmware.pool.ntp.org
driftfile /var/lib/ntp/drift
第一行(tinker panic 0
)允许大时间跳转。(例如系统状态被保存/恢复)
另一种方法是禁用客户机中的 ntp 并启用 vmware-tools 时间同步。
答案2
您是否正在运行 CentOS 6.4 的最新内核版本?我会尝试使用 clocksource=acpi_pm 进行启动。此外,我会执行 ntpdate -u tick.usno.navy.mil && hwclock --systohc 并让一切保持原样。如果情况继续,则添加 divizor=10。
老实说,我怀疑问题部分与特定内核中用于设置和读取实时时钟的代码有关 - 这就是导致您收到错误消息的原因。另一部分是由于虚拟时间中断没有足够定期地传递,或者定时器中断处理程序没有正确缩放内核时间 - 这就是导致时钟漂移的原因。
不幸的是,强迫 ntp 变得更积极只是解决问题的一个办法。
有更新的内核可用吗?这可能是最安全的选择。祝你好运。
答案3
根据我读到的所有内容,这些警告听起来是无害的,特别是如果date
你的服务器没有问题的话。不过有点烦人。
来自 ntp.org 的这条消息让我安心:
每http://www.ntp.org/ntpfaq/NTP-s-trbl-spec.htm#Q-LINUX-SET-RTC-MMSS:
8.3.4.1.1. set_rtc_mmss: 无法从 54 更新到 5 是什么意思?
函数 set_rtc_mmss() 根据系统时间更新 CMOS 时钟的分钟和秒。它不会更新小时或日期,以避免时区问题。[1] 添加显示的消息是为了让用户和实施者意识到并非所有时间更新都会成功的问题。
假设系统时间为 17:56:23,而 CMOS 时钟已经是 18:03:45。仅更新分钟和秒会将硬件时钟设置为 18:56:23,这是一个错误的值。此问题的解决方法是等待几分钟,或安装可修复此问题的内核补丁。通常,硬件时钟中的错误时间直到重新启动后才会显示,或者可能是在 APM 减慢了系统速度之后才会显示。
答案4
- 启动到 bios
- 检查系统日期和时间(如有必要,请更正为当前日期和时间)
- Esc(退出并批准更改)
那应该可行