Ntpd

如果伺服器不用作時間源,是否有任何理由讓 ntpd 同步到 Local(0)?

  • July 2, 2014

執行 CentOS 5.8 版

我在修復的伺服器上遇到了時間漂移問題 - 它沒有同步 hwclock,因此在重新啟動時 ntp 會關閉超過 1000 秒並且永遠不會同步時間。

在調查該問題時,我注意到 ntpd 定期與 Local(0) 同步。

當此伺服器永遠不會用作時間源時,是否有任何理由將 ntpd 配置為同步到 Local(0)?

“答案”——你不需要使用 Undisciplined Local Clock,除非你想在連接到其他時間伺服器失敗時將此伺服器用作本地時間伺服器。

來自 ntpd 的日誌消息:

Jul 20 03:47:49 localhost ntpd[5441]: synchronized to 110.14.8.1, stratum 3
Jul 20 04:21:06 localhost ntpd[5441]: synchronized to LOCAL(0), stratum 10
Jul 20 04:38:09 localhost ntpd[5441]: synchronized to 110.14.8.1, stratum 3
Jul 20 04:55:26 localhost ntpd[5441]: synchronized to LOCAL(0), stratum 10

ntpd.conf:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 10.4.58.21
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

我們將禁用本地同步,但仍然很好奇為什麼會發生本地同步。我們在同一個子網上放置了一個臨時時間伺服器,ntpd 仍然與本地時間同步。(* 可能的答案: ntpdc -c sysinfo stats that the startum of the ntp server is 11 這比我們告訴 ntpd 用於本地的 10 差。是時候去看看 ntpd 的源 *)

Jul 24 17:11:32 localhost ntpdate[5432]: step time server 227.220.222.220 offset 1629.764734 sec
Jul 24 17:11:32 localhost ntpd[5434]: ntpd 4.2.2p1@1.1570-o Fri Nov 18 13:21:21 UTC 2011 (1)
Jul 24 17:11:32 localhost ntpd[5435]: precision = 1.000 usec
Jul 24 17:11:32 localhost ntpd[5435]: Listening on interface wildcard, 0.0.0.0#123 Disabled
Jul 24 17:11:32 localhost ntpd[5435]: Listening on interface wildcard, ::#123 Disabled
Jul 24 17:11:32 localhost ntpd[5435]: Listening on interface eth0 Enabled
Jul 24 17:11:32 localhost ntpd[5435]: Listening on interface lo, ::1#123 Enabled
Jul 24 17:11:32 localhost ntpd[5435]: Listening on interface lo, 127.0.0.1#123 Enabled
Jul 24 17:11:32 localhost ntpd[5435]: Listening on interface eth0, 192.12.140.55#123 Enabled
Jul 24 17:11:32 localhost ntpd[5435]: kernel time sync status 0040
Jul 24 17:11:32 localhost ntpd[5435]: frequency initialized 0.000 PPM from /var/lib/ntp/drift
Jul 24 17:14:48 localhost ntpd[5435]: synchronized to LOCAL(0), stratum 10
Jul 24 17:16:55 localhost ntpd[5435]: synchronized to 192.12.140.200, stratum 3
Jul 24 20:11:06 localhost ntpd[5435]: synchronized to LOCAL(0), stratum 10
Jul 24 20:20:50 localhost ntpd[5435]: synchronized to 192.12.140.200, stratum 3

ntpd不負責同步本地硬體時鐘。通常,會提供一個程序來執行此操作。在 Ubuntu 上,程序是hwclock. 它在啟動時用於設置系統日期,在關機時用於更新它。

我通常只將硬體時鐘配置為本地 NTP 時間伺服器上的時間源。如果我確實在客戶端上配置它,我將它們設置在更高的層,以便時間伺服器在可訪問的情況下保持時間權限。

如果您使用ntpd與本地時鐘同步,請將硬體時鐘設置為 UTC,並將您的系統配置為在啟動時從時鐘接收 UTC。不幸的是,如果您雙啟動到 Windows,這將無法正常工作。在這種情況下,不要使用本地時鐘作為時間源。

從您的輸出中可以看出,您有一個間歇性的外部時間源,這導致您在硬體時鐘上來回切換。即使它是可達的,外部時間源也可能已經失​​去了自己的同步,而不是被認為是時間源。如果您有持續的網路連接,請添加更多時間源。如果您有斷斷續續的網路連接,請修復您的硬體時鐘設置,或刪除硬體時鐘作為源。

您的硬體時鐘在啟動時超過 1000 秒這一事實表明兩個可能的問題之一:

  • 硬體時鐘未設置為在引導序列期間設置系統時間的軟體所期望的時區。
  • 用於在系統斷電時保持 CMOS 執行的電池已耗盡或即將耗盡。

您可以通過在命令中添加-g選項來解決啟動時的同步問題。ntpd

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.

如果您無法訪問任何官方伺服器(不再),這意味著作為備份時間源。如果您啟用了漂移文件,這甚至可以使您的時間保持同步,因為漂移文件應該包含實時對您本地時鐘的校正值。

引用自:https://unix.stackexchange.com/questions/43622