windows更新覆盖linux引导项的本质是重写uefi启动顺序并设windows boot manager为默认,而esp分区未被格式化时引导文件通常仍在;需先用efibootmgr或ls /boot/efi/efi/判断使用systemd-boot还是grub,再分别执行bootctl install或grub-install恢复。

Windows更新后覆盖Linux引导项,本质是它重写了UEFI固件中的启动顺序,并把 Windows Boot Manager 设为唯一或默认项,同时可能未正确注册Linux的EFI可执行文件(如 systemd-bootx64.efi 或 grubx64.efi)。只要ESP分区(/dev/sda1 或类似)没被格式化,引导文件大概率还在,恢复不难,但得对症——先确认你用的是 systemd-boot 还是 GRUB。
怎么快速判断当前Linux用的是 systemd-boot 还是 GRUB
开机进BIOS/UEFI设置界面(通常是F2、Del或Esc),看“Boot Order”或“Boot Options”里有没有名为 Arch Linux、Ubuntu、Manjaro 等带发行版名的启动项;如果有,且名字不是 Windows Boot Manager 或 UEFI: USB 这类泛称,那大概率是 systemd-boot。如果只看到 Windows Boot Manager 和一堆 UEFI: <something></something>,但没Linux名,再结合你装系统时是否手动选过 systemd-boot,基本可确认。
更准的办法是:用Live USB启动(比如Arch ISO或Ubuntu Live),打开终端执行:
ls /boot/efi/EFI/
如果看到 systemd 目录(内含 systemd-bootx64.efi),就是 systemd-boot;如果看到 ubuntu、fedora、arch 等目录,且里面有 grubx64.efi 或 shimx64.efi,那就是 GRUB。
systemd-boot 启动项消失:用 efibootmgr 重建
Windows更新不会删ESP里的文件,只是清空或忽略NVRAM里的启动条目。只要 /boot/efi/EFI/systemd/systemd-bootx64.efi 还在,就能用 efibootmgr 加回去。操作前确保已挂载ESP和根分区:
- 用Live USB启动 → 打开终端
-
sudo fdisk -l找出ESP分区(通常100–500MB,FAT32)和Linux根分区 -
sudo mount /dev/sdXY /mnt(XY是根分区,如sda5) -
sudo mount /dev/sdXZ /mnt/boot/efi(Z是ESP,如sda1) -
sudo arch-chroot /mnt(Arch系)或sudo chroot /mnt(其他发行版)
然后运行:
efibootmgr -c -d /dev/sdX -p Z -l /EFI/systemd/systemd-bootx64.efi -L "Arch Linux"
其中 /dev/sdX 是磁盘(如 /dev/sda),Z 是ESP分区号(如 1)。执行后用 efibootmgr 不带参数查看是否新增了 Boot000X Arch Linux 条目。重启即可。
注意:-c 表示创建新条目,-L 是显示名,不能含空格以外的特殊字符;若提示 No such file or directory,说明路径不对,检查 ls /EFI/systemd/ 是否真有那个.efi文件。
GRUB 启动项消失:优先用 bcdboot + grub-install 组合
Windows更新常把NVRAM中GRUB条目干掉,还可能让 bootmgfw.efi 抢占默认位置。单纯跑 grub-install 往往不够,得先让Windows承认GRUB存在:
- 从Windows安装U盘进“修复环境” → 命令提示符
- 用
diskpart找到ESP分区并分配盘符(如Z:) - 执行:
bcdboot C:\Windows /s Z: /f UEFI(确保Windows BCD已写入ESP)
再切回Linux Live环境,chroot进原系统后运行:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
最后生成配置:update-grub(Ubuntu/Debian)或 grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/Fedora)。关键点是 --bootloader-id 必须和ESP里目录名一致(如 /EFI/ubuntu/),否则Windows的 bcdboot 可能覆盖它。
ESP分区还在但文件被删?别急着重装
极少数情况(比如误操作或某些杀毒软件),/boot/efi/EFI/ 下整个发行版目录没了。这时不用重装系统,只需重建引导文件:
对 systemd-boot:bootctl install(在chroot后执行,自动复制 .efi 并设好 loader.conf)
对 GRUB:grub-install 会重新写入 grubx64.efi 和 shimx64.efi(如果启用了Secure Boot);但若 /boot/grub 下的模块(*.mod)也丢了,就得重装 grub 包本身(如 apt install --reinstall grub-efi-amd64)。
真正麻烦的是ESP分区被格式化或损坏——那就得先用 testdisk 恢复FAT32结构,再手动重建目录和文件。这种情况少见,但一旦发生,所有引导修复命令都会报“no such file”,得停在这一步仔细查 ls /boot/efi/EFI/ 的输出。











