接前文,安装完Windows 10与Ubuntu 18.04双系统之后,发现个问题:每次进Ubuntu后,下次再进Windows发现时间总是异常的差了8小时。后来搜了下资料发现了问题并解决。现简单总结下解决方式。
注意:本文首次撰写于2019-07-13,最近修改时间为2019-07-13,请注意相关程序的可用性与安全性。
问题原因
Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的。
Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8),所以如果你的Ubuntu位置是中国的话你系统显示的时间就是BIOS时间+8小时, 假如现在是早上8点,那么你Ubuntu会显示8点。
而当你切换到Windows系统时就会发生时间错乱,因为Windows会认为BIOS时间就是你的本地时间,结果就是Windows显示时间为0点。而假如你在Windows下同步时间,恢复显示为8点,这时BIOS时间也会被Windows改写成8点。
问题解决
Ubuntu 16.04(不含)以前的系统,可以编辑下面的文件通过调整Ubuntu关闭UTC功能。
sudo vim /etc/default/rcS
找到UTC=yes
这一行,改成UTC=no
,保存即可,时间修改立即生效。
Ubuntu 16.04及以后的系统,此文件已经没有了,我们通过安装ntpdate
更新时间并写入BIOS来解决这个问题。
sudo apt-get install -y ntpdate
sudo ntpdate time5.aliyun.com
安装并更新时间后,接下来写入硬件:
sudo hwclock --localtime --systohc
不过,后面这个解决方案对于18.04好像有点特别。使用后面ntpdate
的解决方案隔一段时间问题又会发生。再次执行上面的命令就好了,但是这不是长久之计。秉着一劳永逸的原则,将上面的内容做成脚本设为系统服务,并设置开机启动执行,这样就可以解决这个问题了。
脚本内容,我的放置位置是/etc/timeUTC.sh
#!/bin/bash
sudo ntpdate time5.aliyun.com
sudo hwclock --localtime --systohc
建立文件/etc/systemd/system/timeUTC.service
,写入如下内容:
[Unit]
After=syslog.target network.target
[Service]
ExecStart=/etc/timeUTC.sh
[Install]
WantedBy=multi-user.target
依次执行如下命令,使其自启生效:
sudo systemctl daemon-reload
sudo systemctl enable timeUTC.service
运行命令并查看命令情况,如果没有failed
报错,显示inactive
(即正常执行并退出脚本)即为正常:
sudo systemctl start timeUTC
sudo systemctl status timeUTC