最近、Arch Linuxシステムを完全に更新しましたが、何らかの理由で起動時にシステムクロックがハードウェアクロックと比較して+5時間オフセットに設定されました。私は米国東部標準時(UTC-5)にいます。起動時にハードウェア時計は正しいように見えますが、システム時計は5時間高速です。
# date
Sun Feb 4 12:07:01 AM EST 2024
# hwclock --show
2024-02-03 19:07:07.691763-05:00
Mate Desktop の設定に移動し、システム時刻を正しい場所に変更しても持続しません。次回起動すると、システムクロックが5時間早くなり、上記の状況が再び発生します。
5時間オフセットは、私のタイムゾーンの設定に問題がある可能性があることを示します。システムクロックが正しいタイムゾーンを知らない(date
上記の出力に「EST」とマークされているにもかかわらず)。この問題をどのように解決できるかを知っている人はいますか?
私はArch LinuxとOpenRC(いいえsystemd) 現在 NTP を使用していません。
編集する:
出力が追加されましたhwclock -v
。私が知る限り、これらすべてが正確に見えます。したがって、問題は、起動時にハードウェアクロックでシステムクロックを設定する問題のようです。おそらく、システムはハードウェアクロックがUTC(5時間オフセットを記述する)ではなく、現地時間であると仮定しますか?しかし、なぜこれが行われるのか、設定がどこにあるのかわかりません。
# hwclock -v
hwclock from util-linux 2.37.2
System Time: 1707100379.710788
Trying to open: /dev/rtc0
Using the rtc interface to the clock.
Last drift adjustment done at 1707004842 seconds after 1969
Last calibration done at 1707004842 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2024/02/04 21:33:01
Hw clock time : 2024/02/04 21:33:01 = 1707082381 seconds since 1969
Time since last adjustment is 77539 seconds
Calculated Hardware Clock drift is 0.000000 seconds
2024-02-04 16:33:00.624087-05:00
答え1
ハードウェアクロックをUTCに設定する起動スクリプトがある可能性があります。オペレーティングシステムで検索する必要があります。
hwclock
次のようにホストがローカルタイムゾーンを有効にすることができます。
hwclock --localtime && hwclock --systohc
。
答え2
最後の変更タイムスタンプは/etc/localtime
現在のinitramfsファイルのタイムスタンプよりも最新ですか?
その場合、initramfsファイルはまだ前のタイムゾーン設定を維持し、バッテリーサポートのリアルタイムクロックモジュールでシステムクロックが設定される起動初期段階でそれを使用します。
実際のルートファイルシステムがマウントされると、システムは正しいファイルシステムを表示しますが、/etc/localtime
それは遅すぎます。システムクロックはすでに設定されています。
私はArchについてはよくわかりませんが、mkinitcpio
initramfsファイルを更新するときに使用されるコマンドかもしれないと思います。
また、ハードウェア時計調整を使用するたびに、hwclock
3 行目を更新して、/etc/adjtime
ハードウェア時計が現地時間か UTC かを示します。 initramfsのバージョンが/etc/adjtime
実際のルートファイルシステムのバージョンと同期していない場合、システム時間もオフセットされる可能性があります。
答え3
システム/BIOSクロックを希望の時間帯に設定してください。
まだWindowsを使用している場合は、次のようにレジストリを変更することをお勧めします。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001
上記のレジストリ設定は、システム時間がhwclock
詳細な出力を表示して適用した可能性があるUTC形式に設定されていることをWindowsに通知します。
Windowsをアンインストールしたので、この問題を解決するための2つのオプションがあります。
- 通知
hwclock
時間は現地時間として保存されます(Alanは私がコメントをもう一度読むまですでにこれを行っていました)。 - システムの時計と日付を手動でUTCに設定し、再
hwclock
通知します。
オプション1
- BIOS/UEFI ファームウェアにアクセスして、時刻と日付を現地時間に設定します。
- もう一度ログインして端末からログインします。
hwclock --systohc --localtime
オプション2
時間はすでにUTCとして保存されているので、これは最も簡単です(出力に基づいていますがわかりません)。
- BIOS / UEFIファームウェアにアクセスし、時刻と日付をUTCに設定します(
hwclock -v
完了確認)。 - もう一度ログインして端末の問題を終了します。
hwclock --utc
- 追加確認:
hwclock --systohc --utc
- 追加確認:
- それでも正しいタイムゾーンが設定されていることを確認してください。
ls -l /etc/localtime
すべてが正常な場合(オプション2)、オペレーティングシステムはタイムゾーンオフセットを計算し、ユーザーのタイムゾーンに時間を表示し、システムはUTC形式で時間を保存します。
任意に選択できる
インストールするネットワーク時間プロトコルデーモン
コメントに返信する
- 返信:Windows
- 私は養子縁組の間の1996年頃に専門大学の1年生に入学しました。Windows 3.1到着Windows 95(時間が経つにつれて私たちが死と呼ぶのは、私のような人々が覚えていないので、スクリーンショットと一緒にリンクを提供しています)。
- 1996年には、ほとんどのPCユーザーがコンピュータを次の目的でのみ使用しました。個人の次の作業(広範なインターネットを使用せずに):
- ゲームプレイ - これは強化された8ビットNintendoゲームに近いです。バラよりペルシャ王子1989 |。ポートセクションを見てください。
- 次のプログラムで文書を作成してください。完璧な言葉。 DOSバージョンは、Windows 3.1ユーザーの間で最も好ましいバージョンです。注:Word Perfectは、今日までまだMS Officeの主要な競争相手です。
- RE:ハードウェア時計
- 私がリストしていない他の用途もありますが、Windowsの最初のデザインにはネットワーキングが組み込まれていなかったため、インターネットやネットワーキングに関連するものは含まれませんでした。 Windowsのネットワークスタックは実際にはアドインです。上記のリンクでWindows 3.11を参照してください。このため、Windowsは世界中のすべての人に販売されているため、開発者は人々が住んでいるタイムゾーンに基づいて時間と日付を保存することを選択します。CMOSバッテリー、現地時間とも呼ばれます。
- Linuxカーネルは組み込みネットワーキングコンポーネントを使用して構築されており、Windowsはそれをアドオンとして追加します。UTCまたは協定世界時1963年から使用され、もともとは軍隊で潜水艦などの車両や軍隊間の通信を調整するために使用されました。
UTCは主にサーバーで使用されるため、Linuxのデフォルトの時間メカニズムとして選択されます。米国サーバーと米国または世界の他の地域のサーバー間で正しく通信し、ログを記録する唯一の方法は、タイムゾーンを無視することです。したがって、デフォルトは UTC です。
- 上記のレジストリハックでリセットしないと、Windowsはバージョンに関係なく、バッテリに時間をローカル時間で保存し、以前のバージョンとの互換性を維持するため、CMOSバッテリとも呼ばれるハードウェアクロックを調整する必要があります。これはアーチアップデートを実行する前は事実でしたが、
/etc/localtime
パッケージ内の正しいタイムゾーンにシンボリックリンクされて使用されているtzdata
可能hwclock
性があります--localtime
。これは私の推測だけですが、更新された場合、更新中にtzdata
シンボリックリンクが削除/交換されました。/etc/localtime
削除すると、タイムゾーンがUTCに戻ります。時間は現地時間で保存されるのでWindowsが核攻撃を受けても、シンボリックリンクが欠落しており、Archは時間を別々に計算し、表示される結果は時間帯間の7時間の差です(UTC + 0 + UTC-7加算または減算)。
これで、バッテリーに保存された時間と計算された時間の間に7時間の差が発生します。Arch Archは現在UTCを誤って返すタイムゾーン設定を確認するため、Archはhwclock
UTCに返され、計算されるシステム時間を尋ねます。その後、Archはタイムhwclock
ゾーンがまだローカル時間に設定されているため(Windowsを考慮して)、タイムゾーンのオフセットを計算します。 MATEのローカライズ設定は、5時間(東部標準時)または7時間(山岳標準時)を追加するように構成されています。
UTCリンクを注意深く読んでいない場合は、現在のタイムゾーンの写真を調べる。東部標準時(19 - 12 = 7)時間帯にない場合はMST(山岳標準時、ニューメキシコ、コロラドなど)になります。 AlexKのコメントによると、オフセット後にここに何か奇妙なことがあります。 17 - 12 = 5でなければなりません(ESTの場合):hwclock
コマンドによって与えられた時間からコマンドによって与えられた時間を減算すると、date
その差はオフセット値です。画像を使用してどの時間帯にすべきかを決定し、それに応じて調整します。
調整:
- UTCに設定
hwclock
して再起動する - オプション2.2を参照 hwlock
PCの設定ユーティリティに移動し、CMOSバッテリーに保存されている時間と日付の実際の値を決定します(報告された出力に基づいて、Time read from Hardware Clock: 2024/02/04 21:33:01
Alanの答えに基づいてこれが現地時間であると直感します。comment、出力は現地時間です。市30分直後」を確認し、私の直感を確認します。- 必要に応じて手動で時間を設定してください。、可能な限り現在のUTCの時間と日付に近い(LinuxはUTCを好み、Windowsは消えたため)再起動します。
- 上記のリンクのセクション3.3全体を読んでください。 UTC関連の行とNTP関連の行が問題の原因であり、投稿を作成しました。
- NTPデーモンのインストール - オプションリファレンス
- 再起動/再起動するたびに時間が同期されるように、サービスをデフォルトの実行レベルに追加します。
- NTPデーモンがインストールされ、正しく設定されているので、
/etc/localtime
シンボリックリンクを再作成します(図の目的のタイムゾーンを使用)。hwclock
調整がうまくいけば、MATEは正しい現地時間を表示しますが、その時刻はUTCとして保存されます。
答え4
おそらく、システムはハードウェアクロックがUTC(5時間オフセットを記述する)ではなく、現地時間であると仮定しますか?しかし、なぜこれが行われるのか、設定がどこにあるのかわかりません。
合理的なようです。問題は:なぜ?
GentooではOpenRCを使用するときhwclock
。これはスタートアップサービスに追加することができ、起動時にRTCにシステムクロックを設定し、シャットダウン時にRTCにシステムクロックを書き換えることを処理します。
/etc/conf.d/hwclock
このinitスクリプトには、いくつかの構成設定を含む構成ファイルがあります。
# Set CLOCK to "UTC" if your Hardware Clock is set to UTC (also known as
# Greenwich Mean Time). If that clock is set to the local time, then
# set CLOCK to "local". Note that if you dual boot with Windows, then
# you should set it to "local".
clock="UTC"
# If you want the hwclock script to set the system time (software clock)
# to match the current hardware clock during bootup, leave this
# commented out.
# However, you can set this to "NO" if you are running a modern kernel
# and using NTP to synchronize your system clock.
#clock_hctosys="YES"
# If you do not want to set the hardware clock to the current system
# time (software clock) during shutdown, set this to no.
#clock_systohc="YES"
# If you wish to pass any other arguments to hwclock during bootup,
# you may do so here. Alpha users may wish to use --arc or --srm here.
clock_args=""
ここで、clock_hctosys
フラグは開始操作(RTCでシステムクロックを設定する)を制御し、フラグは終了操作clock_systohc
(システムクロックをRTCにコピーし直す)を制御します。もちろん、clock
RTC が時刻を UTC 時刻として保存するのか、ローカル時刻として保存するのかを制御します。
私はアーチの専門家ではありませんが、そこで働くのと似たようなことをしたいと思います。