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

以下は、2番目の部分(hwclockのマニュアルページから取得)を理解するのに役立ちます。

一部のシステムでは、ハードウェアクロックを同期状態に保つ別の方法がある。知っておくべきことです。 Linuxカーネルには、11分ごとにシステム時間をハードウェアクロックにコピーするモードがあります。このモードはコンパイル時オプションなので、すべてのカーネルにこの機能があるわけではありません。これは、NTPなどの複雑な機能を使用してシステムクロックを同期させるのに最適なパターンです。 (NTPは、システム時間をネットワークのどこかにあるタイムサーバーまたはシステムに接続されているワイヤレスクロックと同期させる方法です。RFC 1305を参照してください。)

カーネルが「11分モード」オプションでコンパイルされると、カーネルのクロックルールが同期されたときに有効になります。この状態では、カーネルtime_status変数のビット6(マスク0x0040に設定されているビット)が設定解除されます。この値は、adjtimex --printまたはntptimeコマンドの「status」行として出力されます。

カーネルのクロックルールを同期状態に設定して「11分モード」を有効にするには、NTPデーモンなどの外部影響が必要です。 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が更新されます。そうですか?

可能ですが、必ずしもそうではありません。 Classicは、デフォルトでこのキーワードを設定ファイルで使用する場合にのみntpd実行されます。他のNTP同期サービスの実装については、特定の実装に関するドキュメントを参照してください。chronydrtcsync/etc/chrony/chrony.conf

関連情報