以前、Windows10の時刻自動設定がおかしいという記事を書いたのですが、すみません、時刻が同期されないのは別の原因だったことが分かりました。
まず、前提として、私の環境なんですが、Windows10とLinuxをデュアルブートしている環境なんです。そして、このデュアルブートの環境が、時刻のずれる原因の一つでした。
そしてもう一つ、Windowsのサービスの起動方法が影響していました。
OSの時刻の管理方法の違い
まずWindowsでは、起動時にハードウェアクロックから時刻を取得してきてOS側で管理しているのですが、このときWindowsはこのハードウェアクロックをローカルタイムとして認識しています。次にLinuxですが、Linuxも同じように起動時にハードウェアクロックから時刻を取得しているのですが、このときLinuxはハードウェアクロックをUTCとして認識しているんです。
そして、このOSによるハードウェアクロックの認識の違いが、デュアルブートにおいて時刻のずれを引き起こします。
では、具体的に例をあげると次のようになります。
1.Windows起動
↓
正しい時刻を表示。
ハードウェアクロックはローカルタイム。
↓
2.Windows終了
↓
3.Linux起動
ハードウェアクロックをUTCとして認識。
起動時の時刻は9時間進んだ状態で表示される。
↓
手動または自動で時刻の調整を行う。
↓
4.Linux終了
システムクロックをハードウェアクロックに書き込み。
このときUTC時刻(日本時間より-9時間)を書き込んでいる。
↓
5.Windows起動
ハードウェアクロックから時刻を取得。
取得した時刻をローカルタイムだと認識しているので、
表示が9時間遅れになる。
このOSの時刻の管理方法についての詳細は、下記のサイトをご覧ください。
パソコンの時計 ハードウェア クロックとシステム クロック
Windows Time サービス
でもみなさん不思議に思いませんか?上の「5.」でWindowsを起動したときなんで時刻がずれたままなのか?
普通、OS起動時にNTPサーバーと同期をとるから時刻が補正されるんじゃないの?
そう思われる方も多いと思いますが、実は補正されないんです。
なんでかっていうと、時刻同期のためのWindows Time サービスが起動してないからなんです。
えっ!?と思われた方も多いと思いますが、実は動いてないんです。
私もこのことに全然気づかなくて、いままで起動時に同期しているものだと思ってました。
でもよく見るとサービスは起動してないんですよね。
では、なんでサービスが起動してないかというと、Windows7およびWindows Server 2008 R2以降では、Windows Timeサービスはトリガー起動になっていて、ActiveDirectoryドメインに属していない場合だと起動しないようになってるからなんです。
詳しくは、下記サイトをご覧ください。
Windows 7 / Windows Server 2008 R2 以降のスタンドアロン環境で Windows Time サービスが自動的に起動しない
解決策
では、このOS起動時にWindows Timeサービスを起動させるにはどうすればいいかですが、いくつか方法があるのですが、私はつぎのようにしました。上のサイトにある(方法 3)のやり方です。まず、Windows Timeサービスのスタートアップ種類を「自動 (遅延開始)」にします。
次に、タスクスケジューラーに設定されている「SynchronizeTime」タスクを無効にします。
場所は、[タスクスケジューラライブラリ] - [Microsoft] - [Windows]- [Time Synchronization] 配下にあります。
これで、次回OS起動時にWindows Timeサービスが起動され、正しい時刻に設定されます。
それにしても、なんでこんな仕様にしてしまったんでしょうか。
スタンドアロン環境でもタスクスケジューラのTime Synchronization によって、毎週日曜日の午前1時に、Windows Time サービス は起動され時刻同期を行うからよしということになってるんですが、なんかしっくりきません。モヤっとしたものが残ります。
<関連記事>
【Windows10】ストアから購入したテーマの壁紙はどこに保存されるの?
【Windows10】コントロールパネルを表示する方法。
【Windows10】仮想デスクトップを移動するショートカット
Windows10で付箋を表示させる方法
Windows10の時刻自動設定がおかしい
【Windows】Windows10バージョン1809の新元号対応パッチも公開されたらしい
スポンサーリンク