1. 动手前先摸清家底:双系统的分区与引导到底长什么样
删双系统这件事,最难的部分从来不是"删",而是"删哪几个"。我见过太多人一进磁盘管理,看到几个不认识的分区就手一抖,把 Windows 的恢复分区或者 EFI 分区给删了,结果两个系统一起躺在开机黑屏里。所以这一节不聊操作,只聊摸底——你得先知道自己的机器上到底有什么。
1.1 双系统的三种常见形态
市面上的"双系统"其实差别很大,处理方式完全不同。第一种是Windows + Linux,比如 Win11 配 Ubuntu 24.04,这是绝大多数人遇到的场景,也是坑最多的一种,因为两套系统用的是同一套引导链路上的不同环节。第二种是Windows + Windows,典型是 Win10 上再装一个 Win7,或者给老机器留一个纯净系统做备用,这种的引导项都在 Windows Boot Manager 里,拆起来相对干净。第三种是双硬盘各装一个系统,物理上互相独立,但引导项可能互相登记在对方的 EFI 分区里,删的时候要两头都看一眼。
先确认自己属于哪一种,比后面任何操作都重要。判断方法很简单:开机进 BIOS 看启动项列表,如果列里同时有Windows Boot Manager和ubuntu,那就是典型的第一种;如果只有一条Windows Boot Manager但里面能看到两个系统的启动菜单,那是第二种。
1.2 UEFI 和 Legacy 决定了工作量的一半
同样是删 Ubuntu,UEFI 引导和 Legacy BIOS 引导干活的量差一倍不止。UEFI 模式下,每个系统在硬盘的 EFI 系统分区里都有自己的目录,Windows 是EFI\Microsoft,Ubuntu 是EFI\ubuntu,同时固件里还存着若干条启动项(NVRAM 里),删完分区还得清理这两处,否则开机会看到一条指向空气的启动项,甚至直接掉进 GRUB 命令行。
Legacy 模式下引导信息写在磁盘开头的 MBR 里,只有一个"活动分区"能接管启动。删掉 Linux 之后,MBR 里残留的 GRUB 代码会让机器找不到系统,必须用 Windows 安装盘或 PE 执行一次bootrec /fixmbr之类的修复。
怎么判断自己是哪种?Windows 下按Win + R输入msinfo32,看"BIOS 模式"那一行——写"UEFI"就是 UEFI,写"传统"就是 Legacy。这一步花十秒钟,能省掉后面半小时的瞎折腾。
1.3 备份清单:删之前必须落袋的东西
删系统本质上是删分区,分区一删,里面的数据基本没有常规手段能救回来。所以动手之前,我列了一份必做清单,你可以直接照抄:
- 另一个系统的个人文件:桌面、文档、下载、浏览器书签(Chrome/Edge 登录账号可同步,但本地配置文件不会跟着走)、微信和 QQ 的聊天记录目录。
- 开发环境相关:SSH 私钥、Git 未推送的本地仓库、数据库数据目录、虚拟环境的配置文件、各类
.env、本地的 Docker 镜像和 volume。 - 授权与凭证:某些软件的机器码授权、离线激活文件,换系统或重装后可能需要重新申请。
- BitLocker 恢复密钥:如果 Windows 盘开了 BitLocker,动手前务必导出恢复密钥,主板或引导链路的任何变动都可能触发重新验证。
注意:如果被删的那个系统盘启用了 BitLocker 或设备加密,先解密再操作。加密状态下删分区,数据彻底没救,而且有时候会连带影响引导修复的流程。
2. 分区表和引导加载器:删错一个,两个系统一起挂
摸清了形态,下一步是看懂分区表。我习惯把双系统硬盘比作一栋合租房:EFI 分区是大门的钥匙柜,两个系统各放了一把钥匙;根分区是各自的房间;恢复分区是物业预留的储物间,不能动。你把钥匙柜砸了,谁的钥匙都没了。
2.1 一块装了双系统的硬盘,分区是怎么排的
以一块 512G 硬盘、UEFI 模式、Win11 + Ubuntu 为例,用 DiskGenius 或diskpart看到的分区大概长这样:
| 序号 | 名称 | 典型大小 | 作用 | 能不能删 |
|---|---|---|---|---|
| 1 | EFI 系统分区 | 100-300MB | 存放所有系统的引导文件 | 绝对不能删 |
| 2 | MSR 保留分区 | 16MB | Windows 保留 | 不要动 |
| 3 | Windows C 盘 | 100G+ | 保留的那个系统 | 保留 |
| 4 | Windows 恢复分区 | 500MB-1G | WinRE 恢复环境 | 尽量保留 |
| 5 | Ubuntu 根分区 | 50G+ | ext4,被删对象 | 可删 |
| 6 | Ubuntu swap | 4-16G | 交换分区 | 可删 |
| 7 | 共享数据分区 | 视情况 | NTFS 或 exFAT | 看归属 |
值得注意的是,Ubuntu 在 UEFI 下通常还会在 EFI 分区里放一个EFI\ubuntu\目录,里面是grubx64.efi和shimx64.efi。这个目录只占几兆,但它是让 GRUB 菜单出现的罪魁祸首,删系统时必须一起清掉。
2.2 Windows Boot Manager 和 GRUB 各管哪一摊
理解这条链路,后面的操作就都能自己推导了。开机顺序是这样的:固件读取 NVRAM 里的启动项列表,排在第一位的那条被加载。如果第一条是ubuntu,加载的就是 EFI 分区里的grubx64.efi,GRUB 再根据/boot/grub/grub.cfg生成菜单,菜单里可能包含一个"Windows Boot Manager"的条目,选中它才会去加载EFI\Microsoft\Boot\bootmgfw.efi。
所以问题来了:你把 Ubuntu 的分区全删了,但 NVRAM 里那条ubuntu启动项还在,固件照样会去加载EFI\ubuntu\grubx64.efi,可这个文件已经被你删了,于是开机直接掉进grub rescue>提示符,或者报"no such device"。
反过来,如果你保留 Linux 删 Windows,那 GRUB 菜单里那条指向 Windows 的记录就变成了死链,每次开机都要卡一两秒等它超时,看着很别扭,得手动清理。
2.3 误删后果对照表
| 误删对象 | 症状 | 补救难度 |
|---|---|---|
| EFI 系统分区整个删掉 | 两个系统都进不去,开机无引导 | 高,需要重建 ESP 并重装引导 |
EFI 分区里的EFI\Microsoft | 只剩 Linux 可进,Windows 彻底失联 | 中,用安装盘执行 bcdboot 可恢复 |
EFI 分区里的EFI\ubuntu | 开机掉进 grub rescue | 低,修复 Windows 引导即可 |
| MSR 或恢复分区 | 一般无感,但系统更新和恢复功能会异常 | 低到中,不建议动 |
| Windows C 盘 | 数据没了 | 极高,只能靠备份 |
这张表我贴在自己的运维笔记里,每次动手前扫一眼,手就稳了。
3. 保留 Windows、删掉 Ubuntu:分区回收 + 引导修复全流程
这是最常见的需求,也是我处理过最多次的场景。整个流程分五步:识别分区、删除分区、修复引导、清理残留、回收空间。顺序不能乱,尤其是"修复引导"必须在删分区之后立刻做,否则你重启一次就可能进不去系统。
3.1 第一步:在 Windows 里认出 Linux 的那些分区
打开"磁盘管理"或者 DiskGenius,你会看到几个"没有盘符、文件系统显示为空"的分区。怎么确认它们是 Linux 的?看三点:文件系统标识(ext4、swap 在 Windows 下不显示,DiskGenius 会标成 Ext4 或 Linux Swap)、位置(通常紧跟在 Windows 分区之后)、大小(根分区几十 G,swap 一般等于或略大于内存)。
更稳妥的做法是用命令行交叉验证。以管理员身份打开 CMD,执行:
diskpart list disk select disk 0 list partition输出的分区列表会显示每个分区的类型和大小,Linux 分区在这里通常标为"未知"。如果拿不准,可以用 Linux 启动 U 盘进 Live 环境,跑一句lsblk -f,输出里的FSTYPE和LABEL一目了然,ext4、swap就是你要删的,vfat且挂在/boot/efi的是 EFI 分区,绝对别碰。
注意:如果硬盘之前装过 LVM 或开启了 LUKS 加密,Linux 分区在 Live 环境下会显示为
LVM2_member或crypto_LUKS。这种情况建议先在 Live 环境里用vgs、lvs确认卷组结构,再决定删哪一层,别看到"未知分区"就砍。
3.2 删除分区:图形工具和命令行两条路
图形派的直接用 DiskGenius 右键删除分区,操作直观,还能顺手格式化。命令行派用diskpart更精确,适合远程或者图形界面抽风的时候。命令行的完整流程是:
diskpart select disk 0 list partition select partition 5 delete partition override select partition 6 delete partition override exitdelete partition override里的override参数是关键,普通删除命令对被保护或系统识别异常的分区会拒绝执行,加上这个参数才能强删。每删一个分区前,务必再确认一遍序号和大小,diskpart没有后悔药。
我的习惯是:删之前把list partition的输出截图存一份,万一后面发现删错了,至少知道原来长什么样。
3.3 修复 Windows 引导,让开机不再掉进 grub 提示符
分区删完,EFI 分区里那个EFI\ubuntu目录还在,NVRAM 里的启动项也还在。这时候重启,大概率会看到grub rescue>。修复方法有两个层次:
最省事的办法是重启进 BIOS,把Windows Boot Manager调到启动顺序第一位。这样固件直接加载 Windows 引导,GRUB 根本没机会出场。
更彻底的办法是重新生成 Windows 引导文件,顺便把启动项理顺。用 Windows 安装 U 盘启动,进"修复计算机 → 疑难解答 → 命令提示符",然后:
diskpart list disk select disk 0 list partition select partition 1 assign letter=S exit bcdboot C:\Windows /s S: /f UEFI /l zh-cnbcdboot这条命令做的事,是把 Windows 的引导文件重新写入 EFI 分区,并自动在 NVRAM 里创建一条Windows Boot Manager启动项。/s S:指定目标 ESP 分区,/f UEFI指定固件类型,/l zh-cn指定引导菜单语言。执行完会提示"已成功创建启动文件",这时候重启基本就能直接进 Windows 了。
3.4 清理 EFI 分区残留和 UEFI 启动项
bcdboot修好了 Windows 引导,但EFI\ubuntu目录和 NVRAM 里的 ubuntu 启动项还在,属于"留了个尾巴"。清理分两步。
第一步,挂载 EFI 分区删目录。在 Windows 管理员 CMD 里:
mountvol S: /s这条命令把 EFI 系统分区挂到 S 盘。然后进S:\EFI\,你会看到Microsoft和ubuntu两个文件夹。删掉ubuntu整个目录,注意不要动Microsoft和Boot。删完执行mountvol S: /d卸载。
第二步,清 NVRAM 启动项。先列出所有固件启动项:
bcdedit /enum firmware输出里每个条目都有一行identifier,形如{xxxxxxxx-xxxx-...}。找到描述为ubuntu的那条,复制它的 identifier,执行:
bcdedit /delete {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /f/f表示强制删除。删完再bcdedit /enum firmware确认一遍,列表里应该只剩 Windows 相关的条目。
如果你更习惯 Linux 环境,也可以从 Live U 盘执行efibootmgr,输出里每条启动项前面有个四位数编号,efibootmgr -b 0003 -B就能删掉编号为 0003 的那条,比记 GUID 方便。
3.5 C 盘扩容为什么"扩展卷"是灰的
删掉 Linux 分区后腾出来的空间是"未分配",很多人第一反应是右键 C 盘选"扩展卷",结果发现这个选项是灰的。原因很简单:Windows 的扩展卷只能吃掉紧邻在右侧的未分配空间。如果你的分区顺序是EFI → C盘 → 恢复分区 → 未分配(原 Ubuntu),中间隔着一个恢复分区,扩展卷就用不了。
解法有三种。一是用 DiskGenius 的"调整分区大小"功能,它可以把恢复分区往前挪,或者直接把未分配空间合并进 C 盘,操作前它会提示涉及数据移动,别中途断电。二是用 PE 环境下的分区工具,原理同上,但更稳。三是干脆把未分配空间单独新建一个数据盘,不折腾系统分区,对不熟悉分区操作的人来说,这是最不容易出事的选择。
注意:涉及分区移动和合并的操作,风险等级比单纯删除高一个档次。我的经验是提前把重要数据拷到外置硬盘,操作过程中别让笔记本断电,台式机最好接个 UPS 或者至少别在雷雨天干这事。
4. 保留 Linux、删掉 Windows:GRUB 瘦身与空间回收
方向反过来,情况就变了。Linux 下操作分区比 Windows 灵活得多,但引导这块反而要更小心,因为 GRUB 的配置文件是手写的,删完不更新,菜单里会一直挂着一个进不去的 Windows 条目。
4.1 删 NTFS 分区之前的数据抢救
Linux 挂载 NTFS 分区依赖ntfs-3g,能读能写,但默认挂载参数下写入大文件偶尔会出现权限或元数据问题。所以抢救数据的正确姿势是:只读挂载,把文件拷到 Linux 分区或者外置硬盘,再从 Windows 侧确认一遍文件完整性。挂载命令:
sudo mkdir /mnt/win sudo mount -o ro /dev/nvme0n1p3 /mnt/win用完记得sudo umount /mnt/win。如果 Windows 开了快速启动(Fast Startup),NTFS 分区会处于"休眠中的脏状态",Linux 侧只能只读挂载,写会直接报错。这种状态下删分区没问题,但如果你想在删之前拷点东西出来,先进 Windows 关掉快速启动,再正常关机一次。
还有一个容易被忽略的点:Windows 的用户目录里有大量隐藏的系统文件,比如pagefile.sys、hiberfil.sys、System Volume Information,这些不用拷,拷了也没用。
4.2 更新 GRUB、清掉菜单里的 Windows 残留
Windows 分区删掉之后,GRUB 菜单里那条"Windows Boot Manager"就失效了。更新方式取决于你的发行版,Ubuntu 系是:
sudo update-grubDebian 系、CentOS 系是:
sudo grub-mkconfig -o /boot/grub/grub.cfg但光执行这一句往往不够——GRUB 的os-prober机制会扫描硬盘上的所有系统,如果它的缓存或者配置里还留着 Windows 的记录,菜单里照样会有。彻底的做法是编辑/etc/default/grub,加上:
GRUB_DISABLE_OS_PROBER=true GRUB_TIMEOUT=3GRUB_DISABLE_OS_PROBER=true让 GRUB 不再主动扫描其他系统,GRUB_TIMEOUT=3把等待时间从默认的 10 秒压到 3 秒。改完再执行一次update-grub,重启后菜单就干净了。
如果你希望开机直接进 Linux 连菜单都不显示,把GRUB_TIMEOUT=3改成GRUB_TIMEOUT=0并加上GRUB_TIMEOUT_STYLE=hidden。不过我一般不建议这么做,系统出问题时连菜单都进不去,排查起来更麻烦。
4.3 EFI 分区里的 Microsoft 目录要不要删
这是个高频问题。答案分两种情况:如果你只删了一个 Windows 分区,但机器上还留着 Windows 引导文件,且你不打算再装 Windows,那可以删EFI\Microsoft;如果只是删了其中一个 Windows 系统,另一个 Windows 还在,那绝对不能删,因为两个系统共用同一个EFI\Microsoft\Boot目录。
EFI 分区在 Linux 下通常挂在/boot/efi,直接进去看:
ls /boot/efi/EFI/看到Microsoft、ubuntu、Boot这些目录。删Microsoft之前,先用efibootmgr确认固件里还有没有Windows Boot Manager启动项,有的话配套一起删,否则会留下一条指向空文件的启动项。
4.4 把回收的空间合并进 Linux 分区
删掉 NTFS 分区后,空间变成未分配。要合并进 Linux 分区,得看未分配空间的位置:
- 紧邻在 Linux 分区右侧:直接
growpart或图形工具扩展分区,然后resize2fs扩展文件系统。 - 在 Linux 分区左侧:需要移动分区起始位置,只能用 GParted 这类支持移动的工具,耗时较长。
- 中间隔着 swap 分区:先删掉 swap 再重建,或者先把 swap 挪走。
命令行扩展的典型流程(以/dev/nvme0n1p5为例):
sudo growpart /dev/nvme0n1 5 sudo resize2fs /dev/nvme0n1p5growpart负责调整分区表,resize2fs负责调整文件系统,两步都做完空间才真正可用。ext4 支持在线扩展,不用卸载分区,但操作期间别拨电源。
5. 双 Windows 与双硬盘:几种不常见但很容易翻车的场景
5.1 同一块盘上 Win10 + Win7,用 bcdedit 精确拆弹
双 Windows 的情况比 Linux 简单,因为引导都在Windows Boot Manager里统一管理。先在管理员 CMD 里看一眼引导菜单:
bcdedit /enum all输出里的"Windows 启动管理器"段会列出所有引导项,每个条目有identifier、device、osdevice、description。找到description是"Windows 7"的那条,先删它的displayorder,再删条目本身:
bcdedit /displayorder {xxxx-xxxx} /remove bcdedit /delete {xxxx-xxxx}顺序反过来也行,但先移出显示列表更稳,避免删到一半引导菜单出错。更省事的图形方式是msconfig→ "引导"选项卡 → 选中要删的系统 → 删除,效果一样。
删完重启确认能正常进 Win10,再回去把 Win7 的分区删掉,最后用磁盘管理或者 DiskGenius 回收空间。别在删引导项之前就删分区,那样会出现引导菜单里有条目、但对应分区已经不存在的情况,开机直接报 0xc0000225。
5.2 两块独立硬盘各装一个系统
这种场景物理上很干净,删起来最爽,但有两个隐藏坑。坑一:EFI 分区可能只有一块盘上有。很多主板在 UEFI 模式下把两块盘的引导都塞进同一块盘的 ESP,你删了这块盘上的系统,另一块盘的系统也可能起不来。判断方法是用diskpart或lsblk看每块盘上有没有独立的 EFI 分区,没有的话就属于共用,删之前要先在另一块盘上重建 ESP 并写引导。
坑二:NVRAM 启动项是全局的,不是按盘存的。删完一个系统,记得用bcdedit /enum firmware或efibootmgr清掉对应条目。
5.3 品牌机恢复分区、苹果 Boot Camp、国产 Linux 的差别
品牌机(联想、华硕、神舟等)通常有多个厂商恢复分区,分布位置很刁钻,有时候夹在 C 盘和 Linux 分区之间。这些分区删了之后,一键恢复功能就废了,建议保留。
苹果电脑上的双系统基本是 Boot Camp 装的 Windows。移除方式不该手动删分区,而是回到 macOS 打开"启动转换助理",走"移除 Windows"流程,它会自动处理分区合并和引导清理。手动删的话,macOS 的混合 MBR 结构容易出问题,恢复起来很麻烦。
国产 Linux(麒麟、统信等)基于 GRUB 体系,操作思路和 Ubuntu 基本一致,但要注意厂商有时会预留一个专用的恢复或数据分区,删除前先查一下官方文档,别把恢复环境砍了。
6. 删完之后进不去系统?故障排查与速查表
6.1 grub rescue 现场的救命三行命令
开机看到grub rescue>,说明 GRUB 本体还在,但找不到配置里的根分区。先探测一下硬盘上还有哪些分区:
grub rescue> ls假设输出是(hd0) (hd0,gpt1) (hd0,gpt2) ...,逐个ls (hd0,gpt2)/找哪个分区里有boot目录或者grub目录。找到之后:
grub rescue> set root=(hd0,gpt2) grub rescue> set prefix=(hd0,gpt2)/boot/grub grub rescue> insmod normal grub rescue> normal顺利的话就能进入正常的 GRUB 菜单,再选 Windows 启动,进系统后用前面说的bcdboot彻底修复。如果ls出来的分区全是空的,那说明 ESP 里的 grub 文件还在但配置丢了,用安装盘重新写引导更省时间。
6.2 Windows 蓝屏 0xc0000225 / 找不到 winload.efi
这个错误的含义是"引导配置指向的系统分区已经不存在",通常发生在你删了某个 Windows 分区但没清理对应的 bcdedit 条目。修复方式是进 WinRE 命令提示符,先看现有引导项:
bcdedit /enum all把device指向已删除分区的条目删掉,然后重新执行一次bcdboot C:\Windows /s S: /f UEFI重建引导。如果连引导菜单都出不来,就用bootrec /rebuildbcd让它重新扫描系统分区,扫描到有效系统后按提示加入引导列表。
6.3 问题速查表
| 现象 | 最可能的原因 | 处理动作 |
|---|---|---|
开机进grub rescue> | ESP 里 grub 文件残留但分区已删 | 修复 Windows 引导 + 清 EFI 残留 |
开机进grub>但菜单为空 | grub.cfg 丢失 | 用 Live 盘重建 grub 配置 |
| 报错 0xc0000225 | bcdedit 条目指向已删分区 | 删条目 + bcdboot 重建 |
| 只有黑屏无任何提示 | 启动顺序里第一位指向不存在的设备 | 进 BIOS 调整启动顺序 |
| 扩展卷是灰的 | 未分配空间不与目标分区相邻 | 用分区工具移动分区或另建数据盘 |
| Linux 下无法挂载 Windows 盘 | 快速启动导致脏状态 | 进 Windows 关闭快速启动后正常关机 |
这张表覆盖了我遇到过的九成情况,剩下那一成多半是硬件或者固件层面的问题,比如主板对某些启动项识别异常,更新一下 BIOS 往往就好了。
7. 我踩过的坑和一些不太写进教程的细节
7.1 操作顺序搞反,等于白干一遍
我最早几次翻车,都是顺序问题。正确顺序永远是:备份数据 → 清理引导项 → 删分区 → 修引导 → 回收空间。很多人图省事,直接先删分区,结果开机就卡住,只能拿 U 盘去救场,绕一大圈回来还得补引导那一步。另外,删引导项要在删分区之前做,这样万一删错了还有回旋余地,因为分区还在,系统还能进去。
还有一个小细节:修复 Windows 引导的时候,bcdboot会自动创建新的启动项,但旧的ubuntu启动项不会自动删。所以bcdedit /enum firmware这一步别省,每次都要手动确认一遍列表,看看有没有多余条目。我习惯把列表截图存下来,下次再动这台机器的时候有据可查。
7.2 几个"删干净"的检查项
删完之后怎么确认真的干净了?我的检查清单是:
- BIOS 启动项列表里只剩目标系统的启动项,没有第二、第三条残留。
- EFI 分区里被删系统的目录已经不存在,只剩
Microsoft、Boot和目标系统自己的目录。 - 磁盘管理里没有额外的"未分配"碎片,或者这些碎片已经被成功合并/建成了新分区。
- 开机时间恢复正常,不会卡在某个等待超时的界面。
最后分享一个我认为最省心的做法:如果你的机器支持从 U 盘启动,手边常备一个 PE 启动盘,里面放好 DiskGenius、bootice 和 Windows 安装镜像。这套东西平时用不上,但每次动分区,它就是我敢下手的底气。分区操作说到底是个不可逆的活儿,工具备齐了,胆子才大得起来。