【Linux】「再起動したら時間が狂った!」を防ぐ。hwclockでハードウェア時刻を同期する
Linuxシステムには、実は 「2つの時計」 が存在することをご存知でしょうか?
システムクロック: OSが管理する時計。メモリ上で動作し、NTPなどで正確に調整されますが、電源を切ると消えてしまいます。
ハードウェアクロック (RTC): マザーボード上のチップが管理する時計。ボタン電池で動いており、電源を切っても時を刻み続けますが、少しずつズレていく特性があります。
普段私たちが date コマンドで見ているのは「システムクロック」の方です。 しかし、もしハードウェアクロックが大きくズレていたらどうなるでしょう? OSを再起動した瞬間、システムクロックはハードウェアクロックの誤った時間を読み込んでしまい、「ログの日付が数年前に戻る」といったトラブルを引き起こします。
これを防ぎ、2つの時計を同期させるためのコマンドが、今回紹介する hwclock です。
「systohc」と「hctosys」の呪文
このコマンドで最も重要なのは、同期の方向を決める2つのオプションです。
--systohc (System to Hardware Clock): 「OSの正しい時間」を「ハードウェア」に書き込みます。NTP同期後にこれを実行するのが、時刻ズレを防ぐ鉄則です。
--hctosys (Hardware Clock to System): 逆に、「ハードウェアの時間」を「OS」に読み込ませます。ネットに繋がらないオフライン環境などで使います。
ブログで解説している運用ポイント
私の技術ブログでは、このコマンドを使った時刻管理の勘所をまとめました。
UTCかLocaltimeか: Windowsとのデュアルブート環境で時刻が9時間ズレる原因と、--utc オプションの役割。
仮想環境の罠: AWSやGCPなどのクラウド環境では、ハードウェアクロックはホストOSが管理しているため、ゲストOSから hwclock を実行しても意味がない(またはエラーになる)という仕様。
手動設定: 電池交換後など、強制的に特定の日時をハードウェアに書き込む --set の使い方。
「NTPを入れているから大丈夫」と思って油断していませんか? 再起動時の時刻トラブルを未然に防ぐために、ぜひ以下の記事でハードウェアクロックの管理方法を確認してください。
