解决Windows 10与Ubuntu 18.04双系统机器上Windows时间同步有误的问题

2019/07/13 18:39 下午 posted in  技术 comments

接前文,安装完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

参考文献

  1. 解决Windows与Ubuntu双系统时间同步问题
  2. Ubuntu 16.04 LTS与windows双系统时间同步解决方法