Ubuntu 24.04/26.04 与 Windows 10/11 双系统时间不同步终极解决方案

问题描述

在 Windows 和 Ubuntu 双系统环境下,每次切换系统后时间都会错乱 8 小时。这是因为两个系统对硬件时钟(RTC)的理解不同:

  • Windows :默认把 RTC 当作本地时间
  • Ubuntu :默认把 RTC 当作 UTC 时间

这就导致每次切换系统,时间都会相差你所在时区的偏移量(中国是 +8 小时)。

网上很多教程只让你改 timedatectl set-local-rtc 1,但 Ubuntu 24.04 之后 systemd-timesyncd 在国内经常因为 ntp.ubuntu.com 被异常解析而失效,导致重启后时间又乱了。

本文将提供一劳永逸的解决方案,包括手动修正、硬件时钟回写、以及使用国内 NTP 服务器自动定时同步。


环境说明

系统 版本
Ubuntu 24.04 / 26.04
Windows 10 / 11

完整解决步骤

第一步:让 Ubuntu 把 RTC 当本地时间

这一步让 Ubuntu 与 Windows 的认知对齐------都把硬件时钟当本地时间。

bash 复制代码
sudo timedatectl set-local-rtc 1 --adjust-system-clock

执行后可以用下面命令验证:

bash 复制代码
timedatectl status

看到 RTC in local TZ: yes 就说明成功了。


第二步:禁用失效的 systemd-timesyncd

Ubuntu 默认的 systemd-timesyncd 使用 ntp.ubuntu.com,在国内经常被 DNS 污染或解析异常,导致时间同步失效。我们直接禁用它,换上更可靠的方案。

bash 复制代码
sudo systemctl disable --now systemd-timesyncd

第三步:安装必要工具

Ubuntu 24.04 默认不带 ntpdatehwclock,需要手动安装:

bash 复制代码
sudo apt update
sudo apt install -y ntpdate util-linux-extra

验证安装:

bash 复制代码
which ntpdate      # 应输出 /usr/sbin/ntpdate
which hwclock      # 应输出 /usr/sbin/hwclock

第四步:立即用国内 NTP 服务器精校一次时间

bash 复制代码
sudo ntpdate -u ntp.aliyun.com

如果输出类似 adjust time server 203.107.6.88 offset ...,说明同步成功。


第五步:把校正后的系统时钟回写到硬件时钟

bash 复制代码
sudo hwclock --systohc --localtime

这一步非常关键------确保硬件时钟被更新为正确时间,下次冷启动 Windows 也不会偏差。


第六步:创建自动定时同步服务

手动同步只能管一次,我们还需要让它每隔一段时间自动同步。

6.1 创建 systemd 服务文件
bash 复制代码
sudo tee /etc/systemd/system/ntpdate-sync.service << 'EOF'
[Unit]
Description=Sync system time via ntpdate (CN NTP servers)
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ntpdate -u ntp.aliyun.com ntp.tencent.com cn.pool.ntp.org
ExecStartPost=/usr/sbin/hwclock --systohc --localtime
EOF
6.2 创建 systemd 定时器文件
bash 复制代码
sudo tee /etc/systemd/system/ntpdate-sync.timer << 'EOF'
[Unit]
Description=Run ntpdate-sync every hour

[Timer]
OnBootSec=2min
OnUnitActiveSec=1h
Persistent=true
Unit=ntpdate-sync.service

[Install]
WantedBy=timers.target
EOF

说明

  • OnBootSec=2min:开机 2 分钟后执行一次
  • OnUnitActiveSec=1h:之后每隔 1 小时执行一次
  • Persistent=true:如果错过了执行时间(如关机期间),开机后立即补执行

第七步:启用定时器并重载 systemd

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now ntpdate-sync.timer

第八步:验证

查看定时器状态
bash 复制代码
systemctl list-timers ntpdate-sync.timer

预期输出类似:

复制代码
NEXT                         LEFT       LAST                         PASSED   UNIT
Sun 2026-05-03 12:05:00 CST  59min left Sun 2026-05-03 11:05:00 CST 15s ago  ntpdate-sync.timer
查看最近执行日志
bash 复制代码
journalctl -u ntpdate-sync.service --no-pager -n 10

正常日志应包含:

复制代码
Starting Sync system time via ntpdate (CN NTP servers)...
adjust time server xx:ip offset ...
Started Sync system time via ntpdate.

常见问题排查

1. 报错 status=203/EXEC

原因:systemd 找不到可执行文件。

解决

bash 复制代码
# 确认 ntpdate 已安装且路径正确
which ntpdate
# 如果无输出,重新安装
sudo apt install -y ntpdate

如果路径存在但仍报 203,可能是 systemd 安全限制导致,解除限制即可:

bash 复制代码
sudo systemctl edit ntpdate-sync.service

输入以下内容后保存:

ini 复制代码
[Service]
PrivateTmp=false
ProtectSystem=no

然后重载:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart ntpdate-sync.service

2. ntpdate 同步失败

bash 复制代码
sudo ntpdate -u ntp.aliyun.com

如果报 no server suitable for synchronization found,检查网络连接,或更换 NTP 服务器:

bash 复制代码
sudo ntpdate -u cn.pool.ntp.org
sudo ntpdate -u ntp.tencent.com

3. 切回 Windows 后时间仍差 8 小时

通常是 RTC 没被正确回写,手动执行一次:

bash 复制代码
sudo ntpdate -u ntp.aliyun.com
sudo hwclock --systohc --localtime

总结

步骤 命令 作用
对齐 RTC 认知 timedatectl set-local-rtc 1 --adjust-system-clock 让 Ubuntu 把硬件时钟当本地时间
禁用自带同步 systemctl disable --now systemd-timesyncd 停用境内失效的 timesyncd
安装工具 apt install ntpdate util-linux-extra 安装 ntpdate 和 hwclock
手动校时 ntpdate -u ntp.aliyun.com 立即同步系统时钟
回写 RTC hwclock --systohc --localtime 将系统时间写入硬件时钟
创建定时任务 systemd service + timer 每小时自动同步一次

完成以上配置后,无论是冷启动还是热切换,Windows 和 Ubuntu 的时间都将始终保持一致,彻底告别双系统时间错乱的烦恼。


一键收藏,下次装双系统直接用! 有问题欢迎评论区交流。

相关推荐
love530love4 小时前
用自然语言让 AI Agent 卸载软件 —— 以卸载 Visual Studio 2026 为例
ide·人工智能·windows·agent·visual studio·ai agent·marvis
Yang_jie_034 小时前
笔记:数据结构(顺序表)
数据结构·windows·笔记
HAPPY酷5 小时前
【ROS2】 Conda 环境搭建(命令行版)
linux·运维·python·ubuntu·机器人·conda
三十岁老牛再出发7 小时前
07.07.每日总结
c语言·windows·python
巴巴媛6668 小时前
STM32学习笔记【32.BKP + RTC】
笔记·stm32·学习
nianniannnn9 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows
吠品9 小时前
Python字典键获取的四种实用方法
stm32·单片机·嵌入式硬件
2601_9637713711 小时前
Optimizing Logistics and Transportation Sites on WordPress
前端·数据库·windows·php
Java面试题总结11 小时前
C# 源生成器使用方法
windows·ui·c#
C++ 老炮儿的技术栈11 小时前
MFC 自定义纯色居中文字进度条控件
c语言·数据库·c++·windows·算法·c·visual studio