시작 시 시스템 시계와 하드웨어 시계 사이의 오프셋

시작 시 시스템 시계와 하드웨어 시계 사이의 오프셋

최근에 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에 대해 잘 알지 못하지만 mkinitcpioinitramfs 파일을 새로 고칠 때 사용되는 명령일 수도 있다고 생각합니다.

또한 하드웨어 시계 조정을 사용할 때마다 hwclock세 번째 줄을 업데이트하여 /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를 제거했으므로 이 문제를 해결하기 위한 두 가지 옵션이 있습니다.

  1. 알림 hwclock시간은 현지 시간으로 저장됩니다(Alan은 내가 댓글을 다시 읽을 때까지 이미 이 작업을 수행하고 있었습니다).
  2. 시스템 시계와 날짜를 수동으로 UTC로 설정하고 hwclock다시 알립니다.

옵션 1

  1. BIOS/UEFI 펌웨어에 액세스하여 시간과 날짜를 현지 시간으로 설정하세요.
  2. 다시 로그인하고 터미널에서 로그인하십시오.hwclock --systohc --localtime

옵션 2

시간이 이미 UTC로 저장되어 있으므로 이것이 가장 쉽습니다(출력을 기반으로 하지만 확실하지 않습니다).

  1. BIOS/UEFI 펌웨어에 액세스하고 시간과 날짜를 UTC로 설정합니다( hwclock -v완료 확인).
  2. 다시 로그인하고 터미널 문제를 종료하십시오.hwclock --utc
    • 추가 확인 사항:hwclock --systohc --utc
  3. 여전히 올바른 시간대가 설정되어 있는지 확인하세요.ls -l /etc/localtime

모든 것이 정상이면(옵션 2) 운영 체제는 이제 시간대 오프셋을 계산하고 사용자의 시간대에 시간을 표시하며 시스템은 시간을 UTC 형식으로 저장합니다.

임의로 선택할 수 있는

설치하다네트워크 시간 프로토콜 데몬


댓글에 응답하기

  1. 답장: 윈도우
    • 나는 입양 기간 사이인 1996년쯤에 전문대학 1학년에 입학했습니다.윈도우 3.1도착하다윈도우 95(시간이 지남에 따라 우리가 죽음이라고 부르는 것은 나 같은 사람들이 기억하지 못할 것이기 때문에 스크린샷과 함께 링크를 제공하고 있습니다).
    • 1996년에는 대부분의 PC 사용자가 컴퓨터를 다음 용도로만 사용했습니다.개인의다음과 같은 작업(광범위한 인터넷 사용 없이):
      1. 게임 플레이 - 이것은 향상된 8비트 Nintendo 게임에 더 가깝습니다. 바라보다페르시아의 왕자 1989 |. 포트 섹션을 살펴보세요.
      2. 다음 프로그램에서 문서를 작성하세요.완벽한 단어. DOS 버전은 Windows 3.1 사용자들 사이에서 가장 선호되는 버전입니다. 참고 사항: Word Perfect는 오늘날까지도 여전히 MS Office의 주요 경쟁자입니다.
  2. 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로 되돌아갑니다. 시간은 현지 시간으로 저장되기 때문에윈도우가 핵공격을 받아도, 심볼릭 링크가 이제 누락되었으며 Arch는 시간을 다르게 계산하며 표시되는 결과는 시간대 간 7시간 차이입니다(UTC+0 + UTC-7 더하기 또는 빼기).

이제 배터리에 저장된 시간과 계산된 시간 사이에 7시간의 차이가 발생합니다.By Arch Arch는 현재 UTC를 잘못 반환하는 시간대 구성을 확인하므로 Arch는 hwclockUTC로 반환되고 계산될 시스템 시간을 묻습니다. 그런 다음 Arch는 hwclock시간대가 여전히 현지 시간으로 설정되어 있으므로(Windows를 고려하여) 시간대에 대한 오프셋을 계산합니다 . MATE의 현지화 설정은 5시간(동부 표준시) 또는 7시간(산악 표준시)을 추가하도록 구성되어 있습니다.

UTC 링크를 주의 깊게 읽지 않았다면,현재 시간대의 사진을 연구하세요. 동부 표준시(19 - 12 = 7) 시간대에 있지 않은 경우 MST(산악 표준시, 뉴멕시코, 콜로라도 등)가 됩니다. AlexK의 의견에 따르면 오프셋 이후 여기에 뭔가 이상한 것이 있습니다. 17 - 12 = 5여야 합니다(EST의 경우): hwclock명령에 의해 주어진 시간에서 명령에 의해 주어진 시간을 빼면 date그 차이는 오프셋 값입니다. 그림을 사용하여 어느 시간대에 있어야 하는지 결정하고 그에 따라 조정하십시오.

조정:

  1. UTC로 설정 hwclock하고 재부팅 - 옵션 2.2 참조
  2. hwlockPC의 설정 유틸리티로 이동하여 CMOS 배터리에 저장된 시간과 날짜의 실제 값을 결정합니다( 보고되는 출력을 기반으로 Time read from Hardware Clock: 2024/02/04 21:33:01하고 Alan의 답변을 기반으로 이것이 현지 시간이라고 직감합니다. comment , 출력은 현지 시간인 "9시 30분 직후"를 확인하고 내 직감을 확인합니다.
  3. 필요한 경우 수동으로 시간을 설정하세요., 가능한 한 현재 UTC 시간 및 날짜에 가깝게(Linux는 UTC를 선호하고 Windows는 사라졌기 때문에) 재부팅합니다.
    • 위 링크에서 섹션 3.3 전체를 읽어보세요. UTC 관련 줄과 NTP 관련 줄이 문제의 원인이며 게시물을 작성했습니다.
  4. NTP 데몬 설치 - 선택 사항 참조
    • 다시 시작/다시 시작할 때마다 시간이 동기화되도록 서비스를 기본 실행 수준에 추가합니다.
  5. 이제 NTP 데몬이 설치되고 올바르게 설정되었으므로 /etc/localtime심볼릭 링크를 다시 만듭니다(그림에서 원하는 시간대 사용).hwclock

조정이 잘 되면 MATE는 올바른 현지 시간을 표시하지만 이제 해당 시간은 UTC로 저장됩니다.

답변4

어쩌면 시스템은 하드웨어 시계가 UTC(5시간 오프셋을 설명하는)가 아닌 현지 시간이라고 가정할까요? 그러나 이것이 왜 수행되는지, 설정이 어디에 있는지 잘 모르겠습니다.

합리적인 것 같습니다. 문제는: 왜?

젠투에서는 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로 다시 복사)을 제어합니다. 물론 clockRTC가 시간을 UTC 시간으로 저장할지 현지 시간으로 저장할지 여부도 제어합니다.

저는 아치 전문가는 아니지만 그곳에서 일하는 것과 비슷한 일을 하고 싶습니다.

관련 정보