首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >必须将CMOS时钟设置为本地时间(由于DOS双引导),timedatectl或hwclock似乎一直在将CMOS (硬件)时钟设置为UTC!

必须将CMOS时钟设置为本地时间(由于DOS双引导),timedatectl或hwclock似乎一直在将CMOS (硬件)时钟设置为UTC!
EN

Unix & Linux用户
提问于 2016-02-04 19:29:42
回答 3查看 2.3K关注 0票数 2

这太疯狂了。

我有一个双引导系统,一个操作系统是FreeDOS (它除了本地时间没有能力处理CMOS时钟),另一个是Linux 17。

这个系统的使用方式是,我们坐在Linux中等待“触发器”(软件触发器)开始测试。测试是在FreeDOS下完成的,所以脚本在Linux中设置了所有内容,然后将系统设置为引导FreeDOS,然后运行测试,然后重新引导到Linux。这种情况从每几分钟发生一次到每隔几天发生一次。

我们注意到,有时钟会被完全弄乱。看来我们进入了一个循环:“将CMOS时钟设置为UTC;加载CMOS时钟,假设它是本地时间(bam,提前8小时);将CMOS时钟设置为UTC (再增加8小时!);重复”。

这是一个绝对的要求(嗯,绝对希望),在这两个系统中时钟都是正确的,不管我们从一个系统引导到另一个系统的频率有多高或者很少。

我在Linux端设置了NTP,它通常运行得很好。

显然我正处于11分钟的状态。

以下是将hw (CMOS)时钟设置为本地时间,然后等待11分钟并再次查看后发生的情况:

代码语言:javascript
复制
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时间!*请让它停止*

我甚至试着安装假时钟,这种情况还是会发生的。我甚至将/sbin/hwclock重命名为/sbin/real,以使内核不再使用该死的CMOS。

回顾:我们的目标是让时间在FreeDOS和Linux中都能发挥作用。

我不在乎这是否意味着Linux将CMOS时钟设置为UTC,然后在关机时将其恢复到本地时间,或者是否可以强制Linux将其设置为本地时间而不是UTC。或者,如果我能让Linux完全忽略CMOS时钟(这就是为什么我安装了fake_hwclock -我希望这样做。(没有)。我不在乎怎么做,我只需要在Linux关闭后将CMOS时钟设置为正确的本地时间(以便FreeDOS获得正确的时间)。(由于涉及太大的原因,不可能在FreeDOS下运行网络,所以我可以使用ntp或脚本或其他什么东西来自动设置时间。让“转到FreeDOS脚本”编写一个脚本,在FreeDOS下设置时间和日期是愚蠢的,但我要这么做只是为了停止与愚蠢的斗争)

我已经告诉timedatectl,CMOS时钟在本地时间。

/etc/default/rcS说:

代码语言:javascript
复制
 UTC=no

然而,每11分钟,有人(内核,我想)将CMOS时钟设置为UTC时间!尽管我明确地说这应该是当地时间。

而且,是的,自从将rcS设置为UTC=no以来,我已经(多次)重新启动了。是否还有另一个配置文件可以让内核不使用CMOS时钟,或者强制将其设置为本地时间?

更新:我发现了一些有趣的东西w.r.t。“11分钟模式”,包括reddit上的一个问题,它讨论这个问题,并指责ntp和adjtimex (内核内部,而不是可执行文件)。还没有解决方案,我即将编写一个cron作业,它每分钟运行一次,强制hw时钟回到本地时间。(我讨厌用那样的大锤,但我真的需要时间来正确从星期五到星期一!)

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2019-01-30 21:46:47

好吧,首先,我不明白为什么我被否决了这个问题。

无论如何,我终于在三年后找到了解决办法:

确保/etc/adjtime有'LOCAL‘而不是'UTC’(在我的例子中,它是文件的最后一行)。

确保/etc/hardwareclock中有“localtime”(在我的例子中,这是一个新文件,其中只有该行)。

以上操作似乎关闭了内核中的“NTP同步”标志,从而防止内核在关闭时将UTC时间写入CMOS时钟。因此,内核很可能不会在CMOS时钟中节省系统时间(我还没有验证这一点)。然而,上述2项更改似乎关闭了“11分钟模式”。

以下是‘timedatectl’的输出:

代码语言:javascript
复制
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分钟一次.)

运行具有特定选项的timedatectl有可能对上面的文件执行上面的更改,我还没有对其进行测试。

票数 2
EN

Unix & Linux用户

发布于 2016-10-23 07:25:38

man datetimectl是有帮助的

两个步骤:

  • timedatectl set-local-rtc 1 ->将CMOS设置为本地时间
  • sudo hwclock --systohc -->将本地时间复制到CMOS时钟
票数 0
EN

Unix & Linux用户

发布于 2021-10-19 08:55:05

在我的例子中,我决定在夏令时使用UTC来避免夏令问题。

在启动时,从hwclock设置系统时间是有效的,如果在/etc/default/rcS中,行存在UTC=yes

但是让hwclock --systohc工作取决于各种设置。

使用TZ=UTC0环境变量似乎是一个错误的选择,因为它覆盖了UTC中/etc/localtimedate的设置。

使用hwclock --systohc --utc将用于手动设置,但当时间由ntp设置并自动将时间存储到hwclock时会失败。

而且,reboot命令似乎用错误的时区编写hwclock。

我的/etc/default/ntpdate包含

代码语言:javascript
复制
# 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

代码语言:javascript
复制
0 0 0
0
UTC

这只会影响hwclock,并迫使它在UTC中存储/读取时间。

顺便说一句。某些系统(如Yocto/busybox)可能将文件存储在不同的位置,在我的示例中是/var/lib/hwclock/adjtime

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/259927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档