Win+Linux双系统卸载Linux:GRUB救援与EFI启动项清理 上周帮朋友收拾他那台 2019 年的笔记本机器里同时躺着 Windows 11 和 Ubuntu 22.04。他嫌开机菜单每次要等 10 秒想直接砍掉 Linux于是在磁盘管理里把两个未知分区右键删掉重启之后屏幕卡在grub rescue一行白字上连 Windows 都进不去最后抱着机器来找我。这件事让我意识到卸载 Linux 系统这件事的难点从来不是删分区而是删完分区之后那套引导链路的收尾——WinLinux 双系统下GRUB、Windows Boot Manager、EFI 分区、NVRAM 启动项、BitLocker 恢复密钥这几样东西是缠在一起的动一个就牵一串。这篇内容我想把winlinux 双系统如何正确卸载 linux 系统这个动作拆成一条完整的链路先判断你的机器是 Legacy 还是 UEFI 引导、GRUB 有没有接管开机、Linux 分区落在哪些扇区再准备退路尤其是那个能救命的 Windows 安装 U 盘然后分别给出 Legacy 和 UEFI 两套完整的收尾流程包括 grub rescue 的救援路径和 EFI 启动项清理最后聊聊删完之后的空洞怎么回收、盘符和恢复分区怎么处理、哪些残留设置需要顺手改回去。适合已经装了双系统、想把 Linux 干净移除又不想重装 Windows 的人也适合第一次碰到grub rescue不知道怎么下手的读者。1. 卸载前先摸清三件事引导模式、引导权归属、Linux 分区落点很多人失败的根因是跳过这一步直接开干。删分区是不可逆的而删完之后要走哪条修复路线完全取决于下面三个判断。1.1 Legacy BIOS 与 UEFI决定后面用哪套修复命令按Win R输入msinfo32在系统摘要里找BIOS 模式这一行会显示UEFI或者传统。旁边还有一行安全启动状态。这一步花不到十秒但它决定了你后面是该敲bootrec还是该去删 EFI 目录。另一个更直观的旁证是打开磁盘管理Win X→ 磁盘管理如果磁盘 0 上能看到一个 100MB 或 512MB 的EFI 系统分区再加上一个 MSRMicrosoft 保留分区和恢复分区那就是 UEFI 布局如果看到的是一个 100MB 或 500MB 的系统保留分区、没有 EFI 字样那是 Legacy 布局。对比项Legacy BIOS 引导UEFI 引导引导代码位置磁盘 MBR 扇区512 字节内的引导代码EFI 系统分区里的 .efi 文件启动项记录位置不存在由分区活动标志决定主板 NVRAM 里的启动项列表典型标志分区系统保留 100MB/500MB带活动标记EFI 系统分区 100MB 起删完 Linux 后要做的事重写 MBR、重建 BCD、必要时设活动分区切回 Windows Boot Manager、删 EFI 目录、清 NVRAM 条目修复命令bootrec /fixmbr、bootsect、bcdboot /f BIOSmountvol、bcdedit /enum firmware、bcdboot /f UEFI提示bootrec系列命令是给 Legacy 场景用的在 UEFI 机器上乱敲有可能把本来正常的 UEFI 引导搞乱两套流程别混着来。1.2 判断 GRUB 有没有接管开机权开机时你应该见过那个黑底白字的菜单里面列着Ubuntu、Advanced options for Ubuntu、Windows Boot Manager——只要这个菜单出现就说明GRUB 是当前的主引导。绝大多数先装 Windows、后装 Linux的机器都是这个状态因为 Linux 安装器默认会把自己写成第一启动项。反过来如果开机直接进 Windows 的启动菜单或者干脆没有任何菜单就进了系统说明 Windows Boot Manager 还是主导Linux 的引导条目可能被塞在 BCD 里也可能是固件里排在后面的一个选项。在管理员权限的命令提示符里跑一下bcdedit /enum firmware能看到固件层面的启动项列表。里面如果有一个 description 写着ubuntu的条目那就是 Linux 留下的 NVRAM 记录等下要清掉。再看bcdedit /enum {bootmgr}如果 path 是\EFI\Microsoft\Boot\bootmgfw.efi说明 Windows 的引导文件还在原位没被 GRUB 顶替——这是个好消息意味着你只要把 GRUB 那条记录挪走就行。1.3 认准哪些分区是 Linux 的哪些碰都不能碰这是最容易出事的一步。Linux 分区在 Windows 磁盘管理里通常显示为**没有盘符、文件系统空白、写着未知分区**的块。你绝对不能靠看它不顺眼来判断得靠位置和内容。Legacy 下的典型布局长这样系统保留100MB活动→C: 系统盘→Linux 根分区ext4几十 GB→swap 交换分区约等于内存大小。UEFI 下则是EFI 系统分区100/512MB→MSR16MB→C: 系统盘→恢复分区几百 MB 到 1GB→Linux 根分区→swap。关键点在于那个EFI 系统分区是 Windows 和 Linux 共用的Linux 只是往里面加了一个自己的文件夹通常是\EFI\ubuntu。这个分区本身千万不能删它一没Windows 立刻起不来。同理标着恢复的小分区也别顺手删那是 WinRE 的落脚点。想看得更准确一点用diskpart的detail partition看分区的 GUID 类型diskpart list disk select disk 0 list partition select partition 4 detail partitionWindows 会打印出该分区的类型 GUID对照下表基本不会认错分区用途类型 GUID 开头基本数据分区C/D 盘ebd0a0a2-...EFI 系统分区c12a7328-...Microsoft 保留分区MSRe3c9e316-...Windows 恢复分区de94bba4-...Linux 文件系统ext4/xfs/btrfs0fc63daf-...Linux swap0657fd6d-...还有个容易被忽略的情况如果当初装 Linux 时用了LVMWindows 只会看到一个很大的未知分区里面再切成若干逻辑卷如果开了全盘加密那个分区看起来也一样。这类情况下别指望在 Windows 里看懂内部结构老老实实把整个物理分区当成 Linux 的删掉就行——前提是你确认里面的数据已经拷出来了。2. 动手前的准备退路、镜像盘和一张操作顺序单我见过太多人是在删完分区之后才开始找 U 盘的那时候机器已经开不了机了。这一步的准备成本很低但它决定了你是花半小时还是花一整天。2.1 备份清单不只是文件还有机器的身份证先备份 Linux 侧要留的东西/home下的个人文件、数据库导出文件、各种服务的配置文件。这里有个坑Windows 下用第三方工具直接读 ext4 分区比如那些声称支持 ext4 的驱动在新版 ext4 开启了 64bit 特性或者带元数据校验的情况下很可能只能读或者干脆挂载不上写入还有损坏风险。最稳的做法是用一个 Linux Live USB 启动把文件拷到移动硬盘上别偷懒。然后是 Windows 侧的三样东西它们跟引导修复直接相关用管理员命令提示符导出当前引导配置bcdedit /enum all D:\bcd_backup.txt出问题时至少知道原来长什么样。BitLocker 恢复密钥。如果系统盘开了 BitLocker修改引导之后有很大概率要求你输入 48 位恢复密钥。先在微软账户里或者manage-bde -status里把密钥找出来存好实在怕麻烦可以先暂停保护manage-bde -protectors -disable C: -rebootcount 3处理完再manage-bde -protectors -enable C:打开。磁盘管理界面的截图加上diskpart里list partition打出来的列表。删分区时拿着这张地图对照比自己凭记忆强得多。2.2 一个 Windows 安装 U 盘是这次操作的安全绳哪怕你觉得自己不会出错也建议做一个。理由很实在引导一旦坏掉系统里的高级启动菜单是进不去的你需要的那个命令提示符只能从外部启动介质里调出来。制作方式两种都行用官方工具下载 ISO 后写入或者拿现成镜像配合写盘工具。U 盘至少 8GB。做好之后在目标机器上试一次能不能启动确认能进到现在安装那个蓝色界面——能进这个界面就够了进去之后按Shift F10可以直接调出命令提示符比点修复计算机绕一圈更快。注意U 盘要按机器的引导模式制作。UEFI 机器要选 UEFI 方式启动 U 盘Legacy 机器则选不带 UEFI 前缀的那一项启动菜单里两者通常都会列出来选错了会提示找不到引导文件。2.3 一份按顺序走的操作单我自己的习惯是把顺序写下来贴在显示器边上每做完一步就重启验证一次不连续操作。原因是如果一次改五个地方出了问题你根本不知道是哪一步导致的。标准顺序是这样的——备份数据与恢复密钥 → 暂停 BitLocker → 记录下来分区布局 → UEFI 机器先把启动顺序切回 Windows Boot Manager见第 4 章→ 删除 Linux 分区 → 清理 EFI 目录与启动项 → 修复或校验引导 → 回收未分配空间 → 回头检查时间设置和 WinRE 状态。Legacy 机器的话第三步之后直接跳到删除分区 → 修 MBR → 重建 BCD这条线。3. Legacy 机器上的完整卸载链路以及 grub rescue 的救援路径Legacy 场景的核心矛盾是GRUB 的引导代码直接写在了 MBR 里你把 Linux 分区删掉那段代码还在而它指向的配置文件已经没了于是开机就掉进grub rescue。3.1 先删分区哪些能删、哪些必须留打开磁盘管理对照之前的截图找 Linux 分区。一般是紧跟 C 盘后面的两个一个大的 ext4 根分区一个和内存差不多大的 swap。右键 → 删除卷。如果删除卷是灰色的说明这个分区上还挂着盘符或者页面文件先排查一下。用diskpart删更干净尤其对付那些在图形界面里显示异常的块diskpart select disk 0 list partition select partition 4 delete partition overrideoverride参数是用来强删受保护分区的正常的数据分区不加也能删。删的时候务必确认分区号list partition里每一行都有大小和偏移量跟你的截图比对一下。留下的应该是系统保留带活动标记、C 盘、恢复分区。删完先别急着重启因为此刻你的 MBR 还是 GRUB 的。接下来就要在同一个 Windows 环境里把引导修回来——如果你现在就跑重启就会看到那个熟悉的黑屏。3.2 bootrec 三步走以及 fixboot 报拒绝访问怎么办从安装 U 盘启动进到安装界面按Shift F10打开命令提示符。依次执行bootrec /fixmbr bootrec /fixboot bootrec /rebuildbcd第一条只管重写 MBR 里的引导代码不动分区表所以不会丢数据第二条写新的分区引导扇区第三条会扫描硬盘上所有 Windows 安装并把它们写回 BCD。扫描到系统时它会问你要不要加入启动列表输入Y回车。bootrec /fixboot报拒绝访问是高频问题网上把这归结为引导坏了其实更常见的原因是系统分区被保护或者被 BitLocker 加密着。这时候可以改用bootsect /nt60 SYS /mbrbootsect会把引导扇区写成 Windows 的引导代码顺便把bootmgr找回来。如果依然失败就要往分区活动标志丢了这个方向查见下一节。3.3 活动标志丢了怎么办diskpart 加 bcdboot 组合拳开机报Missing operating system或者Bootmgr is missing十有八九是那个小的系统保留分区丢了active标志。Legacy 引导链条是这样的MBR 代码 → 活动分区 →bootmgr→BCD。任何一环断掉都表现为开机黑屏报错。修复分两步。先在diskpart里把活动标志加回去diskpart list disk select disk 0 list partition select partition 1 active exit这里的partition 1要选那个 100MB 或 500MB 的系统保留分区。如果没有独立的系统保留分区有些机器上一个都没有引导文件直接放在 C 盘那就选 C 盘所在的分区。然后用bcdboot把引导文件重新铺一遍bcdboot C:\Windows /s C: /f BIOS /l zh-CN/s后面跟的是引导文件要放的分区如果系统保留分区存在且被分配了盘符比如 S就写/s S:否则写/s C:/f BIOS明确告诉它按 Legacy 方式生成。跑完之后bcdedit /enum应该能看到 Windows Boot Manager 和{default}条目。提示如果bcdboot提示尝试复制启动文件失败八成是那个分区的文件系统不是 NTFS 或者空间不够100MB 的系统保留分区很少见地会被塞满可以先把该分区格式化再重试但格式化前务必确认里面放的只是引导文件没有你的数据。4. UEFI 机器上的收尾重点删干净 EFI 目录与 NVRAM 条目UEFI 场景下删分区只是把 Linux 的数据扇区清掉了但主板的启动项列表和 EFI 系统分区里的文件都还在。很多人删完分区发现开机菜单里还有个 Ubuntu或者开机直接掉进grub就是这个原因。4.1 先把第一启动项切回 Windows Boot Manager这一步必须在删分区之前做否则删完分区一重启GRUB 那条启动项就是死路一条。进固件设置的方式各品牌不一样一般是开机时连按F2、F12或者Del。在 Boot 或者 Boot Order 里把Windows Boot Manager拖到第一位把ubuntu那一项拖下去或者留着不管。如果机器有多块硬盘注意区分每一项后面跟的是哪块盘的哪个分区。也可以从 Windows 内部操作。在管理员命令提示符下bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst bcdedit /set {fwbootmgr} timeout 3第一条把 Windows Boot Manager 提到固件启动顺序的首位第二条把固件层的等待时间压到 3 秒。这条命令在大多数主板固件上有效个别固件不认那就老老实实进 BIOS 手动调。4.2 挂载 EFI 分区删掉 ubuntu 那个文件夹EFI 系统分区默认没有盘符得先挂上来mountvol S: /s这条命令会把 ESP 挂到 S 盘。如果报参数错误先用不带参数的mountvol列出所有卷找到那个描述里带EFI的卷 GUID然后mountvol S: \\?\Volume{那一长串GUID}\手动挂载。挂上之后进去看一眼dir S:\EFI会列出所有发行版的文件夹常见的有Microsoft、ubuntu、debian、fedora、kali还有你可能没见过的Boot。要删的是除Microsoft之外的那些rd /s /q S:\EFI\ubuntu删完再dir S:\EFI确认一遍然后mountvol S: /d卸载。这里有个细节值得提一句某些 Linux 安装器会顺手把\EFI\Boot\bootx64.efi替换成自己的 shim 文件这是固件在找不到 NVRAM 条目时的兜底路径。如果确认被替换了把S:\EFI\Microsoft\Boot\bootmgfw.efi复制过去覆盖回去就行。4.3 清掉 NVRAM 里的残留启动项顺手把 ESP 空间还回来分区和文件都清了主板的启动项列表里可能还有一条 ubuntu。在管理员命令提示符里bcdedit /enum firmware输出里找到 description 为 ubuntu 的那一条记住它的大括号 GUID然后bcdedit /delete {那个GUID} /f如果这条命令报错说尝试删除的系统项不存在——这很常见因为那个条目指向的分区已经被你删了Windows 的 BCD 工具就找不到它了。这时候有两个替代方案第一个是用 Linux Live USB 启动在终端里执行efibootmgr查看启动项列表每一项前面有个十六进制编号找到 ubuntu 对应的编号后执行sudo efibootmgr -b 0004 -B删掉它。注意这里的编号要换成你自己看到的。第二个是在固件的启动菜单里通常会有删除启动项或者清除启动顺序的功能部分商务机型提供这个入口直接在 BIOS 里点掉。顺带说一个容易被忽视的好处ESP 空间回收。很多机器的 ESP 只有 100MB装了 Linux 之后被塞掉三四十 MBWindows 后续做功能更新时经常因为 ESP 空间不足而失败报错往往是 0x800f0922 之类。把 ubuntu 目录删掉之后这部分空间立刻空出来算是意外收获。4.4 一次重启验证把可能的问题提前挤出来做完上面三步重启一次重点观察几件事固件自检后有没有停在启动菜单能不能直接进 Windows进系统后bcdedit /enum firmware里还有没有 ubuntu 的条目磁盘管理里 Linux 分区是否已经变成未分配。如果卡在grub或者grub rescue说明启动顺序还没切过来或者 NVRAM 条目没删干净回到 4.1 重新处理。如果卡在 Windows Boot Manager 报0xc000000e那是 BCD 指向的分区不对用安装 U 盘启动后跑一次bcdboot C:\Windows /s S: /f UEFI重建。5. 删完之后的那堆收尾活空间回收、异常现象与残留设置到这一步 Linux 已经算删掉了但机器上还留着一些痕迹处理掉才算真正干净。5.1 未分配空间怎么回收以及为什么扩展卷是灰的Windows 自带的磁盘管理有个硬限制只能把未分配空间并给紧邻它左侧的那个分区。也就是说如果 Linux 分区正好在 C 盘右边右键 C 盘会出现扩展卷一路下一步就合并进去了很方便。但如果 C 盘和未分配空间之间夹了一个恢复分区很多品牌机的 WinRE 分区就放在 C 盘右侧扩展卷就是灰的。这不是 Bug是设计限制。解决办法有两个一是用支持移动分区的第三方工具把恢复分区往后挪然后合并二是干脆不合并把这块未分配空间新建一个分区当数据盘用反正删都删了空间也没浪费。如果选择移动恢复分区操作完记得检查 WinRE 是否还正常reagentc /info显示已启用就没事如果显示已禁用跑一次reagentc /enable重新注册。另外动态磁盘和存储池上的分区不能直接扩展得先转换回基本磁盘这个限制提前知道能省不少折腾。5.2 各种开机异常先按这张表对号入座我把这次和设备群里遇到的案例整理成一张对照表遇到问题先查表别急着重装系统现象最可能的原因处理方向error: no such partition. Entering rescue mode... grub rescueGRUB 还在 MBR/ESP但配置文件所在分区已删Legacy 跑bootrec /fixmbrUEFI 切启动项并删 NVRAM 条目Minimal BASH-like line editing is supported后面跟grub掉进了 GRUB 命令行同样是配置文件找不到同上别在 grub 命令行里瞎试ls找分区开机提示No bootable device或Missing operating system系统保留分区丢了活动标志或启动项全丢diskpart设active再bcdboot重建Boot Manager 蓝屏0xc000000eBCD 指向的分区路径失效安装 U 盘启动后bcdboot C:\Windows /s S: /f UEFI开机要求输入 48 位恢复密钥BitLocker 检测到引导链变化输入事先存好的恢复密钥进系统后重新启用保护进系统后时间差 8 小时RTC 时间基准被改过删掉RealTimeIsUniversal注册表值见 5.3排查顺序上有个经验先看现象落在哪个引导阶段。MBR 阶段的问题表现为no bootable device这类硬盘级报错GRUB 阶段表现为黑底白字的各种 rescueWindows Boot Manager 阶段则表现为蓝屏错误码。三个阶段分清楚方向基本就定了不用一个个命令试过去。5.3 时间对不上、快速启动、安全启动这几个残留设置装双系统时很多人为了处理时间问题改过一个注册表值。它的位置在HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation下的RealTimeIsUniversal值为 1 表示让 Windows 按 UTC 写硬件时钟配合 Linux 的习惯。Linux 删掉之后这个设置就没有意义了留着会让时间偏移直接删掉这个值重启即可。快速启动也是类似。双系统时期为了避免 Linux 挂载 NTFS 分区时读到休眠残留状态不少人把 Windows 的快速启动和休眠关了。单系统之后可以按需开回来powercfg /h on打开休眠电源选项里勾上快速启动。不过如果你还在用外置硬盘读写 NTFS保持关闭也不亏。安全启动Secure Boot如果当初为了装 Linux 关过现在可以重新打开。UEFI 场景下这个设置跟 Linux 分区已经没关系了开着对系统安全性有好处。5.4 有些情况根本不用折腾引导最后提一句别把所有情况都当成双系统处理。如果你的 Linux 是装在虚拟机里的把虚拟机删掉就行宿主机引导一点没动。如果是用 WSL那是 Windows 的一个子系统控制面板里卸载对应组件即可。如果是用 U 盘或者移动硬盘启动的 Live 环境拔掉盘就完事。还有一种情况是 Linux 的引导装在了第二块硬盘上且那块盘不是主启动盘——这种情况下你只要在固件里把第一块盘设为首选然后格式化第二块盘连 MBR 都不用碰。判断方法很简单拔掉那块盘能不能正常进 Windows。能就说明引导没被污染放心格。我个人在这件事上的体会是真正花时间的从来不是删分区那三分钟而是删之前的那十分钟判断——引导模式对不对、EFI 分区在哪、BitLocker 密钥有没有存、U 盘做了没有。这四件事都确认过之后整个流程基本是照着敲命令一次就能过。反过来跳过判断直接删掉进grub rescue之后再去网上东拼西凑找命令风险反而高得多。手里握着安装 U 盘、屏幕上贴着分区截图这两个东西在心里就稳。