timedatectl 的问题

timedatectl 的问题

您好,可以帮助我了解 timedatctl 的工作原理吗?

  • 如果系统时钟 sysnc 通过互联网使用 NTP 服务,系统时间将更新为当前日期和时间。

  • 如果系统时钟与 NTP 同步,它将每 11 分钟更新一次 RTC,对吗?

    root@NB2-SOC-BSP-ALPHA-V1:~# date --set="2025-02-02 12:00:00"
    Sun Feb  2 12:00:00 IST 2025
    root@NB2-SOC-BSP-ALPHA-V1:~# date
    Sun Feb  2 12:00:02 IST 2025
    
    root@NB2-SOC-BSP-ALPHA-V1:~# timedatectl
            Local time: Sun 2025-02-02 12:00:04 IST
        Universal time: Sun 2025-02-02 06:30:04 UTC
              RTC time: Sat 2022-03-05 11:07:29    
             Time zone: Asia/Kolkata (IST, +0530)  
    System clock synchronized: no                         
           NTP service: inactive                   
       RTC in local TZ: no 
    
    root@NB2-SOC-BSP-ALPHA-V1:~# timedatectl set-ntp true 
    root@NB2-SOC-BSP-ALPHA-V1:~# timedatectl
            Local time: Fri 2022-10-14 14:22:35 IST
        Universal time: Fri 2022-10-14 08:52:35 UTC
              RTC time: Sat 2022-03-05 11:07:39    
             Time zone: Asia/Kolkata (IST, +0530)  
    System clock synchronized: yes                        
           NTP service: active                     
       RTC in local TZ: no 
    
     root@NB2-SOC-BSP-ALPHA-V1:~# timedatectl
            Local time: Fri 2022-10-14 14:22:41 IST
        Universal time: Fri 2022-10-14 08:52:41 UTC
              RTC time: Sat 2022-03-05 11:07:45    
             Time zone: Asia/Kolkata (IST, +0530)  
      System clock synchronized: yes                        
           NTP service: active                     
       RTC in local TZ: no                         
    

启用 NTP 服务后,仅更新本地时间 + 世界时间,但没有更新 RTC 时间,为什么?

答案1

以下内容可能对您理解第二部分(取自 hwclock 的手册页)有所帮助。

您应该了解某些系统中硬件时钟保持同步的另一种方式。 Linux 内核有一种模式,每 11 分钟将系统时间复制到硬件时钟。此模式是编译时选项,因此并非所有内核都具有此功能。当您使用 NTP 等复杂功能来保持系统时钟同步时,这是一个很好的模式。 (NTP 是一种使系统时间与网络上某处的时间服务器或连接到系统的无线电时钟保持同步的方法。请参阅 RFC 1305。)

如果内核是使用“11 分钟模式”选项编译的,则当内核的时钟规则处于同步状态时,它将处于活动状态。处于此状态时,内核的 time_status 变量的位 6(在掩码 0x0040 中设置的位)未设置。该值作为 adjtimex --print 或 ntptime 命令的“状态”行输出。

它需要外部影响,例如 NTP 守护进程,才能将内核的时钟规则置于同步状态,从而打开“11 分钟模式”。可以通过运行任何以老式方式设置系统时钟的程序来关闭它,包括 hwclock --hctosys。但是,如果 NTP 守护进程仍在运行,它将在下次同步系统时钟时再次打开“11 分钟模式”。

如果您的系统在“11 分钟模式”下运行,则可能需要在启动脚本中使用 --hctosys 或 --systz,特别是如果硬件时钟配置为使用本地时间刻度。除非内核知道硬件时钟正在使用什么时间刻度,否则它可能会用错误的时间刻度来破坏它。内核默认使用UTC。

设置系统时钟的第一个用户空间命令通知内核硬件时钟正在使用什么时间刻度。这是通过 permanent_clock_is_local 内核变量发生的。如果 --hctosys 或 --systz 是第一个,它将根据 adjtime 文件或适当的命令行参数设置此变量。请注意,当使用此功能并且硬件时钟时间刻度配置发生更改时,需要重新启动才能通知内核。

hwclock --adjust 不应与 NTP“11 分钟模式”一起使用。

我不知道 11 分钟模式是否是内核的正常功能。我怀疑是的。

另请检查 systemd-timedated.service 是否正在运行。

答案2

如果系统时钟通过互联网与 NTP 服务同步,系统时间将更新为当前日期和时间。

是的,除非系统严重不同步,以至于 NTP 服务认为出现了严重错误并放弃。

如果系统时钟与 NTP 同步,它将每 11 分钟更新一次 RTC,对吗?

有可能,但并非总是如此。经典版ntpd默认这样做;chronyd仅当配置文件rtcsync中使用该关键字时才执行此操作/etc/chrony/chrony.conf。对于其他 NTP 同步服务实现,请参阅该特定实现的文档。

相关内容