计算引擎上的 FreeBSD 12 时间过得太快

计算引擎上的 FreeBSD 12 时间过得太快

我在 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

虽然使用ntpdntpdate可以缓解此问题,但更新之间的时间仍会继续偏差。此外,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

相关内容