WindowsとLinuxで時計が狂うのを直す

昔から Linux と Windows のデュアルブートが可能な環境でOSを行き来すると、時計が大きくずれる現象が発生していました。これは Linux ではPCのハードウェア時計(RTC)が UTC(協定世界時)で動作しているのを前提としているのに対し、WindowsではRTCはローカルタイム(JST=日本標準時)で動作しているのを前提としており、それぞれのOSがNTPを利用して時刻修正を行って、それをRTCに反映していることが原因でした。

以前のバージョンのLinuxでは、 /etc/default/rcS に UTC=no と記載することにより、RTCの設定がローカルタイムであることを設定できたのですが、いつの頃からか /etc/default/rcS は存在しなくなっていました。

最近は Linux を使うことがほとんどで、それでもあまり困らなかったのですが、その修正方法がわかったのでメモしておきます。修正は以前と同様、Linux側で行います。使用するコマンドは timedatectl コマンドです。

$ timedatectl status
                      Local time: 水 2018-08-01 01:25:54 JST
                  Universal time: 火 2018-07-31 16:25:54 UTC
                        RTC time: 水 2018-08-01 01:25:45
                       Time zone: Asia/Tokyo (JST, +0900)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

ということで、最後の行にRTCがローカルタイムゾーンか否かの記載があります。で、

$ timedatectl set-local-rtc true

とするとこの設定を変更することができます。ところでこのコマンド、ハードウェア設定の変更に関わるものなのですが、root権限がなくても設定できてしまいます。(いいのかな?)

設定変更後に再度設定状況を読み出すと、

$ timedatectl status
                      Local time: 水 2018-08-01 01:26:22 JST
                  Universal time: 火 2018-07-31 16:26:22 UTC
                        RTC time: 水 2018-08-01 01:26:22
                       Time zone: Asia/Tokyo (JST, +0900)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

という感じで、警告が表示されます。

“WindowsとLinuxで時計が狂うのを直す” への3件の返信

  1. 「WindowsとLinuxで時計が狂うのを直す」の記事を参考にWindowsとLinuxのデュアルブート時に時計のズレを克服するのに参考にさせて頂きました、その節はお世話になりました、実は今回Windows完全廃止に成功し、かつてデュアルブートしていたPCがLinuxオンリーになりました、そこで質問なのですがRTCを元通りにUTCで動作するようにするにはどの様にターミナルに入力すればいいでしょうか?お忙しいとは思いますが、お返事いただけると幸いです。

    1. 気づくのが遅れてすみません。
      $ timedatectl –help
      でヘルプを見ると、単にBOOL値で設定しているだけなので、
      $ timedatectl set-local-rtc false
      でいいのではないかと思います。

      1. お返事ありがとうございます、こちらこそせっかく返答を書いてくださっていたのにコメント返信をチェックしてなくて気づくのが遅れてしまい1ヶ月以上放置してしまい申し訳ありませんでした、返答いただいたとおり
        timedatectl set-local-rtc false
        と入力したところ無事に元通りに戻りました、この度はお忙しいにも関わらず僕の稚拙な質問にも丁寧な回答をいただき、感謝しております、季節の変わり目で体調を崩しやすい時期なので、お体ご自愛してお過ごしください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)