Linux 中的硬件和系统时钟均错误

Linux 中的硬件和系统时钟均错误

我双启动我的笔记本电脑并安装了 EndeavourOS(其他操作系统是 Windows 10)

因此,我的硬件和系统时钟都显示错误的时间。

我已经设置了正确的时区(UTC+5:30),但它仍然显示错误的时间。

timedatctl

 Local time: Sat 2023-02-25 09:12:46 IST

 Universal time: Sat 2023-02-25 03:42:46 UTC
 
 RTC time: Sat 2023-02-25 03:42:46
 
 Time zone: Asia/Kolkata (IST, +0530)
 
 System clock synchronized: no
          
 NTP service: active
      
 RTC in local TZ: no

这是我的终端的快照,它显示了错误的时间,甚至 UTC 时间约为 3:59,而在撰写本文时,本地时间为 9:29。

我查看了各个网站,但找不到解决此问题的方法。

任何帮助,将不胜感激!

答案1

所以你的 UTC 时间大约相差 17 分钟。

System clock synchronized: no
NTP service: active

尽管 NTP 服务处于活动状态,但System clock synchronized: no表示它尚未成功从配置为联系的 NTP 服务器获取准确的时间信息。

您应该查看实际 NTP 服务的状态和配置。它可能是字面意思ntpd,或者chronyd,或者systemd-timesyncd。 (请注意,这systemd-timesyncd是一个 SNTP 客户端,与其他两个客户端不同,它们都是全功能的 NTP 客户端。)

要查询 的状态ntpd,请使用ntpq -np.

如果有的chronyd话,请使用chronyc -n sources

用来。systemd-timesyncdtimedatectl show-timesync --all

这些命令的输出应显示 NTP 同步服务是否配置了任何 NTP 服务器,以及是否已设法联系其中任何服务器。我希望您会发现当前没有配置 NTP 服务器,或者服务器无法访问它们。

的配置ntpd通常位于/etc/ntp.confchronyd的多个文件和子目录中/etc/chrony/,并且systemd-timesyncd配置于/etc/systemd/timesyncd.conf

由于您的系统时钟与实际时间相差太远,时间同步服务器可能无法自动同步,以避免出现较大的时间跳跃。如果是这样,您可能必须使用适当的选项手动启动同步一次,以允许进行较大的时间调整:对于 ntpd,它将是ntpd -qg.

答案2

因此,我的硬件和系统时钟都显示错误的时间。

嗯。这似乎不太可能。然而,如果其他操作系统是 MS-Windows,这也许可以解释一些差异。当 PC 附带 MS-DOS(甚至 DR-DOS)时,硬件时钟设置为本地时间/MS-DOS 不识别时区。 MS-DOS 的幽灵仍然存在于现代 MS-Windows 中 - 可以将其配置为保持硬件时钟与本地时区或 UTC 同步。然而,由于您的计算机似乎只晚了 15 分钟,因此您的其他操作系统似乎在硬件时钟上使用 UTC。

OTOH,你已经用“arch-linux”标记了它,并说你安装了 EndeavourOS - 所以想必这两个操作系统都运行不同版本的 Linux。我认为当你在 Arch Linux 中启动时,它现在会显示出同样的差异。

Linux 仅在启动时或决定将硬件时钟与其自身计算出的时间同步时才读取硬件时钟。间隔 15 分钟而几个月不睡觉也是不太可能的。

最可能的原因是您的硬件时钟完全错误。您可以使用命令或通过 ntp 设置系统时钟(然后 Linux 在运行时使用)date。完成此操作后,您需要设置硬件时钟 - 这是通过 hwclock 命令完成的。

您可以在本地计算机的手册页中找到有关使用 date 和 hwclock 命令的说明。

答案3

该问题可能是由于 Linux 和 MS Windows 的时间假设不同造成的。默认情况下,MS Windows 假定时间存储为本地时间,而 Linux 假定时间存储为 UTC 时间。因此,当您进行双引导时,您的操作系统之一将显示错误的时间。解决方案可能是,要么让 Linux 使用本地时间;要么让 Linux 使用本地时间。或者让 MS Windows 使用 UTC。第二个选项可能并不容易,我不知道如何在该操作系统中更改这些内容。但是,如果你想让 Linux 使用本地时间,你可以通过以下命令来实现:

timedatectl set-local-rtc 1 --adjust-system-clock

此后,如果您运行向我们展示的命令,timedatectl 您将看到略有不同的输出:“RTC in local TZ: yes”

答案4

虽然其他答案确实有效,但它是受到推崇的将Linux和Windows设置为使用UTC,某些版本的Windows如果设置为同步在线时间,则将硬件时钟恢复为本地时间。 (Windows 默认使用当地时间

可以通过简单的注册表修复来完成:打开注册表并将十六进制值regedit添加到注册表中 DWORD1HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

您可以从管理员命令提示符执行此操作

C:\>reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

或者,创建一个包含以下内容的 *.reg 文件(在桌面上),然后双击将其导入注册表:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=dword:00000001

如果 Windows 由于 DST 更改而要求更新时钟,那就让它更新吧。它将按预期保留 UTC 时钟,仅更正显示的时间。

设置此值后,可能需要更新硬件时钟和系统时钟时间。

如果您遇到时间偏移问题,请尝试重新安装 tzdata,然后再次设置时区

例子

timedatectl set-timezone America/Los_Angeles

来源

相关内容