我有一台联想 S10,它运行 Arch Linux 作为唯一的操作系统。由于一些我至今无法弄清楚的奇怪原因,它一直在浪费时间。不过在 BIOS 中它有正确的设置。
在 Linux 下,时区设置正确,几个小时内一切都运行正常。如果我设置正确的时间并重新启动计算机,它将显示正确的时间设置。但是,如果我关闭计算机并在几个小时后重新打开它,时间又会变得一团糟。
我尝试使用 NTP,虽然它可以暂时解决问题,但它并不总是一种选择,因为它并不总是连接到互联网。
关于如何永久解决此问题有什么想法吗?
答案1
确保您的 NTP 客户端也设置硬件时钟(通过 BIOS),而不仅仅是 Linux 软件时钟。
hwclock
您可以使用程序(位于/usr/sbin
或)检查硬件时钟,/sbin
并使用命令将其与软件时钟进行比较date
。
无聊的解释:
您的计算机中有一个小芯片,称为“实时时钟”或 RTC。该时钟由电池供电,并像手表一样计时。计算机启动时,时钟会被读取,这就是您的操作系统在启动时知道时间的方式。但在第一次读取之后,操作系统不必使用 RTC - 它可以继续自行计时(秒、小时等)。每当用户询问时间时,它都可以报告自己的时间(而不是 RTC 报告的时间)。
当 RTC 没有正确时间时,就会出现棘手的情况。当您尝试更正时钟时,实际上是操作系统为您执行了此操作。操作系统可能仅更新其内部软件时钟。在这种情况下,一旦您重新启动,错误的时间将再次从 RTC 加载。我仍然记得 DOS 时代的这种情况。您必须进入 BIOS 才能更改时钟。呃。
无论如何,棺材上的最后一颗钉子是:从 RTC 读取的时间只是一个数字。操作系统可以更改该数字。例如,它可能希望在该数字上添加 3,600,000 毫秒(1 小时),以便 GMT+1 用户感到舒适。其他时候,时区设置有些问题。
无论如何,在操作系统中设置硬件时钟往往可以解决这个问题,因为它经过相同的过滤过程。因此,即使您的操作系统将 RTC 增加 5 分钟,它也会在更新 RTC 之前减去 5 分钟。
祝你好运!
答案2
有一个设置问题会让一些人困惑,而这可能会导致此问题。该问题是“此系统的 BIOS 时间是否设置为 UTC”。如果您对此选择“是”,则系统X
在启动时将始终关闭小时数,因为它会获取 BIOS 时间并减去X
小时数。
如果是这种情况,您必须检查您的发行版的文档以了解如何更改此设置。
答案3
听起来好像时钟运行的电池没电了。我觉得如果你更换电池,关机后时间还会保持。
由于您在评论中提到 BIOS 的时间正确,所以这可能是处理器问题,这也说得通。当您将处理器插入墙壁电源和不插入墙壁电源时,处理器上的计时是不同的。如果您使用电池,则可能由于处理器的滴答声不同,所以一秒钟的计算方式不同。如果它仍在保修期内,我会给支持部门打电话询问。
答案4
从论坛上的帖子数量来看,时钟运行时间不正确似乎是 ArchLinux 的一个常见问题,像这个。
问题似乎出在/var/lib/hwclock/adjtime
文件上。引用上述论坛帖子:
查看 /var/lib/hwclock/adjtime。如果第一行的第一个数字很大(大于 10 左右),请删除此文件,重新设置时钟,然后重新启动。(文件将使用较小的数字重新创建。)
这个数字应该显示您的硬件时钟每天偏移多少秒。当软件时钟和硬件时钟尚未正确设置时,很容易意外地将软件时钟与硬件时钟进行比较,这会使系统误以为您的硬件时钟非常不准确,并且补偿过度。
如果这不能解决你的问题,那么可能是休眠问题。当你说
如果我关闭计算机并在几个小时后重新打开,时间又会变得混乱。
您是在关闭系统还是让其休眠?如果是后者,那么我猜想时钟是从您让上网本休眠时开始恢复的。如果时钟总是运行缓慢,那么这可能是答案。
如果你有挂起和恢复脚本,它们应该在挂起期间将系统时间存储到硬件时钟,然后在恢复时从硬件恢复系统时间。你可以使用hwclock
命令。
我不了解 ArchLinux,所以我不知道这个脚本在哪里,但你可能会找到ArchLinux Wiki 上的这篇文章很有帮助。