Windowsを入れている端末にLinuxをインストールすると、
RTCの時刻がLinuxに変更され、
Windowsで表示される時間がズレることがあります。
そんな時にいつも行う操作のメモ
RTCとは
マザーボードが記憶した時刻です。
OSを起動した際にマザーボードから時刻が取得できる場合には、
まず最初にRTCの時刻を取得し、使用されます。
ポイント
インターネットに繋がる場合は、NTPを利用した時刻同期が行われます。
インターネットにも繋がらず、RTCからの時刻取得もできない場合には、
以前シャットダウンした時刻を使用する事があります。(Ubuntu14,16,18で体験)
何故Windowsの時刻もズレてしまうのか
timedatectlコマンドを実行するとわかりますが、
Debianは少なくとも3つの時刻にアクセスし、それぞれの時刻を変更する事ができます。
1 | $ timedatectl |
- Local Time(指定したタイムゾーンの時間)
- Universal Time(世界標準の時間、UTC)
- RTC Time(マザーボードの時間)
Linux(例えばUbuntu)を起動した際に、
RTCの時刻がUTC時刻等に合わされて調整されてしまうためです。
この記事を書いているのは日本時間(JST)でいうとAM 1:00ですが、
UTCでは9時間前の前日のPM 4:00となっています。
Linuxがデフォルトで持つ時間がUTCであり、
それを定期的にRTCに同期を行っているため、
次にWindowsを起動した場合に、「時刻がズレている」という状態になります。
じゃあどうするのか
Linuxから2つの操作を行います。
- タイムゾーンを指定し、Local Timeを日本時間に変更
- Local TimeをRTCに同期する様に変更
手順
次の操作はLinux上で行います。
現在の時刻と設定を確認する
timedatectlコマンドを実行し、時刻を確認します。
1 | $ timedatectl |
ここで確認したいのは
- タイムゾーン
- RTCへLocal Timeを同期するか
です。
タイムゾーンはUTC、RTCへLocal Timeを同期しない設定となっています。
そのため、次にWindowsを起動した際にはRTCの時刻がズレた状態となります。
タイムゾーンをJSTにする
JSTとは日本時間の事です。
次のコマンドでタイムゾーンを日本時間に変更します。
1 | $ timedatectl set-timezone Asia/Tokyo |
念の為、設定が変わった事を確認します。
1 | $ timedatectl |
RTCに同期する時刻をLocal Timeにする
次のコマンドでRTCにLocal timeを同期させる設定を行います。
1 | $ timedatectl set-local-rtc true |
何やら注意が出ていますが、Google翻訳をかけた所は以下の様なメッセージでした。
警告:システムは、ローカルタイムゾーンでRTC時間を読み取るように構成されています。
このモードは完全にはサポートできません。さまざまな問題が発生します
タイムゾーンの変更と夏時間の調整。
RTC時間が更新されることはなく、外部の設備に依存して維持されます。
可能な場合は、UTCでRTCを使用して呼び出します
‘timedatectl set-local-rtc 0’
ここでWindowsの時刻がズレない設定は完了です。
Ubuntu14,16,18とこの設定を使用していますが、今の所問題は見当たりません。