很多人在电脑上安装了双系统Windows和Linux后,发现关掉Linux进入Windows后Windows系统的时间不正确.这是因为什么呢?
原因不止一个,但最常见的根因是两个系统对硬件时钟(RTC/CMOS)的约定不一致。双系统来回切换时,Windows按本地时间写入 RTC,Linux按 UTC 读写 RTC,就会在每次重启后把对方“改过”的时间再解释一遍.
概念
• 硬件时钟 RTC:主板上持续走时的时钟,关机也在走,由纽扣电池供电.系统启动时把它当作初始时间。 • 系统时钟:操作系统内存里的当前时间;启动时从 RTC 取初值,运行期根据本机计时源前进,偶尔回写 RTC。 • RTC 语义差异:Windows 传统默认把 RTC 当本地时间,Linux 默认把 RTC 当UTC。这两种语义不兼容。
常见导致错乱的场景
• 夏令时/时区差异:即使同一城市,两个系统的时区规则或 DST 数据库不同步,导致本地时间换算不一致。 • RTC 语义差异:Windows 传统默认把 RTC 当本地时间,Linux 默认把 RTC 当UTC。这两种语义不兼容。 • Windows 快速启动技术:关机事实上是一种深度休眠,内核态时间状态被保存,可能不会及时把调过的时间写回 RTC;下一个系统启动读取到“旧 RTC”,再做校时,表现为跳变。 • NTP联网校时导致表观跳变:某一系统联网后做了步进校时,切回另一系统后又做一次校时或根据 RTC 重置.
如何首选统一用 UTC时间
• 原则:让两个系统都把 RTC 当作 UTC 存储,只在各自系统里用时区规则把 UTC→本地时间显示。 • Windows 设置为使用 UTC 存储 RTC: • 以管理员身份运行cmd: reg add "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
• 确保“自动设置日期和时间/时区”开启。 • Linux 保持不变即可(或切换为 RTC=UTC):以下代码来自网络 timedatectl set-local-rtc 0 # 0 表示 RTC 以 UTC 存储
timedatectl set-ntp true # 启用网络校时(可选)
timedatectl # 检查 RTC in local TZ: no• 禁用 Windows 快速启动 • 控制面板->电源选项->定义电源按钮并启用密码保护->更改当前不可用的设置-(管理员)->关闭快速启动 • 检查时区与 DST 数据: • Windows/ Linux 都选择同一城市的时区;Linux 保持 tzdata 更新。 • 主板维护: • 更换老化的主板纽扣电池
按上述配置统一后,双系统切换一般就不会再出现时间错乱。
本文链接:https://www.kinber.cn/post/5787.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
