资讯动态

Windows重装后Ubuntu引导丢失?GRUB修复全程指南

发布时间:2026/10/18 5:53:33 来源:尧图企业网站定制
重装Windows把Ubuntu引导干没是我见过最多、也最让人无语的双系统翻车现场。明明U盘装Ubuntu装得好好的日常用着也没问题就因为某天重置或者重装了Windows开机一看Ubuntu像人间蒸发了一样连引导菜单都不给了。先说结论你的Ubuntu系统文件还在硬盘上数据也没丢纯粹是引导记录被Windows覆盖了。这篇文章就把这套修复流程掰开揉碎讲清楚从最底层的原因到两种修复路线全部走一遍看完你自己就能动手救回来。这种事不光适合正在修引导的人参考刚玩双系统的小白也应该收藏一份因为只要你的机器是Windows和Linux共存迟早会碰上这个坑。我自己的台式机和笔记本都各翻车过一回后来连帮别人救机器的次数也数不清了修复流程闭着眼都能写出来。这篇文章里所有命令都是我在真实修复现场用过的不是网上抄来的理论。1. 为什么重装Windows会把Ubuntu的引导搞丢1.1 先搞清楚引导这件事想修复问题第一件事是搞清楚电脑开机时到底发生了什么。你可以把引导启动想象成一场接力赛电脑通电后硬件只认识固定的起点不会直接去找操作系统而是先执行一段固化在主板里的代码这段代码再根据配置去加载引导程序引导程序最终拉起内核和系统。过去十多年里主流电脑经历了两种启动方案的更替。老式方案叫Legacy BIOS配合主引导记录MBR使用引导代码就放在硬盘的0号扇区一个扇区只有512字节空间极小所以MBR里的引导代码只负责去找下一个阶段的引导程序也就是GRUB这类东西再由GRUB展示菜单、加载内核。新式方案是UEFI配合GUID分区表GPT使用主板直接读取硬盘上的EFI系统分区ESP里的引导文件这个分区采用FAT32格式里面存放各种系统的引导程序文件比如Linux的grubx64.efi、Windows的bootmgfw.efi主板的NVRAM里还记录着这些引导项的路径和优先级。Ubuntu默认使用的引导管理器是GRUB。在Legacy模式下GRUB把核心引导代码装进MBR第二阶段文件放在/boot/grub在UEFI模式下GRUB以grubx64.efi的形式放在ESP分区并通过efibootmgr工具写入主板启动项。搞清楚这两种模式的区别是后面所有修复工作的前提。1.2 Windows装完就翻脸的根本原因你把Ubuntu装好后的那个分区布局无论是/boot这个存放内核的地方还是/boot/efi那个存放引导文件的ESP分区在Windows眼里都只是未知的硬盘空间。Windows安装程序从头到尾不考虑已经存在的第三方操作系统它只关心自己能不能正常启动。在Legacy BIOS模式下Windows安装程序会直接重写MBR引导代码把它换成Windows自己的引导代码。原来的GRUB代码被覆盖Linux分区挂载得再完整开机也找不到任何入口。在UEFI模式下情况稍微复杂一点Windows安装程序通常不会粗暴地格式化整个ESP分区因为GPT规范要求保留但它会在ESP分区里写入自己的引导文件并修改主板NVRAM里的启动项优先级把自己放在第一位同时常常把现有的Linux引导项直接移除或者覆盖掉。最操蛋的是很多品牌的电脑在重置此电脑或者全新安装Windows时还会顺手把ESP分区清理一遍Ubuntu的grubx64.efi文件都被删掉这时候就不是改个启动顺序能解决的事了必须重新生成引导文件。所以这个问题的核心不是Ubuntu坏了不是硬盘坏了也不是你操作失误而是引导链路的入口被Windows单向覆盖了。理解了这一步后面的修复动作就都有了解释。2. 动手修复之前的准备工作2.1 判断你用的是Legacy还是UEFI修复引导之前必须先判断你的Ubuntu和Windows分别运行在什么引导模式下。这个判断失误后面所有命令都会白执行一遍甚至越修越乱。最直接的办法是开机进BIOS设置界面查看启动模式常见的选项是Legacy/CSM/UEFI。如果你平时在Ubuntu里操作可以打开终端运行以下命令ls /sys/firmware/efi如果这个目录存在并且有内容说明当前系统是通过UEFI模式启动的如果提示No such file or directory说明是Legacy BIOS模式。另一个判断方式是查看分区表类型sudo parted -l输出中看到Partition Table: gpt就是GPT分区表通常对应UEFI看到msdos或者没有明确标记通常对应Legacy/MBR。再配合查看有没有EFI分区lsblk -f看到挂载点或者分区类型标记为vfat/FAT32、大小在100MB到500MB之间、通常叫EFI或者ESP的分区就是UEFI的痕迹。注意如果Ubuntu磁盘之前是Legacy方式装的你突然用UEFI的Live盘去修复很可能把引导装到NVRAM里却找不到对应文件最后反而更麻烦。修复之前先统一模式。2.2 制作Ubuntu Live启动盘修复引导需要从Ubuntu的Live环境启动因为系统自身也就是硬盘上的Ubuntu现在无法启动你只能借助一个临时的系统环境去访问硬盘上的文件。制作Live盘最简单的方式是用Rufus或者balenaEtcher把Ubuntu安装镜像写入U盘。我自己的做法是直接用Rufus选择镜像后写入模式按默认即可。有一点值得注意如果你原来的系统是UEFI模式Rufus里要选择GPT分区方案 UEFI目标系统类型这样才能保证Live盘用同样的模式启动如果原来的系统是Legacy模式就选MBR分区方案 BIOS或UEFI。Live盘的启动模式最好和目标系统一致这一点很多人忽略导致进了Live环境后用lsblk看到的设备布局都正常但修复命令却怎么都不生效。插上U盘后开机按启动菜单快捷键各品牌主板通常F12、F11、F8、F10、Esc其中一个选择从U盘启动选择Try or Install Ubuntu进入Live桌面。这个桌面环境已经自带完整的磁盘工具、终端和GRUB相关组件足够完成后续所有操作。2.3 进入Live环境并确认系统分区进入Live环境后第一件事不是急着执行修复命令而是先看清楚硬盘分区布局确认哪个分区是Ubuntu根分区、哪个是boot分区如果独立划分的话、哪个是EFI分区。打开终端运行lsblk -f输出类似下面这样NAME FSTYPE SIZE MOUNTPOINT sda ├─sda1 vfat 512M ├─sda2 ext4 200G ├─sda3 ntfs 450G └─sda4 swap 8G这里sda2的ext4通常就是Ubuntu根分区sda1是FAT32的EFI分区sda3是Windows系统分区。有些人的/boot是独立分区会看到一个额外的ext4小分区大小通常在1G左右。如果你不确定哪个分区对应哪个系统可以通过内容判断挂载ext4分区进去看顶层目录有没有etc、usr、home这些典型的Linux目录结构有就对了。这一步做好记录根分区是哪个、boot分区是哪个、EFI分区是哪个、整块磁盘的设备名是什么。所有后续命令都基于这组信息。3. 手动挂载分区加上chroot修复GRUB通用做法3.1 按正确顺序挂载系统分区修复的核心思路是在内存里运行的Live系统环境下把硬盘上Ubuntu的系统目录结构整体挂载进来然后通过chroot命令把当前终端的根目录切到硬盘上的Ubuntu系统里这样终端的操作就相当于在Ubuntu系统内部执行可以调用硬盘系统里的grub程序来重新安装引导。挂载顺序有讲究。Linux要求父目录先于子目录挂载所以你必须先挂载根分区再挂载根分区内的子目录比如boot、boot/efi。先创建挂载点假设你的根分区是sda2sudo mkdir -p /mnt/ubuntu sudo mount /dev/sda2 /mnt/ubuntu如果/boot是独立分区假设是sda5需要在根分区挂载完成后立刻挂载sudo mount /dev/sda5 /mnt/ubuntu/boot这里不需要手动创建/mnt/ubuntu/boot目录因为根分区挂载后里面的boot目录就已经是原系统的一部分了。接下来是EFI分区假设是sda1sudo mount /dev/sda1 /mnt/ubuntu/boot/efiUEFI模式下这步不能省略。有很多人根分区挂好了就开始chroot执行grub-install时报错说找不到/boot/efi目录就是因为EFI分区没有挂载进来。系统目录挂载完成后还要把Live环境里的几个虚拟文件系统绑定过去这些目录提供了设备节点和内核状态chroot之后系统程序才能正常读取设备信息sudo mount --bind /dev /mnt/ubuntu/dev sudo mount --bind /proc /mnt/ubuntu/proc sudo mount --bind /sys /mnt/ubuntu/sys如果你需要修复过程中访问网络比如更新GRUB某些组件还需要执行sudo cp /etc/resolv.conf /mnt/ubuntu/etc/resolv.conf这一步不是必须的但如果你打算在chroot里跑apt相关的命令不做的话域名解析会失败。3.2 chroot进入系统后的关键操作挂载全部完成后执行chroot切换根目录sudo chroot /mnt/ubuntu命令提示符会变成类似rootubuntu这样的状态此时你的一切操作都发生在硬盘上的Ubuntu系统里而不是Live U盘系统里。务必意识到这一点因为下面执行的grub-install是针对硬盘上的系统文件的。如果你是Legacy BIOS模式启动的重新安装GRUB到硬盘MBR的命令是grub-install /dev/sda update-grub/dev/sda是整个磁盘不是某个分区这点要特别注意。grub-install接受的是磁盘设备名它会把引导代码装进MBR。如果你的系统盘是nvme0n1这样的设备对应的设备名可能是/dev/nvme0n1同样不带分区号。如果你是UEFI模式grub-install需要指定目标平台和EFI目录命令是grub-install --targetx86_64-efi --efi-directory/boot/efi --bootloader-idubuntu这里--efi-directory指向的是已挂载的EFI分区的挂载点--bootloader-id参数会决定生成的引导项名称用ubuntu就行。执行完毕后GRUB的grubx64.efi文件会被写入EFI分区的/EFI/ubuntu/目录同时主板NVRAM里也会生成一条名为ubuntu的启动项。然后无论哪种模式都要执行update-grub重新生成GRUB配置update-grub这个命令会扫描当前系统挂载的分区寻找已经安装的其他操作系统包括Windows。执行正确的话终端输出里会看到类似Found Microsoft Windows的提示这很重要——说明GRUB菜单里会自动出现Windows引导项这样你以后开机能直接从GRUB菜单里选择进Windows还是Ubuntu。3.3 UEFI模式下的额外几行命令UEFI模式下grub-install写入了引导文件但主板的NVRAM启动顺序有时候没那么听话。重启之后可能还是直接进Windows这时候需要在Ubuntu系统内调整启动项顺序。不需要进入Live环境直接在正常的Ubuntu系统里执行sudo efibootmgr输出会列出当前所有启动项类似于Boot0000* ubuntu Boot0001* Windows Boot Manager如果需要手动把Ubuntu设为第一启动项sudo efibootmgr -o 0000,0001数字要替换成你机器上实际对应的编号。如果你的NVRAM里压根没有ubuntu这一项说明grub-install写入启动项的环节没有生效可以手动添加sudo efibootmgr -c -d /dev/sda -p 1 -L GRUB -l \\EFI\\ubuntu\\grubx64.efi-d后面的设备名要改成你硬盘的设备名-p后面的数字改成ESP分区在磁盘上的分区序号。注意这里-1参数后面是Windows路径格式的反斜杠在bash终端里本身需要转义成双反斜杠。这条命令我踩过坑在终端里直接写单反斜杠结果启动项指向了一个错误的路径开机报找不到文件的错误。3.4 修复完退出并重启验证所有命令执行完毕后依次退出chroot环境并卸载分区顺序和挂载时相反exit sudo umount /mnt/ubuntu/dev sudo umount /mnt/ubuntu/proc sudo umount /mnt/ubuntu/sys sudo umount /mnt/ubuntu/boot/efi sudo umount /mnt/ubuntu/boot sudo umount /mnt/ubuntu如果umount提示Target is busy通常是某个进程还占用着挂载点可以先执行sudo lsof /mnt/ubuntu确认是哪个进程卡着或者干脆跳过等待重启Live系统重启后挂载会自动释放。然后拔掉U盘重启电脑。正常的流程是直接看到GRUB菜单——一个紫底白字的界面顶部列出Ubuntu和Windows Boot Manager两个选项默认高亮Ubuntu并倒数计时。如果你看到了Grub命令行界面也就是那种grub提示符说明GRUB没有找到配置文件可以手动输入以下命令临时启动系统set root(hd0,msdos2) linux /boot/vmlinuz-xxxx root/dev/sda2 initrd /boot/initrd.img-xxxx boot括号内的分区编号需要对应你的实际布局msdos格式写Legacy分区gpt格式写UEFI分区。这个临时方法只能用来应急进系统进去之后还是需要重新执行update-grub修复配置文件。4. 不想折腾就用Boot-Repair一键修复4.1 Boot-Repair的安装与使用手动chroot的过程看起来不算复杂但每一步挂载、每个参数都有讲究新手第一次操作很容易卡在某个环节。如果你短时间内只想把系统尽快救回来Boot-Repair工具是更省心的选择。它本质上替你打包完成了我上面说的所有步骤挂载分区、chroot、重新安装GRUB、修复EFI启动项、甚至修复Windows引导。进入Live Ubuntu环境后打开终端安装Boot-Repairsudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair如果网络访问官方PPA比较慢可以换清华源对应的PPA镜像不过大多数情况下默认源也能装成功。安装完成后在终端输入boot-repair工具会自动检测硬盘状态和引导配置直接在界面上点击Recommended repair推荐修复按钮然后等待它执行完成。整个过程中它会扫描所有磁盘分区、识别安装的操作系统、确认引导模式然后自动执行挂载和GRUB安装。一个需要注意的细节Boot-Repair有时会弹出一个对话框询问你是否想把GRUB安装到整个磁盘的MBR或者只是安装到某个分区。默认推荐方案是装到MBR这是正确选项直接确认即可。修复过程结束后界面会显示一个提示网址那是它生成的修复报告链接不用管它直接重启看效果。4.2 手动修复和Boot-Repair怎么选从我自己的实操经验来看两种方式各有适用场景。Boot-Repair适合绝大多数标准故障也就是单纯的引导项被覆盖、GRUB文件还在或者只是配置文件丢失的情况。它又快又省事环境配置正确的前提下基本点一下就能修好。但如果你曾经手动修改过分区布局、用了LVM或者RAID、磁盘存在多系统复杂布局一键修复有时会判断失误——比如在系统里有ESP分区的情况下它可能会把引导装到一个你并不期望的位置。这种场景下手动流程更可控你能看到每一步操作的对象和结果。我个人倾向的顺序是这样的如果你对Linux命令行还算熟悉优先用手动流程。因为整个修复过程会强迫你理解引导链路的每一环以后再遇到类似问题不用靠工具猜如果你就是想快点把系统捞回来、不想研究底层原理用Boot-Repair就够了修复后再抽时间慢慢补底层的课。在Boot-Repair点击推荐修复之前最好先让它生成一份诊断报告看一下界面左下方有Advanced options选项展开后可以看到检测到的分区、引导模式、SSD/HDD布局。确认它识别出来的Ubuntu根分区和EFI分区是正确的再点修复至少能避免工具修错对象。5. 修复现场最常见的坑和排查思路5.1 挂载了/boot却忘了/boot/efi手动修复流程中最容易被跳过的就是挂载EFI分区这一步。很多人习惯了Legacy时代的修复流程挂好根分区就直接chroot结果grub-install执行到一半报错efi directory /boot/efi does not exist或者干脆提示fatal error。EFI分区必须在chroot之前挂载否则chroot环境里/boot/efi是空目录或者不存在grub-install无法找到EFI系统分区来写入引导文件。碰到这个报错不用慌退出chroot把EFI分区挂载到/mnt/ubuntu/boot/efi再重新执行chroot和grub-install即可。一个相关的细节是在挂载EFI分区之前可以用lsblk确认它的文件系统格式必须是FAT32显示为vfat。有些人的ESP分区被Windows或者之前的手动操作格式化成NTFS了这种状态下grub-install同样装不了只能先重建ESP分区过程会复杂很多通常需要备份分区数据后重新格式化。5.2 grub-install提示找不到EFI目录如果你在UEFI模式下执行grub-install报错ERROR: cannot find EFI directory先检查两件事一是ESP分区确实已经挂载且挂载点在/mnt/ubuntu/boot/efi二是挂载后的目录里有没有EFI这个文件夹。如果没有EFI文件夹不代表分区是空的很多时候是需要手动创建这个目录来配合挂载点的命名习惯。在chroot环境里执行mkdir -p /boot/efi/EFI完成后再次执行grub-install命令。如果报错变成efi_dir is not a FAT filesystem说明挂载点指向的分区文件系统格式不对用lsblk -f确认一下再处理。还有种情况是根分区挂载完成后你发现/mnt/ubuntu/boot/efi这个路径根本不存在也就是原系统里没有独立的ESP挂载历史。这可能因为它是纯Legacy模式安装压根没有EFI分区这时候不要硬按照UEFI的流程走回到判断引导模式那一步重新确认。5.3 BIOS模式下装成了EFI引导或者反过来引导模式不匹配是另一个高频坑。主板BIOS设置里同时开启Legacy和UEFI也叫CSM兼容模式时Live U盘可能以UEFI模式启动但硬盘上的Ubuntu是Legacy模式安装的。这时候你执行grub-install --targetx86_64-efi会提示目标文件不是有效的EFI应用或者装完重启后开机依然没反应反之亦然。判断方法很简单进入Live环境后执行ls /sys/firmware/efi如果Live系统以UEFI模式启动这个目录存在如果以Legacy BIOS模式启动这个目录不存在。再看一下硬盘分区表模式两者匹配才有意义。如果不匹配最简单的做法是重启电脑进入BIOS启动菜单时强制选择对应的模式来启动U盘。启动菜单里通常同一个U盘会出现两个选项一个带UEFI前缀一个不带选和硬盘安装模式相同的那一个即可。5.4 修复后开机还是直接进Windows这是修复完成后最让人崩溃的情况但通常是启动优先级的问题不是修复失败。重启时进入BIOS设置界面找到Boot Order或者Boot Priority选项把刚才grub-install时写入的启动项名字一般是ubuntu或者GRUB拖到第一位保存退出。在Ubuntu系统里也可以直接用efibootmgr调整命令在前面写过。另一个常见原因是Windows更新或者系统重置之后会把NVRAM里的启动项顺序又改回去。所以修复完成后如果发现过一段时间又直接进Windows了不要怀疑是修复没生效重新用efibootmgr调整顺序就行。如果开机直接出现一个蓝色的Windows错误恢复界面说找不到操作系统这种情况多半是ESP分区里Windows的引导文件也被误删了或者Boot-Repair在修复GRUB时把ESP分区里的Microsoft目录清掉了。解决思路是先从Windows安装U盘启动进入命令提示符执行bootrec /fixmbr和bootrec /rebuildbcd重新生成Windows引导然后再回Ubuntu里update-grub把Windows引导项加进GRUB菜单。这属于双系统引导链路的双向修复场景比单修一边复杂一点但也在这套流程的覆盖范围之内。6. 说点实在的怎么避免下次再被这种问题恶心到修复过一次之后你就会意识到这个问题几乎可以完全预防。最直接的办法是为ESP分区和MBR区各做一次完整的扇区级备份备份大小取决于分区实际占用通常只有几十到几百MB。在Ubuntu里执行sudo efibootmgr -v ~/efiboot_backup.txt sudo dd if/dev/sda1 of~/esp_backup.img bs4M第一条导出当前启动项配置出问题后可以对照恢复第二条把整个ESP分区做成镜像文件。Legacy模式下对应备份MBRsudo dd if/dev/sda ofmbr_backup.img bs512 count1有了这个镜像Windows重装后只需要从Live盘启动用dd把ESP镜像恢复回原分区grub-install都不一定需要重新执行比完整修复流程更省事。但要注意dd恢复ESP分区时必须确认分区设备号没有变化否则会写到别的分区上。预防方面可以做的另一件事是养成顺手调整启动顺序的习惯。装好双系统之后进BIOS把Ubuntu引导项设成第一位Windows排在后面这样就算Windows系统更新偶尔重置了一小部分NVRAM设置开机时还是优先进入GRUB菜单在GRUB菜单里仍然可以随时选择启动Windows。根据我的实操经验这类问题最核心的教训是双系统维护引导链路和操作系统本身是两码事。引导坏了不代表系统坏了系统坏了也不代表引导一定有问题分清这两个层面你就有能力应对双系统环境里百分之九十的启动故障。以后再遇到重装Windows导致Ubuntu消失的情况按这篇文章的流程一步步走大概率半小时内就能把系统完整救回来。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑