CMOS 시계는 로컬 시간으로 설정되어야 합니다(DOS 이중 부팅으로 인해). timedatectl 또는 hwclock은 CMOS(하드웨어) 시계를 UTC로 계속 설정하는 것 같습니다!

CMOS 시계는 로컬 시간으로 설정되어야 합니다(DOS 이중 부팅으로 인해). timedatectl 또는 hwclock은 CMOS(하드웨어) 시계를 UTC로 계속 설정하는 것 같습니다!

이건 미친 짓이야.

한 OS에는 FreeDOS(로컬 시간 외에는 CMOS 시계를 처리할 수 없는 기능)가 있고 다른 OS에는 Linux Mint 17이 설치된 이중 부팅 시스템이 있습니다.

시스템이 작동하는 방식은 Linux에 앉아서 "트리거"(소프트웨어 트리거)가 테스트를 시작할 때까지 기다리는 것입니다. 테스트는 FreeDOS에서 수행되었으므로 스크립트는 Linux에서 모든 것을 설정한 다음 FreeDOS를 부팅하고 테스트를 실행하도록 시스템을 설정한 다음 Linux로 다시 재부팅합니다. 이는 몇 분마다 또는 며칠마다 발생합니다.

우리는 때때로 시계가 완전히 혼란스러워지는 것을 발견했습니다. 우리는 루프에 갇힌 것 같습니다. 'CMOS 시계를 UTC로 설정하고, 현지 시간이라고 가정하여 CMOS 시계를 로드합니다(쾅, 8시간 더 빠릅니다). CMOS 시계를 UTC로 설정합니다(또 8시간 반복).

두 시스템 모두에서 한 시스템에서 다른 시스템으로 부팅하는 빈도 또는 드물더라도 시계를 정확하게 유지하는 것은 절대적인 요구 사항입니다(절대적인 바람).

Linux 측에 NTP를 설정했는데 일반적으로 잘 작동합니다.

아무래도 11분 모드인 것 같습니다.

하드웨어(CMOS) 시계를 현지 시간으로 설정한 후 11분 동안 기다린 후 다시 살펴보면 다음과 같습니다.

tjr2pc1 ~ # date ;timedatectl status ; sleep 660 ; date;timedatectl status
Thu Feb  4 12:03:33 MST 2016
      Local time: Thu 2016-02-04 12:03:33 MST
  Universal time: Thu 2016-02-04 19:03:33 UTC
        RTC time: **Thu 2016-02-04 12:03:33**
        Timezone: America/Phoenix (MST, -0700)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a

Warning: The RTC is configured to maintain time in the local time zone.     This
         mode is not fully supported and will create various problems     with time
     zone changes and daylight saving adjustments. If at all possible use
     RTC in UTC, by calling 'timedatectl set-local-rtc 0'.
Thu Feb  4 12:14:33 MST 2016
      Local time: Thu 2016-02-04 12:14:33 MST
  Universal time: Thu 2016-02-04 19:14:33 UTC
        RTC time: **Thu 2016-02-04 19:14:33**
        Timezone: America/Phoenix (MST, -0700)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a
-----------------

CMOS 시계가 갑자기 UTC 시간으로 변경된다는 점에 유의하세요! ****그만해 주세요***

fake-hwclock을 설치해 보았지만 이런 현상이 계속 발생합니다. 손상된 CMOS만 커널에 남겨두기 위해 /sbin/hwclock의 이름을 /sbin/real_hwclock으로 바꿨습니다.

요약하자면, 우리의 목표는 FreeDOS와 Linux 모두에서 시간을 효율적으로 사용하는 것입니다.

이것이 Linux가 CMOS 시계를 UTC로 설정한 다음 종료 시 현지 시간으로 되돌린다는 뜻인지, 아니면 어떻게든 Linux가 UTC 대신 현지 시간으로 설정하도록 강제할 수 있는지는 상관하지 않습니다. 또는 Linux가 CMOS 시계를 완전히 무시하도록 만들 수 있다면(그래서 내가 fake_hwclock을 설치했습니다. 작동하길 바랐습니다. 하지만 아닙니다). 방법은 상관없습니다. Linux가 종료된 후 CMOS 시계를 올바른 현지 시간으로 설정하면 됩니다(FreeDOS가 올바른 시간을 얻을 수 있도록). (모든 사람을 귀찮게 하기에는 너무 복잡한 이유로 FreeDOS에서는 네트워크를 실행할 수 없으므로 ntp나 스크립트 등을 사용하여 자동으로 시간을 올바르게 설정할 수 있습니다. 그리고 "Go to FreeDOS Scripting"을 만들어 FreeDOS Time에서 설정합니다. 그리고 데이트는 멍청하지만 난 단지 멍청함과의 싸움을 멈추기 위해 이것을 할 것이다)

timedatectl나는 이미 CMOS 시계가 현지 시간이라고 말했습니다 .

/etc/default/rcS설명하다:

 UTC=no

그러나 11분마다 누군가(커널인 것 같아요) CMOS 시계를 UTC 시간으로 설정합니다! 분명히 했는데도 현지 시간이어야 합니다.

그리고 그렇습니다. rcS를 UTC=no로 설정한 이후 여러 번 재부팅했습니다. 커널이 CMOS 시계를 유지하거나 강제로 로컬 시간으로 설정하도록 하는 또 다른 구성 파일이 있습니까?

업데이트: "11분 모드"에 대해 토론하고 ntp 및 adjtimex(실행 파일이 아닌 커널 내부)를 비난하는 reddit의 질문을 포함하여 "11분 모드"에 대한 몇 가지 흥미로운 점을 발견했습니다. 아직 해결책이 없습니다. 매분 실행되고 하드웨어 시계를 현지 시간으로 되돌리는 cron 작업을 작성하겠습니다. (저는 이런 큰 망치를 사용하는 것을 싫어하지만 정확한 시간이 정말 필요합니다. 최대한 빨리, 우리 시계가 완전히 엉망이기 때문입니다(한 컴퓨터의 시간은 12시간 이상 느리고(이상함), 한 컴퓨터의 시간은 7시간 앞서고, 다른 컴퓨터의 시간은 7시간 빠릅니다. 컴퓨터 시간이 7시간 빨라집니다) 금요일부터 월요일까지 거의 하루 반이나 빨라요!

답변1

글쎄요, 우선 이 질문에 대해 제가 왜 반대표를 받았는지 이해가 안 됩니다.

어쨌든, 3년 후에 마침내 해결책을 찾았습니다.

/etc/adjtime에 "UTC"가 아닌 "LOCAL"이 있는지 확인하십시오(제 경우에는 파일의 마지막 줄이었습니다).

/etc/hardwareclock에 "localtime"이 있는지 확인하십시오(제 경우에는 새 파일이고 해당 줄만 있습니다).

위의 작업을 수행하면 커널의 "NTP 동기화" 플래그가 꺼지는 것으로 나타나며, 이는 꺼졌을 때 커널이 UTC 시간을 CMOS 시계에 쓰는 것을 방지합니다. 따라서 커널은 CMOS 시계에 시스템 시간을 저장하지 않을 가능성이 높습니다(아직 확인하지 않았습니다). 그러나 위의 2가지 변경 사항은 "11분 모드"를 끄는 것으로 보입니다.

이것은 "timedatectl"의 출력입니다:

rusty@quigon2 ~ $ timedatectl
Local time: Wed 2019-01-30 14:18:53 MST
Universal time: Wed 2019-01-30 21:18:53 UTC
RTC time: Wed 2019-01-30 14:18:50
Time zone: America/Phoenix (MST, -0700)
Network time on: yes
NTP synchronized: no
RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
...blah blah...

(위의 "NTP 동기화" 메시지를 참고하세요).

NTP와 동기화하려는 경우(ntpd, rdate 또는 기타 수단을 통해) 이는 또 다른 이야기입니다. (나는 cron 작업을 사용하여 30분마다 rdate하고 hwclock --systohc...)

몇 가지 특정 옵션을 사용하여 timedatectl을 실행하면 위 파일에서 위의 변경 사항이 수행될 수 있습니다. 이에 대해서는 테스트하지 않았습니다.

답변2

man datetimectl도움이 되는

두 단계:

  • timedatectl set-local-rtc 1--> CMOS를 현지 시간으로 설정
  • sudo hwclock --systohc--> 현지 시간을 CMOS 시계에 복사

답변3

제 경우에는 일광 절약 시간 문제를 피하기 위해 hwclock에서 UTC를 사용하기로 결정했습니다.

/etc/default/rcS시작 시 이 줄이 있으면 hwclock의 시스템 시간 설정이 적용됩니다 UTC=yes.

하지만 hwclock --systohc제대로 작동하는지 여부는 다양한 설정에 따라 다릅니다. 환경 변수를
사용하는 것은 UTC 설정을 무시 하고 UTC에서도 작동하므로 잘못된 선택처럼 보입니다.TZ=UTC0/etc/localtimedate

수동 설정에 사용할 hwclock --systohc --utc수 있지만 ntp로 시간을 설정하고 자동으로 시간을 hwclock에 저장하면 실패합니다.
또한 reboot명령이 잘못된 시간대를 사용하여 hwclock에 쓰는 것 같습니다.

/etc/default/ntpdate포함

# Configuration script used by ntpdate-sync script

NTPSERVERS="de.pool.ntp.org"

# Set to "yes" to write time to hardware clock on success
UPDATE_HWCLOCK="yes"

하지만 수정/ /etc/adjtime생성 할 수 있습니다.

0 0 0
0
UTC

이는 hwclockUTC 형식으로 시간을 저장/읽는 데에만 영향을 미치고 강제합니다.

그런데. 일부 시스템(예: Yocto/busybox)의 경우 파일이 다른 위치에 저장될 수 있습니다. 제 경우에는/var/lib/hwclock/adjtime

관련 정보