きり丸の技術日記

技術検証したり、資格等をここに残していきます。

WSLの時刻がズレたのでWindowsの時刻に修正する(sudo hwclock -s)

WSLの時刻がズレたことによるエラーが発生したので、時刻修正をした時のメモ。

環境

  • Ubuntu
    • 22.04.2 LTS
  • GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64

前提条件

  • なし

コマンド

次のコマンドをWSL上で実行することで、Windowsの時刻と一致できます。

sudo hwclock --hctosys
または
sudo hwclock -s

説明

WSLからWindowsのハードウェアクロック側にアクセスするので、sudo hwclockが必要です。

そのオプションとしてソフトウェアクロックをハードウェアクロックの値で更新するHardware Clock to System Timeの省略であるhctosysを一緒に実行します。それでも長いオプションなので-sという短縮形が用意されています。

ChatGPTによる説明

この記事を作るにあたって、不明瞭だった単語をChatGPTに確認しています。

ハードウェアクロックとソフトウェアクロック

ハードウェアクロック(RTC、Real-Time Clock)

ハードウェアクロックは、マザーボード上に存在し、電源が切られたときでもバッテリーにより動作を続けるクロックです。通常、コンピュータの電源が切られている間も正確な時間を保つために使用されます。ハードウェアクロックは通常、UTC時間を保持し、システムが起動するときまたはシャットダウンするときに時間情報をシステムクロックと同期します。

システムクロック(Software Clock、 Kernel Clock、またはOS Clock)

システムクロックは、OSのカーネルが管理するクロックです。コンピュータの電源が入っている間は、OSがこのクロックを使用して時間を追跡します。システムクロックは高精度であり、OSのスケジューリングやタスクのタイミングなどに使用されます。しかし、コンピュータの電源が切られるとリセットされるため、再起動後の時間情報はハードウェアクロックから取得されます。 実際に時間を要求するとき(例えば、dateコマンドを実行するなど)は、通常はシステムクロックの時間が参照されます。そしてその時間は通常、起動時にハードウェアクロックから取得した時間に基づいています。

一般的に言って、ハードウェアクロックはコンピュータがオフになっているときの時間を保持する責任があり、システムクロックはオンになっているときの時間を正確に追跡します。

ソースコード

なし

自動実行する場合

cronで自動で修正する記事が既にあったので次のリンクの記事を参考にしてください。まだ手元で実施していないので、この記事との差分があったら改めて書きます。

終わりに

仕事を始めた朝には発生しないのに、昼休憩後には頻発するエラーだったので原因に心当たりをつけるまで時間がかかりました。知らなかったのですが、WSLの時刻って結構ズレるんですね。

まだまだWSL初心者なのでもっと勉強したいです。