Linuxとのデュアルブート環境において,LinuxからWindowsに切り替えると,Windowsの時間のずれが毎回発生する.調べてみたところ,起動時に参照するCMOS Clockの扱いに起因するものだと分かったので,Windows側のCMOS Clockの扱いを変更することで対処した.
私は普段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
というレジストリエントリがこの挙動を制御する.
この値が
ということのようなので,早速設定を変更してみよう.
レジストリエディタを起動して修正するのは面倒なので,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に切り替えてみたが,時計のずれが発生することはなく,無事問題は解消された.