Debian

Linux 系統時間與 RTC 時間不同

  • July 26, 2019

我正在執行 Debian Stretch 和 Linux 核心版本 4.9.110-3+deb9u4,並修改了配置。我正在觀察以下奇怪的行為

  1. 將硬體時鐘設置為2016-01-01 00:00:00 UTC
  2. 重啟
  3. dmesg報告讀取的硬體時鐘與之前設置的類似
  4. date報告2016-11-03 17:16:42 UTC

在任何日期之前都觀察到上述行為2016-11-03 17:00:00 UTC。我沒有進一步縮小範圍。

核心原始碼沒有改變,我也沒有執行任何自定義核心模組。我在使用 Debian repos 中的 4.9.168 核心以及 stretch-backports 中的 4.19.37 核心時也觀察到了這一點。我還能夠在執行 Stretch 和 4.9.168 的 DigitalOcean 液滴上重現這一點。

當我在 2016-11-03 之後設置日期時,我沒有看到這個問題發生。這似乎不太可能,但似乎核心正在強制一些最小日期。

有人對此有所了解嗎?

來自我的虛擬機的日誌:

root@debian-vm:~# timedatectl 
     Local time: Thu 2016-11-03 17:17:02 UTC
 Universal time: Thu 2016-11-03 17:17:02 UTC
       RTC time: Fri 2016-01-01 00:29:00
      Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no
root@debian-vm:~# dmesg | grep rtc
[    0.985653] rtc_cmos 00:01: registered as rtc0
[    0.985670] rtc_cmos 00:01: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
[    1.032409] rtc_cmos 00:01: setting system clock to 2016-01-01 00:28:37 UTC (1451608117)

來自 DigitalOcean 液滴的日誌:

root@debian-s-1vcpu-1gb-sfo2-01:~# timedatectl                                                                                                                                                                                                                                                                                                      
     Local time: Thu 2016-11-03 17:17:05 UTC
 Universal time: Thu 2016-11-03 17:17:05 UTC
       RTC time: Fri 2016-01-01 00:00:46
      Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no

事實證明,這不是在 Linux 核心中,而是在 systemd 中。systemd 時鐘實用程序在建構時定義了最小時鐘值,如果從 RTC 讀取的時間早於該時鐘時間,它將強制系統時鐘為該最小時間。這個“最短時間”可能是由 Meson 建構系統指定的,或者是從建構環境中 NEWS 文件的創建時間讀取的。

以下日誌顯示時鍾正在被 systemd 提前,並顯示最小時鐘值。

root@debian-vm:~# journalctl -b | grep time | grep systemd
Nov 03 17:16:43 debian-vm systemd[1]: System time before build time, advancing clock.

root@debian-vm:~# date --date="$(uptime -s)" +%s
1478193400

root@debian-vm:~# uptime -s
2016-11-03 17:16:40

您可以在此處查看檢查最小時鐘的 systemd 原始碼

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