Linuxとのデュアルブート環境におけるWindowsでの時刻のずれ

Linuxとのデュアルブート環境におけるWindowsでの時刻のずれ

Linuxとのデュアルブート環境において,LinuxからWindowsに切り替えると,Windowsの時間のずれが毎回発生する.調べてみたところ,起動時に参照するCMOS Clockの扱いに起因するものだと分かったので,Windows側のCMOS Clockの扱いを変更することで対処した.

Tags: windows clock cmos utc
Takafumi Asano · 3 minute read

導入

私は普段LinuxデスクトップとMacBookを使っていのだが,ゲームをしたいときやどうしてもWindowsでなければできないことをするときだけ,Windowsを使用している.

Windowsの使用頻度があまり多くないので,デスクトップ機に2機のSSDを搭載して,BIOSで切り替えるデュアルブート環境を構成しているのだが,LinuxとWindowsを切り替えるとWindowsの時計がずれるという問題が起きた.

この問題は前にも対処した記憶が有るのだが,一度やるとしばらくやらない様な構成は当然忘れているので,毎回検索しなくてもいいように記事に残しておくことにした.

原因

LinuxはCMOS Clockに対してUTCで時間を書き込むが,Windowsはデフォルトでこれをローカルタイム(私の場合はJST)として扱っているようだ.そのため,Linuxが起動したあとWindowsをブートするときっかり9時間時刻がずれる

デュアルブートの弊害がこんなところに出るとは.

対策

これを回避するには,WindowsもCMOS ClockをUTCとして扱うように構成すればよい.

HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation配下のRealTimeIsUniversalというレジストリエントリがこの挙動を制御する.

この値が

  • 0: CMOS Clockをローカルタイムとして扱う
  • 1: CMOS ClockをUTCとして扱う

ということのようなので,早速設定を変更してみよう.

レジストリエディタを起動して修正するのは面倒なので,PowerShellから直接書き換える.

PS C:\Users\<user>
λ reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUnivers al /t REG_DWORD /d 1
The operation completed successfully.

無事変更できたようだ.念の為確認もしてみよう.

PS C:\Users\<user>
λ reg query HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUnive rsal

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
    RealTimeIsUniversal    REG_DWORD    0x1

エントリが存在し,値が1であることが確認できた.

このあと,一度Linuxに切り替え,再びWindowsに切り替えてみたが,時計のずれが発生することはなく,無事問題は解消された.