我知道我的硬件时钟基于一个简单的石英时钟,随着时间的推移会不同步,但系统时间基于 CPU 时钟,因此非常准确。
我不在可以使用 NTP 的环境中,所以我需要知道系统时钟是否会自动同步回硬件时钟以防止其漂移?
如果没有,我需要设置一个 cron 作业或其他调用hwclock来同步回硬件时钟。一切都设置为 UTC,因此不必担心。
我认为此页面提供了最佳答案:
2. Linux 如何记录时间
2.1 基本策略
Linux 系统实际上有两个时钟:一个是电池供电的“实时时钟”(也称为“RTC”、“CMOS 时钟”或“硬件时钟”),它在系统关闭时跟踪时间,但系统运行时不使用。另一个是“系统时钟”(有时称为“内核时钟”或“软件时钟”),它是基于定时器中断的软件计数器。当系统未运行时它不存在,因此必须在启动时从 RTC(或其他时间源)对其进行初始化。ntpd 文档中提到的“时钟”指的是系统时钟,而不是 RTC。
两个时钟将以不同的速率漂移,因此它们会逐渐彼此偏离,也远离“真实”时间。让它们保持准时的最简单方法是测量它们的漂移率并在软件中应用校正因子。由于 RTC 仅在系统未运行时使用,因此在引导时使用 Clock(8) 或 hwclock(8) 读取时钟时应用校正因子。通过使用 adjtimex(8) 调整每次定时器中断时系统时间提前的速率来校正系统时钟。
adjtimex(8) 的一个粗略替代方案是让 chron 定期运行 Clock(8) 或 hwclock(8),以将系统时间同步到(校正后的)RTC。这是在clock(8)手册页中推荐的,如果你经常这样做,不会导致系统时间出现大的“跳跃”,那么它就可以工作,但是adjtimex(8)是一个更优雅的解决方案。如果时间向后跳,某些应用程序可能会抱怨。
准确性的下一步是使用像 ntpd 这样的程序定期从网络时间服务器或无线电时钟读取时间,并不断调整系统时钟的速率,使时间始终匹配,而不会导致时间突然“跳跃”。系统时间。如果您在启动时始终有网络连接,则可以完全忽略 RTC,并使用 ntpdate(与 ntpd 软件包一起提供)从时间服务器(LAN 上的本地服务器或远程服务器)初始化系统时钟。互联网上的服务器。但是,如果您有时没有网络连接,或者您需要在网络处于活动状态之前的引导序列期间保持准确的时间,那么您还需要在 RTC 中维护时间。