NTPデーモンの状態を照会すると、ntpdc -c sysinfo
次の出力が表示されます。
system peer: 0.0.0.0
system peer mode: unspec
leap indicator: 11
stratum: 16
precision: -20
root distance: 0.00000 s
root dispersion: 12.77106 s
reference ID: [73.78.73.84]
reference time: 00000000.00000000 Thu, Feb 7 2036 7:28:16.000
system flags: auth monitor ntp kernel stats
jitter: 0.000000 s
stability: 0.000 ppm
broadcastdelay: 0.000000 s
authdelay: 0.000000 s
これは、NTP 同期が失敗したことを示します。ただし、システム時間の精度は1秒以内です。今と同じ時間にネットワーク接続なしでシステムを実行すると、システム時間が約10秒ほど差があります。
この動作は、システムに時間を同期させる別の方法があることを示します。私もsystemd-timesyncd.service
(設定ファイルがあります/etc/systemd/timesyncd.conf
)あることに気づき、timedatectl status
正確な時間を教えてくれました。
Local time: Thu 2016-08-25 10:55:23 CEST
Universal time: Thu 2016-08-25 08:55:23 UTC
RTC time: Thu 2016-08-25 08:55:22
Time zone: Europe/Berlin (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2016-03-27 01:59:59 CET
Sun 2016-03-27 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2016-10-30 02:59:59 CEST
Sun 2016-10-30 02:00:00 CET
それで、私の質問はこれら2つのメカニズムの違いは何ですか?そのうちの1つはもう使用されていませんか?並列に使用できますか? NTP同期状態を照会するには、どちらを信頼する必要がありますか?
(私は別のシステム(別のネットワークにあります)を持っており、どちらの方法も成功を示し、正確な時間を生成します。)
答え1
systemd-timesyncd は、基本的に最新の systemd バージョンとある程度バンドルされている小規模クライアント専用の NTP 実装です。完全なntpdよりも軽いですが、時間同期のみをサポートします。つまり、他のコンピュータに対してNTPサーバーとして機能することはできません。クライアント側でntpdを置き換えるためのものです。
理論的には、2つの間にわずかな遅延がある異なるタイムサーバーを選択できるため、2つを同時に使用しないでください。これにより、システムクロックが定期的に「ジャンプ」します。
ntpdc
残念ながら、状態を取得するにはntpdを使用している場合はtimedatectl
timesyncdを使用する必要があります。
答え2
systemd-timesyncdにはクロックルールはありません。時計は訓練または補償されず、時間の経過とともに内部時計のドリフトは減少しません。ポーリング間隔を調整する基本的なロジックがありますが、制限されない場合は、systemd-timesyncdが最近のドリフトに必要と思われる間隔でプッシュまたはプルされるため、ホストは常に不均一な時間になります。また、リモートタイムソースの品質も評価できません。 100ミリ秒以上の精度を得る可能性はほとんどありません。これは、ラップトップなどの単純なエンドユーザーデバイスには十分ですが、より高いタイミング精度を必要とする分散システムには確かに問題を引き起こす可能性があります。