参考URL:https://qiita.com/tabimoba/items/f9c4f9024f7c3ff65360
コマンド参考:https://kazmax.zpp.jp/cmd/h/hwclock.8.html
Linuxでは、日時情報として「Local time」「Universal time」「RTC time」の3種類が管理されています。これはtimedatectlコマンドで確認することが出来ます。
「Local time」は現地時刻
「Universal time」は世界標準時で
これらはシステムクロックと云われます。
「RTC time」はハードウェアが持つ日時情報で、
これはリアルタイムクロックと云われます。
BIOS/UEFIで設定可能な日時情報と「RTC time」は同じものです。
うち、dateコマンドで反映されるのは「Local time」と「Universal time」の2つです。(正しくは、設定値が反映されるのは「Local time」で、「Universal time」は「Local time」の時差に合わせて結果が出力されるものです)
「RTC time」はdateコマンドで日時設定を行っても、その設定値が反映されません。また、NTPによる日時補正についても同様(「Local time」しか補正されない)となります。
対応
最もシンプルな方法は、BIOS/UEFIで日時を設定することです。しかし、既にLinuxが起動していて、再起動が難しい場合は、hwclockコマンドで「RTC time」を設定することができます。
dateコマンドで日時を設定した後に、hwclock –systohcを実行すると、「Local time」と「RTC time」が同期されます。
上記実行後、timedatectlコマンドを実行すると、「Localtime」と「RTC time」が同期されていることがわかります。
なお、NTPによる日時補正は、前述の通り「Local time」しか反映されませんので、「RTC time」の日時ずれが生じた際は、上記コマンドを実行する必要があります。1週間〜1ヶ月に1回程度cronで上記コマンドを定期的に実行するのが良いでしょう。