18.18. ハードウェアクロック更新の設定

リアルタイムクロック (RTC) とも呼ばれるハードウェアクロックの更新には、システムクロックが使用できます。本セクションでは、これを実行する 3 つのアプローチを説明します。
即時ワンタイム更新
ハードウェアクロックの即時ワンタイム更新を行うには、root で以下のコマンドを実行します。
~]# hwclock --systohc
ブートごとの更新
ntpdate 同期ユーティリティー実行後にブートごとに毎回ハードウェアクロックが更新するようにするには、以下を実行します。
  1. 以下の行を /etc/sysconfig/ntpdate ファイルに追加します。
    SYNC_HWCLOCK=yes
  2. ntpdate サービスを root で有効にします。
    ~]# systemctl enable ntpdate.service
ntpdate サービスは /etc/ntp/step-tickers ファイルで定義されている NTP サーバーを使用することに留意してください。

注記

仮想マシンの場合は、仮想マシン自体の次回起動時ではなく、ホストマシンの次回起動時にハードウェアクロックが更新されます。
NTP 経由の更新
ntpd または chronyd サービスを使うと、システムクロックが更新されるたびにハードウェアクロックを更新することができます。
root として ntpd サービスを起動します。
~]# systemctl start ntpd.service
この動作を次回ブート後にも維持するには、サービスがブート時に自動的に起動するようにします。
~]# systemctl enable ntpd.service
または
root として chronyd サービスを起動します。
~]# systemctl start chronyd.service
この動作を次回ブート後にも維持するには、サービスがブート時に自動的に起動するようにします。
~]# systemctl enable chronyd.service
その結果、ntpd または chronyd がシステムクロックを同期するたびに、カーネルがハードウェアクロックを 11 分ごとに自動更新します。

警告

上記の 11 分モードは常に有効になっているわけではないので、このアプローチが常に機能するとは限りません。このため、ハードウェアクロックはシステムクロックの更新時に更新されるとは限りません。
ソフトウェアクロックがハードウェアクロックに同期しているかを確認するには、root として ntpdc -c kerninfo または ntptime コマンドを使用します。
~]# ntpdc -c kerninfo
以下のような結果になります。


pll offset:           0 s
pll frequency:        0.000 ppm
maximum error:        8.0185 s
estimated error:      0 s
status: 2001 pll nano
pll time constant:    6
precision:            1e-09 s
frequency tolerance:  500 ppm
または
~]# ntptime
以下のような結果になります。


ntp_gettime() returns code 0 (OK)
  time dcba5798.c3dfe2e0  Mon, May  8 2017 11:34:00.765, (.765135199),
  maximum error 8010000 us, estimated error 0 us, TAI offset 0
ntp_adjtime() returns code 0 (OK)
  modes 0x0 (),
  offset 0.000 us, frequency 0.000 ppm, interval 1 s,
  maximum error 8010000 us, estimated error 0 us,
status 0x2001 (PLL,NANO),
  time constant 6, precision 0.001 us, tolerance 500 ppm,
ソフトウェアクロックがハードウェアクロックと同期しているかを確認するには、出力の status 行を見ます (強調表示した部分) 。
最後から 3 桁目が 4 の場合、ソフトウェアクロックはハードウェアクロックと同期していません。
status 0x2401
最後の 4 桁の 2 桁目が 4 ではない場合、ソフトウェアクロックはハードウェアクロックと同期しています。
status 0x2001