本文适用于 UEFI 启动模式下的 Windows + Linux 双系统,以 Kubuntu 为例,一次性解决三个最常见问题:
- 开机 GRUB 出现多余、无效的 Windows/EFI 启动项
- 设置默认启动系统,重启/更新内核后不失效
- 双系统切换后时间快/慢 8 小时
一、环境说明
- 系统:Windows 11 + Kubuntu(适用于所有 Ubuntu 系发行版)
- 启动方式:UEFI(非传统 Legacy BIOS)
- 问题来源:多硬盘/多 ESP 分区导致 os-prober 扫出冗余启动项、系统时间标准不统一
二、屏蔽 GRUB 中多余的 EFI 启动项
GRUB 会自动扫描所有 EFI 分区,常会出现旧系统、无效 Windows 项,我们通过 UUID 精准屏蔽。
1. 查看要屏蔽的分区信息
终端执行,替换为你要屏蔽的分区(如 /dev/nvme0n1p1):
sudo blkid /dev/nvme0n1p1
记录下:
UUID=";A482-5A9F";- 分区路径
/dev/nvme0n1p1
2. 写入 GRUB 屏蔽规则
echo ';GRUB_OS_PROBER_SKIP_LIST=";A482-5A9F@/dev/nvme0n1p1";'; | sudo tee -a /etc/default/grub
3. 更新 GRUB 生效
sudo update-grub
执行后输出中不再出现该分区,即屏蔽成功。
三、永久设置默认启动系统(不会重启失效)
很多人设完默认系统,几次重启又跳回 Linux,原因是启动项名称不匹配。
1. 获取真实 Windows 启动项名称
sudo grep -i ";menuentry.*Windows"; /boot/grub/grub.cfg
示例输出:
menuentry ';Windows Boot Manager (on /dev/nvme0n1p3)'; ...
2. 修改 GRUB 默认项
sudo nano /etc/default/grub
找到并修改为:
GRUB_DEFAULT=";Windows Boot Manager (on /dev/nvme0n1p3)";
GRUB_SAVEDEFAULT=false
3. 更新 GRUB
sudo update-grub
✅ 只要名称完全匹配,无论重启多少次、更新内核多少次,默认项永久不变。
四、双系统时间快/慢 8 小时 彻底解决
根本原因
- Windows:主板 RTC 时间 = 本地时间
- Linux:主板 RTC 时间 = UTC 时间(国内东八区相差 8 小时)
统一方案(只选一种,不要混用)
方案 A:让 Linux 使用本地时间(最简单、推荐)
sudo timedatectl set-local-rtc 1 --adjust-system-clock
sudo hwclock --systohc
sudo timedatectl set-ntp true
执行后:
RTC in local TZ: yes
两边时间永久一致。
方案 B:让 Windows 使用 UTC 时间(更标准)
管理员打开 PowerShell:
reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
然后开启 Windows 自动时间同步。
五、常见踩坑与排错
-
设置默认 Windows 后又变回 Linux → 启动项名称写错(nvme1n1p3 vs nvme0n1p3),必须与 grep 查到的完全一致。
-
屏蔽后启动项还在 → UUID 或分区路径错误,重新用 blkid 核对。
-
时间快了 8 小时 → 两种时间方案混用了。删除 Windows 注册表项,只保留 Linux set-local-rtc 1 即可。
-
更新内核后默认项失效 → 使用完整启动项名称,不要用数字序号,即可永久稳定。
六、最终效果总结
- GRUB 启动菜单清爽,无多余 EFI/Windows 项
- 默认启动系统固定,重启/更新内核不漂移
- Windows 与 Linux 时间完全同步,不再 ±8 小时
- 全程不破坏 UEFI、不删除分区、安全可靠。
评论区(0 条)
发表评论⏳ 加载编辑器…