Linux_Windowsデュアルブート環境時における時刻ずれの解決
LinuxとWindowsのデュアルブート環境において、各OSでの表示時刻がずれる現象が発生することがある。
この現象を解決する方法をまとめる。
環境
解決法
Windows側の時刻系を、UTCに設定する。-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
Linux側の時刻系を、localtimeにする解決法もある。
しかし、ハードウェアクロックがlocaltimeだと、サマータイムの切替時に時刻がおかしくなることがあるらしい。
そのため、時刻系は、UTCを用いるのが望ましいと思われる。
設定手順
設定は、以下の手順で行う。
Linux側で設定されている時刻系の確認
systemdでは、時刻系は、デフォルトでUTCに設定されている。従って、Linux側での設定は、基本的には必要無い。
念の為、Linux側の時刻系が、UTCに設定されているかどうかを確認しておく。
"RTC in local TZ: no"と表示されればOK。
$ timedatectl status | grep local
RTC in local TZ: no
もし、"RTC in local TZ: yes"と表示されたら、時刻系はlocaltimeに設定されている。
その場合は、以下のコマンドを用いて、時刻系をUTCに設定しておく。
$ timedatectl status | grep local
RTC in local TZ: yes
# timedatectl set-local-rtc false
$ !-2
RTC in local TZ: no
Windows側の時刻系の設定
レジストリの[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]キーに、"RealTimeIsUniversal"という名称の、16進数の'1'のDWORD値を追加する。-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
まず、管理者権限を持つユーザアカウントで、ログインをする。
次に、コマンドプロンプトを管理者で実行し、以下のコマンドを実行する。
最後に、再起動する。
> reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
復旧方法
Windows側の時刻系をlocaltimeに戻す手順をまとめる。
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
レジストリに追加した"RealTimeIsUniversal"を削除する。
まず、管理者権限を持つユーザアカウントでログインをする。
次に、コマンドプロンプトを管理者で実行し、以下のコマンドを実行する。
最後に、再起動する。
> reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /f
原因
Linux、WindowsのそれぞれのOSにおいて、異なる時刻系を使用していることが原因である。
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
コンピュータは、UTCとlocaltimeの2つの時刻系を用いて、時刻を管理している。
-
-
-
- -
-
-
どの時刻系を既定として用いるのかは、OSによって異なる。
MacOSではUTC、Windowsではlocaltime、Unix系では既定無し(UTCが使われることが多い)が、デフォルトとして設定されている。
OSは、起動時にCMOSからハードウェアクロックを読み出し、その時刻に設定された時刻系に基づいた修正を加え、システムクロックの時刻としている。
このとき、OSの時刻系がUTCであればロケールに基づいた時刻修正(Asia/Tokyoなら+0900)を行い、localtimeであれば修正を行わない。
また、OSは、シャットダウンする際に、現在のシステムクロックの時刻を、ハードウェアクロックとしてCMOSに書き込む。
したがって、OSの時刻系がUTCに設定されており、かつハードウェアクロックの時刻がlocaltimeの値である場合、時刻のずれが発生してしまう。
これは、タイムゾーンに基づいた時刻補正を既に行ったlocaltimeの値を、UTCと扱ってしまい、更に時刻補正を加えてしまうためである。
-
-
-
- -
-
-
Linux_Windowsのデュアルブート環境の場合、各OSの時刻系は、前述の通りデフォルトのままだと、Linux側はUTC、Windows側はlocaltimeを用いているケースが多い。
そのため、この状況で、Windows側で時刻同期を行うと、Linux起動時に時刻ずれが発生してしまう。
参考サイト
- ArchWiki: Time
https://wiki.archlinux.org/index.php/Time
- ko-jiya528: 時刻設定にUTCを使う
http://ja.528p.com/linux/client/CA010-timezone.html
- eのらぼらとり: パソコンの時計 ハードウェア クロックとシステム クロック
http://park12.wakwak.com/~eslab/pcmemo/clock/