资讯动态

Windows重装后Ubuntu引导丢失?详解GRUB修复与数据恢复

发布时间:2026/10/18 5:55:13 来源:尧图企业网站定制
1. 问题背景装好Ubuntu之后重装Windows开机引导怎么就丢了先说个结论引导丢失不等于系统损坏更不等于数据丢失。我接触过不少这种情况基本都是同一个原因——Windows安装程序在写入引导信息时把GRUB从启动链路的“第一棒”位置上挤掉了。Ubuntu的根分区、家目录、各种配置文件都还好端端躺在磁盘上只是开机时系统根本不去找它。这事情发生的场景也很典型你原本用U盘装好了Ubuntu日常用得顺手后来因为某种原因需要重装Windows比如系统中毒、C盘爆满、或者你换了一块固态想迁移系统。装机过程通常就是插上Windows安装盘、选分区、格式化、一路Next。装完之后重启发现直接进WindowsGRUB菜单不见了Linux启动项完全不出现。遇到这个情况不用慌也不建议立刻拿着Windows的启动修复盘反复折腾。正确思路是先搞清楚一件事你的磁盘引导模式是Legacy BIOS还是UEFI这决定了修复方式完全不同。判断方法很简单进Windows后按下WinR输入msinfo32看“BIOS模式”那一栏。如果是UEFI后面的修复命令都要按UEFI的规则来如果是Legacy则是传统MBR引导的玩法。绝大多数2018年之后买的机器都是UEFI GPT分区所以下面我会重点讲讲UEFI模式的处理同时穿插Legacy的处理方法。还有一个重要的经验先放在这里维修前务必确认一下自己的Ubuntu根分区还在不在。用Windows磁盘管理看磁盘分区能看到几个不带盘符的“恢复分区”或者“EFI系统分区”以及容量对得上的Linux分区说明数据都在。如果磁盘管理里显示整块盘都变成了单一Windows分区那才真的是大问题建议立刻断电别再做任何写盘操作找专业恢复工具处理分区表。好消息是绝大多数情况下分区表都是完整的只是引导入口被改了。2. 修复前的准备做一个Ubuntu启动U盘并且判断引导模式2.1 为什么一定要有Ubuntu启动U盘修复引导最稳妥的方式是在Live环境里操作也就是用Ubuntu安装U盘启动选择“Try Ubuntu”进入一个临时的桌面系统。在这个环境里你可以随意挂载硬盘分区、执行修复命令不会受到正在运行系统的影响。制作启动U盘的常见方案我按场景区分一下Windows下制作下载Rufus选择Ubuntu的ISO镜像分区类型如果是UEFI机器就选GPT如果是老机器Legacy就选MBR写入方式选“DD镜像模式”点开始即可。我建议不要用“ISO镜像模式”虽然它兼容性更好但DD模式写的U盘在Live模式下更稳定遇到奇怪的引导环境少一点。Linux下制作直接用dd命令例如sudo dd ifubuntu.iso of/dev/sdb bs4M statusprogress这里的/dev/sdb是你U盘的设备名注意是磁盘设备名不是分区名写错盘会毁掉数据。用lsblk确认清楚再动手。还有一种情况你手头有另一个Linux系统可以用启动盘制作工具把USB写入后马上验证。验证方法就是直接试着从这个U盘启动能进GRUB菜单就说明写对了。做启动盘这个步骤一定不要省。有些人觉得既然是修复引导能不能在Windows下装个GRUB也可以但那是另一条路比如用EasyBCD或者第三方工具往EFI启动项里加条目实际试下来不稳定而且出问题排查起来更绕。最干净利落的方法永远是Linux环境处理Linux的引导。2.2 用U盘启动后先确认当前引导模式U盘插入后开机通常按F12不同品牌按键不同常见还有F2、Esc、Del选择启动项。选带UEFI前缀的U盘启动项进入Ubuntu Live桌面。终端里执行以下命令确认当前是否是UEFI模式ls /sys/firmware/efi/efivars如果这个目录存在并且有内容就是UEFI模式启动。如果提示No such file or directory说明当前是以Legacy BIOS模式启动了Live系统。这一步很关键因为后续grub-install命令的参数要根据这个结果来定。同时用lsblk看一下磁盘分区情况lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT这个命令会输出所有磁盘和分区以及文件系统类型。正常情况你能看到Windows的ntfs分区、Ubuntu的ext4根分区和一个小容量的vfat分区EFI系统分区一般几百MB。把这些分区名记下来比如/dev/nvme0n1p1是EFI分区/dev/nvme0n1p5是Ubuntu根分区。如果看不到Linux分区再执行sudo fdisk -l看看磁盘原始分区表还在不在避免误判。3. 最简单高效的修复路径Boot Repair自动修复3.1 Boot Repair工具的原理和使用流程Boot Repair是一个图形化工具专门用来处理Linux引导丢失、Windows和Linux启动项错乱这类问题。它的原理是扫描磁盘上的GRUB相关文件重新安装GRUB到正确的磁盘位置并重建grub.cfg配置文件。对绝大多数普通情况一键修复就够了。进入Live桌面后先连接网络然后打开终端加PPA源安装sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair如果PPA源下载缓慢可以做一步系统源的换源操作改成国内镜像源能快很多。装好之后从应用菜单启动boot-repair界面会显示“Recommended repair”按钮直接点击然后让它跑完。过程中工具会自己识别分区、挂载EFI、安装GRUB、生成新配置全程不需要你动手跑完后会给你一个日志URL同时提示重启验证。我实测下来Boot Repair对UEFI模式的修复成功率很高对Legacy模式稍微有些情况会失败主要出现在老电脑多系统多硬盘的复杂分区场景。如果它失败了那就要走下面的手动chroot修复路线了。3.2 为什么不直接建议只用Boot RepairBoot Repair方便归方便但有个问题它是个“黑盒”你不太清楚它到底做了什么。如果修完还是不行你连排查的入手点都找不到。所以我更建议把它作为第一选择但修完如果失败心态别崩手动修复其实也不难而且能让你真正理解引导的原理。另外一个细节Boot Repair运行完后最好顺手检查一下启动项顺序。UEFI模式下用Boot Repair生成的GRUB通常是作为第一个启动项但有的主板重启后又会把Windows Boot Manager排回第一位这时候需要在BIOS启动菜单里手动把ubuntu或者GRUB项调整顺序。别忽略这一步经常有人修完了说还是进Windows结果一看是启动顺序没调。4. 手动修复方案chroot进Ubuntu系统重装GRUB4.1 chroot的基本概念和准备工作手动修复的核心思路是用一个临时的Linux环境Live系统把硬盘上的Ubuntu分区挂载起来然后通过chroot命令“进入”这个分区仿佛在运行Ubuntu系统本身再去执行GRUB的安装和配置命令。为什么要绕这么一圈因为GRUB装在哪里、grub.cfg怎么生成需要读取Ubuntu分区里的配置、内核文件等信息。直接修EFI分区里的引导文件不是不行但很难保证配置和系统实际状态一致。chroot进去之后执行update-grub时读取的就是系统真实的内核列表和磁盘状态生成的结果最可靠。开始之前的步骤# 先挂载Ubuntu的根分区假设是/dev/nvme0n1p5 sudo mkdir -p /mnt/ubuntu sudo mount /dev/nvme0n1p5 /mnt/ubuntu # 如果Ubuntu有单独/boot分区也要挂载上 # 比如 sudo mount /dev/nvme0n1p6 /mnt/ubuntu/boot # 在UEFI模式下必须挂载EFI系统分区 # 假设EFI分区是/dev/nvme0n1p1 sudo mkdir -p /mnt/ubuntu/boot/efi sudo mount /dev/nvme0n1p1 /mnt/ubuntu/boot/efi # 把系统的虚拟文件系统临时挂载进去 sudo mount --bind /dev /mnt/ubuntu/dev sudo mount --bind /proc /mnt/ubuntu/proc sudo mount --bind /sys /mnt/ubuntu/sys这里解释一下最后三条bind挂载的作用。chroot进去之后环境里只有Ubuntu分区的文件系统但GRUB安装时可能要去读写设备节点、读取系统信息这些信息来自当前内核的虚拟文件系统Live系统有而Ubuntu分区里没有所以必须把它们映射进去。4.2 在chroot环境中执行GRUB安装做完上面的准备后进入环境sudo chroot /mnt/ubuntu /bin/bash注意执行完你会发现命令行前面变成了类似rootubuntu:/#的提示符说明已经相当于“跑在”硬盘里的Ubuntu系统上了。接下来执行# 重新安装GRUB到磁盘的MBR或EFI引导位置 grub-install /dev/nvme0n1 # 生成新的grub.cfg update-grub这里有个新手最容易犯的错grub-install后面跟的是整块磁盘设备名不是分区名。比如 /dev/nvme0n1 是整块盘/dev/nvme0n1p5 是分区。GRUB是装在磁盘开头的引导区或EFI目录里不是装在某个数据分区里写错会提示无法安装。UEFI模式下有的发行版可能要求指定目标平台grub-install --targetx86_64-efi --efi-directory/boot/efi --bootloader-idubuntu这个命令的意思是把GRUB的EFI可执行文件安装到/boot/efi目录下启动项名称为ubuntu。Legacy模式下则直接grub-install /dev/sdX即可注意这类机器一般对应的是/dev/sda或/dev/sdb这种名字。update-grub执行时会扫描所有分区自动把Windows和其他系统写进启动菜单。跑完后退出chroot重启验证exit sudo umount /mnt/ubuntu/dev /mnt/ubuntu/proc /mnt/ubuntu/sys sudo umount /mnt/ubuntu/boot/efi sudo umount /mnt/ubuntu sudo reboot重启后大概率能看到熟悉的GRUB菜单了里面同时有Ubuntu和Windows的条目。4.3 手动修复过程中最容易踩的坑第一个坑挂载点写错。如果你把EFI分区挂到了/mnt/ubuntu/boot/efi对应目录的上一级或下一级grub-install会提示找不到ESP分区。排查方法就是执行mount | grep /mnt/ubuntu确认挂载点。第二个坑分区表没问题但GRUB修复后依然直接进Windows。这时候去BIOS启动菜单里看是不是启动项顺序里Windows Boot Manager排在了Ubuntu前面把它调过来即可。也可以直接在Live环境里用efibootmgr命令调整sudo efibootmgr # 查看当前启动项编号后执行 sudo efibootmgr -o 0000,0001其中0000和0001是启动项的编号把ubuntu相关的排到最前面。第三个坑执行grub-install的时候提示“cannot find a device for /boot/efi”。这个报错往往是因为EFI分区没挂载或者挂载的步骤被跳过了。重新检查一下挂载状态就好。另外如果你用的是nvme硬盘某些老版本Live系统的GRUB对nvme支持不完整建议先用官网最新ISO做启动盘旧ISO可能识别不到nvme设备。5. 数据安全兜底不想修引导或者分区信息乱了怎么把文件先拿出来5.1 直接挂载分区不经过引导也能拿数据有部分读者可能会遇到更极端的情况Ubuntu分区在但GRUB修复多次失败或者你压根不想修了只想把Linux里的重要文件备份出来然后重做整个系统。这种情况下不需要修复引导直接用Live系统挂载数据分区即可。假设Ubuntu根分区是/dev/nvme0n1p5在Live终端里执行sudo mkdir -p /mnt/data sudo mount /dev/nvme0n1p5 /mnt/data挂载成功后/mnt/data下的目录结构就是原Ubuntu系统全貌其中/home目录下就是用户数据。你可以直接用文件管理器打开把需要的内容复制到移动硬盘或者Windows的NTFS分区。如果提示权限不够在终端用cp命令配合sudo操作sudo cp -r /mnt/data/home/用户名/重要目录 /media/移动硬盘/对于一个正常没坏过的ext4分区这种方式基本100%能拿到数据。我在实际工作中遇到过好几次用户以为自己数据全没了、急得不行的情况最后都是这样挂载分区把照片、文档捞回来的。5.2 如果连ext4分区都识别不到这种情况不需要立刻想到“磁盘坏了”先想想是不是分区表被改了。Windows安装程序在某些操作下可能把MBR改成了动态磁盘结构或者覆盖了分区表前部的信息。Linux不识别动态磁盘会出现“未分区”的假象。处理方式是尝试用TestDisk扫描并恢复分区表。在Live环境里安装sudo apt install testdisk sudo testdisk程序是交互式的基本流程是选择磁盘、选择分区表类型GPT或Intel、分析、快速搜索、列出分区找到Linux分区后写入恢复分区表。这块操作风险略高但只要不写入就只读扫描过程是安全的。分区表找回来之后重新刷新分区信息再挂载就能看到数据了。我有一次处理一个搞笑的情况用户说Linux分区不见了结果一查是Windows安装时把那块盘变成了动态磁盘Linux分区本身完好无损只是分区表类型变了。TestDisk扫描后恢复成GPT挂载一切正常。类似场景见得多了我现在的建议是装系统时Windows和Linux各占一块物理硬盘最稳妥实在只有一个硬盘也尽量在重装Windows前提前备份重要文件不要把希望全寄托在事后修复上。6. 实际问题排查表与日常预防建议6.1 常见问题速查表现象可能原因解决办法开机直接进WindowsGRUB完全不见Windows覆盖了MBR/EFI引导入口用Boot Repair或chroot重装GRUB然后调整启动项顺序GRUB进了但菜单里没有WindowsGRUB os-prober没有检测到Windows分区确认Windows分区是ntfs且正常可识别执行update-grub重新扫描grub-install报不能找到EFI分区EFI分区未挂载或挂载位置错误确认分区挂载到/boot/efiUEFI启动下再执行启动菜单里多了一堆老内核或重复项grub.cfg缓存了旧记录在系统内执行update-grub重新生成列表双硬盘机器GRUB装了但只认其中一块盘安装GRUB时选错了磁盘设备需要装到Windows所在的那块盘上或者根据BIOS启动设备调整系统进不了但想拿文件不修引导数据可完整挂载Live环境mount ext4分区复制/ home 目录6.2 如何避免引导再次丢失按照我的实际经验双系统环境最容易出问题的时机就是重装Windows。所以有两条操作性很强的建议第一条重装Windows之前把安装引导时可能会碰的盘分离出去。如果你有两块物理硬盘最稳妥的操作是拔掉Linux所在硬盘的SATA线或者卸下M.2硬盘只留Windows盘安装装完断电插回去开机进BIOS选择Linux那块硬盘启动GRUB会自动识别新装的Windows并加入菜单。这条方法我在不同机器上验证过多次比任何修复工具都可靠。第二条单硬盘用户重装Windows时不要动其他分区。在Windows安装程序选择分区界面只选中原来的C盘分区选择格式化并安装。千万不要选“删除分区”再把整个磁盘重新分区那样百分百会把Linux分区连根拔掉。很多人觉得自己只是“格式化C盘”但Windows安装器经常会自动创建额外引导分区不会碰到Ext4分区这时问题往往只是引导入口被覆盖走修复流程就好。如果你手滑把整个盘删了重建那就是数据恢复级别的问题了。另外平时养成习惯把/boot/grub/grub.cfg备一份到U盘。它只是一个文本配置文件但包含了你当时正确引导状态下的完整记录。出了问题比对着官方文档排错快得多。比如我自己的做法是每次装好系统、调整过分区后都会复制一份grub.cfg和一个分区表导出文件sudo sfdisk -d /dev/nvme0n1 分区表备份.txt sudo cp /boot/grub/grub.cfg ./grub.cfg备份真到了哪一天需要修复看着备份里的参数再去执行命令心里会踏实很多。我自己修这种引导问题修过太多次后面逐渐形成了几个习惯。系统装好之后第一时间做一个启动U盘常年放在抽屉里重要的Linux分区尽量独立于Windows系统盘每次重装Windows之前先在Live环境下验证一下分区表状态。这些习惯看着啰嗦但双系统环境里它们能帮你省掉最麻烦的恢复工作。修复引导这种事操作其实不难难的是猜来猜去不知道问题出在哪一步。把提前准备做足了剩下就都是水到渠成。

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

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

免费获取报价 →
↑