Ubuntu与Windows双系统问题

解决 Linux 和 Windows 双启动带来的时间同步问题

问题发现

本子上装的是Window 10(win7升级)和Ubuntu GNOME 14.04的双系统, 一直以来都发现双系统切换后系统的时间显示有问题

每次都发现进入ubuntu系统的时间显示不正确, 只有再重新使用网络对时之后系统的时间才正常

但是问题不仅于此, 切环回window之后, 会发现系统的时间也不正常了, window一直是网络自动对时的啊, 然后无语, 只能再次联网强制同步网络时间.

如此以来好几个星期了老是没顾得上解决, 今天难得有空, 就花时间整了整.

问题原由

原因发现

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时显示时间又变成了8+8=16点

什么是UTC时间

GPS的两种时间区别

GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间

如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时,以此计算即可.

UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时,以1999年1月1日0000UTC为例,UTC时间是零点,北京时间为1999年1月1日早上8点整。

格林尼治时间GMT(Greenwich Mean Time)

GMT(Greenwich Mean Time)是格林尼治平时

由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)

简单说吧,格林尼治标准时(GMT)是格林尼治天文台通过天文学观测将每日太阳穿过本初子午线的瞬间定为正午时刻,并以此来制定时间,所以格林尼治标准时是“天文学时间”,随着科技的进步,人们发现该时间不够精确,因为地球自转的速度是不均衡的,而且自转速度也会越来越慢,所以不再使用。

世界协调时间(Universal Time Coordinated,UTC)

UTC由国际无线电咨询委员会规定和推荐,并由国际时间局(BIH) 负责保持的以秒为基础的时间标度.

而协调世界时(UTC)是基于原子物理学的特性,将在海平面上实现的”原子时秒”定义为国际标准时的时间单位,而原子时秒是这样定义的:铯-133 原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间 。所以,协调世界时属于”原子物理时间”,它更加精确,基本不会产生误差。与本初子 午线(经度 0°)上的平均太阳时等效,

原子时与以往的计时系统不同,它非常精确并且不以某地的平均太阳时为基准,但是遇有地球自转速度不均匀,原子时与世界时之间的时差便日积月累,因此,UTC 会在一段时期后加上正或负的闰秒来补偿。因此协调世界时与国际原子时(TAI) 之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS) 负责决定何时加入闰秒。

由于Window和Linux两个系统设定时间时以主板CMOS内的时间为依据,但却有不同的时间计算标准。所以导致了系统时间的纠纷问题

WINDOWS的时间和时区

Windows操作系统直接把CMOS时间认定为当前显示时间,不根据时区转换。这样每调整一次系统时区,系统会根据调整的时区来计算当前时间,确定后,也就同时修改了CMOS内的时间(即每调整一次时区,设置保存后,CMOS时间也将被操作系统改变一次,注意不同操作系统调整时间后,也会同时改变CMOS时间,这一点是共通的)。

LINUX的时间和时区

Linux和苹果操作系统以当前主板CMOS内时间做为格林威治标准时间,再根据系统设置的时区来最终确定当前系统时间(如时区设置为GMT+08:00北京时间时以及当前CMOS时间为03:00,那么系统会将两个时间相加得出显示在桌面的当前系统时间为11:00)

问题解决

解决的办法有两个

  • 一个是让Windows使用Ubuntu的时间管理方式,就是启用UTC(世界协调时)

  • 另一个就是让Ubuntu按照Windows的方式管理时间,就是让Ubuntu禁用(世界协调时)

个人建议第二种,因为通常Windows是主系统,不推荐对Windows进行这种修改,不过我还是都介绍一下:

在Windows下启用UTC

点击 Windows 系统中的开始菜单,然后搜索 regedit。

点击打开,然后你会看到类型下面的内容。这就是注册表编辑器。

在左边的导航菜单,导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

在右边窗口,右键点击空白位置,然后选择 New >> DWORD(32 bit) Value

之后,你会新生成一个条目,而且这个条目默认是高亮的。将这个条目重命名为 RealTimeIsUniversal 并设置值为 1

所有的配置就完成了,下次重启,就不会再有时间同步问题了。

在Ubuntu下关闭UTC

这个用这个方法是我比较推荐的:按Ctrl+Alt+T调出终端,输入:

1
sudo vim /etc/default/rcS11

找到UTC=yes这一行,改成UTC=no

保存即可,时间修改立即生效。这样就可以解决Windows与Ubuntu双系统时间同步问题了

Ubuntu双系统无法挂载Windows10 硬盘的解决方法

我的电脑是在Windows 10下安装的Ubuntu 16.04双系统,今天进入Ubuntu系统访问Windows 10 磁盘,出现如下错误:

1
2
3
4
5
Error mounting /dev/sdb2 at /media/zdaiot/WinOS: Command-line `mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000" "/dev/sdb2" "/media/zdaiot/WinOS"' exited with non-zero exit status 14: Windows is hibernated, refused to mount.
Failed to mount '/dev/sdb2': Operation not permitted
The NTFS partition is in an unsafe state. Please resume and shutdown
Windows fully (no hibernation or fast restarting), or mount the volume
read-only with the 'ro' mount option.

可能原因:上一次使用Windows 10后使电脑睡眠,没有完全关机,这次开机直接进入Ubuntu系统,访问Windows 10磁盘报错。

解决方法:

在终端输入如下命令,查看分区挂载情况

1
sudo fdisk -l

修复挂载错误的相应的分区,如提示中的/dev/sda2,输入:

1
sudo ntfsfix /dev/sda2

但是又出现了下面问题:

1
2
Windows is hibernated, refused to mount.
Remount failed: Operation not permitted

这是因为Windows在休眠的问题,解决方法为:

1
2
3
4
sudo apt install ntfs-3g
cd /media/zdaiot/
sudo mkdir WinOS
sudo mount -t ntfs-3g -o remove_hiberfile /dev/sdb2 /media/zdaiot/WinOS

也就是移除windows10的休眠文件,这不会对windows造成损伤。/dev/sdb2为windows所在的分区,而/media/zdaiot/WinOS为要挂载的节点。

参考

How do I mount a hibernated NTFS partition? [duplicate]

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道