我在 Google Cloud Engine 上创建了一个 FreeBSD VM。该映像已安装并配置了 ntpd,并且正在运行:
$service ntpd status
ntpd is running as pid 4950.
但是日期是将来的,服务器上的时间过得太快了。
$date
Mon Feb 25 15:59:38 UTC 2019
UTC 当前时间为:2019 年 2 月 25 日星期一 10:31:21 UTC
我尝试重新启动 ntpd 服务:
$service ntpd restart
没有任何运气。我在这里找到了一个讨论:https://forums.freebsd.org/threads/the-system-clock-is-falling-behind.61450/。我需要一个漂移文件,所以我添加了一个:
$echo "0" > /var/db/ntpd.drift
然后我停止并启动 ntpd 服务:
$service ntpd stop
$service ntpd start
现在时间正确了。但我有点困惑,是硬停止/启动还是漂移文件解决了这个问题。
[更新]
问题总结:服务器上的时间过快。ntpd 服务无法纠正此问题,只有当我重新启动服务时才会纠正。从我幼稚的角度来看,虚拟机上的一秒似乎比实际的一秒要短一些。
答案1
将此行放入 rc.conf。当你启动系统和/或(重新)启动时,时间将同步ntpd。
ntpd_sync_on_start="YES"
此参数导致“ntpd”以选项“-G“(参见 /etc/rc.d/ntpd),(参见 man ntpd)
-g,--panicgate。允许第一次调整为 Big。此选项可能出现无限次。通常,如果偏移量超过恐慌阈值(默认情况下为 1000 秒),ntpd 将退出并向系统日志发送一条消息。此选项允许将时间设置为任意值而不受限制;但是,这只能发生一次。如果此后超过阈值,ntpd 将退出并向系统日志发送一条消息。此选项可与 -q 和 -x 选项一起使用。有关其他选项,请参阅 tinker 配置文件指令。
要同步运行系统:
1)停止 ntpd
# /etc/rc.d/ntpd stop
Stopping ntpd.
2)同步时间
# ntpdate 2.freebsd.pool.ntp.org
25 Feb 13:58:42 ntpdate[78591]: adjust time server 62.197.207.182 offset 0.003268 sec
3)启动 ntpd
# /etc/rc.d/ntpd start
Starting ntpd.
回答你的问题
是硬停止/启动还是漂移文件解决了这个问题?
肯定是“硬停止/启动”了。driftfile 用于微调时钟频率。这无法解释 5 小时的差异。
仅供参考。请参阅下面我在 FreeBSD 中 DO 的漂移文件。
# cat /var/db/ntpd.drift
0.075
# ps ax | grep ntpd
26681 - Ss 22:51.54 /usr/sbin/ntpd -g -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift
答案2
虽然使用ntpd
和ntpdate
可以缓解此问题,但更新之间的时间仍会继续偏差。此外,FreeBSD 12 的当前 GCE 映像已配置为与 Google 的时间服务器同步,但问题仍然存在。这是 Google Compute Engine 上 FreeBSD 12 中的一个已知问题。
查看GCE:严重的时钟漂移 - 解决方案进行调整以纠正此问题。总结:
/boot/loader.conf:
machdep.disable_tsc_calibration=1
kern.timecounter.invariant_tsc=1
/etc/sysctl.conf:
kern.timecounter.hardware=TSC-low