【解決策】PC・サーバーの再起動後にシステム時刻がリセットされる原因と対処法
この記事では、ノートパソコン/デスクトップPC/サーバーのシャットダウン、再起動、または休止状態からの復帰後に、システムクロックの日付や時刻が正しく表示されなくなる原因について解説します。毎回時刻がリセットされて手動で設定し直す必要があるという症状に悩まされている方は多いでしょう。ここでは最も典型的なケースであるBIOSバッテリーの消耗に加え、1台のPCにWindowsとLinuxをデュアルブートしている環境で発生する時刻ずれ、さらにWindows Server OSを搭載したHPE ProLiant G9/G8サーバーのファームウェア不具合といった、少し特殊なケースについても取り上げます。
BIOS/CMOSバッテリーの消耗による日付・時刻の保存不良
「なぜPCを再起動すると日付と時刻がリセットされるのか?」という疑問に対する典型的な答えが、BIOS(CMOS)バッテリーの消耗です。このバッテリーは、PCの電源が切れている間もBIOS/UEFIの設定を保持し、内蔵のハードウェアクロックを自律的に動作させる役割を担っています。
バッテリーが消耗すると、マザーボードに電力が供給されていない間はBIOSが設定を保持できず、現在の日付や時刻を含むすべての設定が初期化されます。購入から年数が経過しているPCであれば、バッテリーが寿命を迎えている可能性は非常に高いです。交換を強くお勧めします。作業自体は難しくなく、特別な技術も不要です。家庭用からエンタープライズ向けまで、ほとんどの機器には標準的な3VのCR2032コイン電池が使われています。

バッテリー交換でも改善しない場合は、BIOS設定をクリアするためのジャンパピンの状態を確認してください。ジャンパはバッテリーソケットの近くにあり、「CMOS」「CLEAR」「RESET」などの印が付けられています。誰かがRESET位置のまま放置していたケースもあります。その場合、マザーボードに通電するたびにBIOS設定がリセットされてしまいます。ジャンパを通常の位置へ戻しましょう。
それでも解決しない場合は、マザーボードのBIOSファームウェアの更新を試みてください。手順については、各ハードウェアベンダーの公式サイトを参照してください。新しいファームウェアでは、既知の不具合が多数修正されていることが一般的です。
Windows:time.windows.comとの時刻同期を確認・設定する
Windowsで日付や時刻の設定が頻繁に変わってしまう場合は、まずタイムゾーンの設定と、外部タイムサーバーとの時刻同期の状態を確認しましょう。Windows 10であれば、「コントロールパネル」→「時計、言語、および地域」→「日付と時刻」から現在の設定を確認できます。下記の例では、タイムゾーンとしてUTC+01が指定され、夏時間が有効になっています。

ヒント:tzutilコマンドやPowerShellを使えば、タイムゾーンをコマンドラインから設定・確認することも可能です。
コンピューターがADドメインに参加していない場合は、外部の時刻ソース(NTPサーバー)との同期設定を確認します。「日付と時刻」ダイアログの「インターネット時刻」タブを開き、time.windows.comとの自動同期が有効になっていることを確認してください。

ADドメイン参加コンピューターの時刻同期トラブルシューティング
コンピューターがActive Directoryドメインに所属している場合は、ADドメインにおける時刻同期の仕組みを理解しておくことが重要です。
Active Directoryドメインでは、以下のような階層的な時刻同期スキームが採用されています。
- FSOロールのひとつであるPDCエミュレーターを保持するフォレストルートのドメインコントローラー(DC)が、ドメイン内の他のすべてのDCにとっての時刻ソースとなる。
- その他のDCはPDCと時刻を同期する。
- 一般のドメインメンバー(サーバーおよびワークステーション)は、ADトポロジに基づき、最も近い利用可能なドメインコントローラーと時刻を同期する。
ルートPDCは、外部の時刻ソースと同期することも、自身を時刻ソースとすることもできます(デフォルトでは後者)。
PDCロールを保持するドメインコントローラーを特定するには、次のコマンドを実行します。
netdom /query fsmo
PDC上で外部NTPサーバーとの時刻同期を構成するには、以下のコマンドを使用します。
まず、外部の時刻ソースを指定します。
w32tm /config /manualpeerlist:"0.nl.pool.ntp.org,0x1 1.nl.pool.ntp.org,0x1 2.nl.pool.ntp.org,0x1 3.nl.pool.ntp.org,0x1"
続いて、このDCをクライアントにとっての信頼できる時刻ソースとして宣言します。
w32tm /config /reliable:yes
Windows Timeサービス(W32Time)を再起動し、DCの時刻をnl.pool.ntp.orgのNTPサーバーと同期させます。
net stop w32time && net start w32time
同期先のソースとステータスは次のコマンドで確認できます。
w32tm /query /peers
手動で同期を即時実行する場合はこちらです。
w32tm /resync /rediscover
デュアルブート環境でWindowsとLinuxの時刻がずれる問題
1台のコンピューターにWindowsとLinuxという2つのOSをデュアルブート構成でインストールしている場合にも、固有の問題が発生することがあります。片方のOSからもう片方へ起動を切り替えたとき(Windowsの後にLinuxを起動したときなど)、実際の時刻より数時間進んだり遅れたりする現象です。
これは、WindowsとLinuxでBIOSが保持する時刻の扱い方が異なるために起こります。両者はUTCとlocaltime(ローカル時刻)という2つの異なる形式を使用しているのです。
GNU/Linux系OS(Mac OS Xを含む)は、BIOSの時刻がUTC(GMT)形式であると想定しています。そのため起動時に、Linuxはユーザーが選択したタイムゾーンのオフセットを加算(または減算)してUTC時刻を変換します。例えば、タイムゾーンがUTC+2のアテネの現地時刻を得るには、2時間を加算します。
一方、WindowsはBIOSの時刻がlocaltime形式で保存されているものと認識しています。タイムゾーンを変更したり外部ソースと時刻を同期したりすると、WindowsはBIOS側のローカル時刻にもそれに応じた変更を加えます。ところがLinux(筆者の環境ではUbuntu)は、BIOSの時刻がUTC形式だと判断してタイムゾーンのオフセットをさらに加算してしまうのです。これが、OSを切り替えるたびに時刻がずれる原因です。
この問題を解決するには、RealTimeIsUniversalレジストリ値を設定して、Windows側にUTC時刻を使用させます。
reg add "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f

ヒント:64ビット版Windowsでは、DWORDではなくQWORD型の値を作成する必要があります。
reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
また、時刻更新のたびにWindowsがUTC時刻をローカル時刻へ書き戻してしまうのを防ぐため、インターネット時刻との自動同期を無効化します。
sc config w32time start= disabled
その後、Windowsを再起動してください。
逆に、Linux側をローカル時刻ベースに変更する方法もあります。Ubuntu 15.04以降では、timedatectlツールが利用できます。
timedatectl set-local-rtc 1

Windows Server稼働のHPEサーバー:再起動後のシステム時刻のずれ
Windows Server 2008 R2 / 2012 R2が稼働するHPE DL/ML Gen9サーバーでタイムゾーンを変更した際、あるリモート顧客が興味深い問題に遭遇しました。調査の結果、HP ProLiant Gen9サーバー(および一部のHP ProLiant DL580 Gen8サーバー)でシステム時刻やタイムゾーンを変更すると、その変更が保存されず、再起動後に元の時刻へ戻ってしまうことが判明しました。この問題は、Windows ServerがLegacy(BIOS)モードで起動しているサーバーでのみ発生し、ネイティブUEFIブートの環境では時刻変更の問題は見られませんでした。
システムログには、次のようなイベントが記録されていました。
The system time has changed to 2019-01-29T12:12:28.500000000Z from 2019-01-29T13:12:27.923115700Z.
Change Reason: System time synchronized with the hardware clock.
この問題への正式な解決策として、HPE(HP)はROMバージョンを1.5以降へ更新することを推奨しています。ROM-Based Setup Utility(RBSU)のこのバージョンには、時刻リセットの不具合は存在しません。
また、回避策として、BIOSがWindowsに対してローカル時刻ではなくUTCのシステム時刻を渡すように設定する方法もあります。その場合も、前述のとおり、レジストリキー HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation 配下に、名前がRealTimeIsUniversal、値が1のレジストリ値を作成します。
-
Windows 10の無限再起動ループを解決する7つの対処法
パソコンの電源を入れてもWindowsが正常に起動せず、ログイン画面が表示される前に再起動を繰り返す——この症状は非常に分かりやすいものです。これが「無限ブートループ(再起動ループ)」と呼ばれる状態です。過去のWindowsでは、この問題が発生するとOSの完全な再インストールが必要になることもありました。しかし、Windows 10はMicrosoftの設計のおかげで、比較的簡単にこの問題を解決できるようになっています。 Windows 10の無限再起動ループを修正する方法 方法1:周辺機器をすべて取り外す まず最初に試したいのが、プリンター、USBメモリ、スピーカーなど、パソコンに接続して
-
Windows 11で時計の時刻がずれる・おかしいときの直し方7選【徹底解説】
Windows 11にアップグレードした後、デバイスの時計が正しい時刻を表示しなくなって困っていませんか?ご安心ください。この記事では、PCの時計が同期されない問題を解決するためのさまざまな方法をご紹介します。Windows 11の時計が正常に動作しなくなる原因はいくつか考えられます。 この問題は、日付と時刻の設定の変更、DLLファイルの再登録、インターネット時刻サーバーの切り替え、コマンドプロンプトを使った時刻の同期などを行うことで、素早く解決できます。 本記事では、Windows 11で時計の時刻をすぐに同期させるための詳細な手順を解説します。以下に挙げるいずれかの方法を使えば、時刻がず