关键在于先装windows再装linux,复用其efi系统分区,启用os-prober并调整uefi启动顺序;若失败可用ntbootautofix或grub2win修复,极端情况用live usb重装grub。

物理机上装 Linux 和 Windows 双系统,关键不在“能不能装”,而在于“谁先装、怎么引导、出问题怎么救”。Windows 的引导管理器(Boot Manager)默认不认 Linux,Linux 的 GRUB 却能识别 Windows——所以顺序和配置必须对,否则一重启就只剩一个系统可进。
先装 Windows,再装 Linux 是铁律
Windows 安装过程会清空 MBR(BIOS 模式)或覆盖 EFI 分区里的启动项(UEFI 模式),直接把 GRUB 干掉。反过来,Linux 安装时的 GRUB 能自动扫描并加入已有的 Windows 启动项。
- 装 Windows 时,在磁盘管理里预留未分配空间(比如 100GB+),别格式化、别建分区,留给 Linux 用
- 确保 Windows 是 UEFI 模式安装(开机进 BIOS 看是否启用 UEFI,且硬盘是 GPT 分区表)
- Linux 安装时选“手动分区”,把预留空间划成 /(ext4)、swap(可选)、/home(可选),EFI 系统分区(ESP)必须复用 Windows 已有的那个(通常是 100–512MB、FAT32、标有 “EFI System”),挂载到 /boot/efi
装完 Linux 进不了 Windows?先查 os-prober 是否启用
GRUB 默认可能禁用自动检测其他系统,尤其新发行版(如 Ubuntu 22.04+、Debian 12+)为安全起见关掉了 os-prober。
- 开机进 Linux,用管理员权限编辑:sudo nano /etc/default/grub
- 找到 GRUB_DISABLE_OS_PROBER=true 这行,改成 false;如果没有,就在末尾新增一行:GRUB_DISABLE_OS_PROBER=false
- 保存后运行:sudo update-grub(Ubuntu/Debian)或 sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS/Fedora)
- 重启,GRUB 菜单里应出现 “Windows Boot Manager” 条目
Windows 能进,但 GRUB 菜单没了?大概率是它被跳过了
UEFI 固件有自己的启动顺序列表,GRUB(通常叫 “ubuntu” 或 “fedora”)可能被 Windows Boot Manager 排在了后面,开机直接进 Windows,根本没机会看到菜单。
- 开机狂按 F2/F10/F12(看主板提示),进 UEFI 设置 → 找到 Boot Order 或 Startup → 把带 “grub”、“ubuntu”、“linux” 字样的启动项拖到最顶
- 或者用 Windows 命令临时调序:以管理员身份运行 cmd,执行:
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi(路径依发行版略有不同,常见还有 \EFI\debian\grubx64.efi) - 若不确定路径,可在 Linux 下运行:ls /boot/efi/EFI/ 查看实际目录名
实在救不回来?绕过 GRUB,用 Windows 工具补救
不是所有情况都得重装。物理机上修复引导,比虚拟机更可控,也更少依赖网络。
- 下载 NTBootAutofix(免安装,Windows 下运行)→ 以管理员身份运行 → 按 1 自动扫描修复,它会重建 BCD 并把 Linux 的 EFI 启动文件加进去
- 若 NTBootAutofix 不生效,换 Grub2Win:在 Windows 里安装,它会在 ESP 中写入独立的 GRUB2 引导项,并注册为 UEFI 启动选项,完全不碰 Windows 原有引导链,安全性高
- 极端情况(如 ESP 损坏或被删):用 Linux Live USB 启动 → 挂载原有 ESP(mount /dev/sda1 /mnt)→ 重新安装 GRUB:grub-install --target=x86_64-efi --efi-directory=/mnt --bootloader-id=ubuntu → 再 update-grub











