我在同一台机器上同时运行Ubuntu和其他操作系统(如Windows),遇到由于不同的RTC处理方式导致的时间不同步问题
使用下面的指令查看系统时间状态,Local time实际上是RTC time
sudo timedatectl status
Windows默认假设RTC是以本地时间为基准设置的,而大多数Linux发行版(包括Ubuntu)则通常配置成认为RTC保存的是UTC协调世界时15。这种差异会导致每次切换操作系统后看到的时间不一致。
下面我将调整Ubuntu以匹配Windows的RTC设置:
方法一:通过timedatectl
设置
在Ubuntu 24.04中,推荐使用timedatectl
命令来调整RTC的行为,而不是传统的hwclock
工具。具体操作如下:
-
打开终端并输入以下命令来让Ubuntu将RTC视为本地时间:
sudo timedatectl set-local-rtc 1 --adjust-system-clock
这个命令会告诉Ubuntu将RTC视为保存的是本地时间而非UTC,并且还会根据这个设定调整系统时钟。
-
验证更改是否生效:
timedatectl status
在输出中,能看到相关的RTC设置已经更新为本地时间。
方法二:修改GRUB加载器设置
另一种更推荐的做法是仅改变GRUB加载器如何解释RTC数据而不影响其他任何地方。这样可以在不影响Ubuntu内部逻辑的前提下实现与Windows相同的时间表示法:
-
编辑GRUB配置文件
/etc/default/grub
:sudo nano /etc/default/grub
-
添加或修改这一行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash clock=tz=localtime"
-
更新GRUB并将改动应用:
sudo update-grub reboot
这种方法的好处是它不会改变整个系统的全局行为,而是仅仅改变了GRUB加载器如何解释RTC数据。
注意事项
- 如果选择方法一,请注意这会影响所有基于该RTC运行的操作系统,因此如果除了Windows之外还有其他的Linux发行版也依赖于相同的RTC,则需要确保它们也都被正确配置。
- 方法二更适合那些希望最小化对现有系统影响的情况,因为它只修改了启动加载器的行为,而没有改变底层的RTC配置。