记一次硬核修复:合并C盘D盘后重建 Windows 恢复分区(解决 BCD 全0假死 Bug)

在合并Windows系统盘和D盘时,因为删除了中间的恢复分区导致 WinRE 丢失。本文详细记录了如何纯手工敲代码重建恢复分区,并解决 reagentc /enable 提示成功但 BCD 标识符全 0 的顽固 Bug。

起因:C盘和D盘融合的“拦路虎”

最近由于 C 盘空间吃紧,打算把同在一块物理硬盘上的 D 盘删掉,将其空间合并给 C 盘。但是打开 Windows 自带的“磁盘管理”后发现,删除 D 盘后,C 盘的“扩展卷”选项依然是灰色的。

原因是:C 盘和未分配空间之间,隔着一个几百兆的“恢复分区”。Windows 的规则是只能向右侧紧挨着的未分配空间扩展。

为了顺利扩容,我使用 diskpartdelete partition override 命令强制删除了这个碍事的恢复分区,顺利完成了 C 盘的扩容。但代价是,系统的 Windows 恢复环境 (WinRE) 随之丢失。

作为一名有强迫症的用户,我决定纯手工重建这个恢复分区。但在这个过程中,遇到了一个极其顽固的 Windows 底层 Bug。


踩坑:令人崩溃的“假成功” Bug

划出空间、建好分区、拷入恢复文件 winre.wim 后,我尝试用命令重新绑定恢复环境。

诡异的事情发生了:执行 reagentc /enable 提示“操作成功”,但使用 reagentc /info 查看状态时,依然是 Disabled,并且 引导配置数据(BCD)标识符全部变成了 0

1
2
3
4
5
6
7
Windows 恢复环境(Windows RE)和系统初始化配置
信息:
    Windows RE 状态:           Disabled
    Windows RE 位置:
    引导配置数据(BCD)标识符:   00000000-0000-0000-0000-000000000000
    ...
REAGENTC.EXE: 操作成功。

原因分析: 由于之前暴力删除了原恢复分区,系统 C:\Windows\System32\Recovery 目录下隐藏的配置文件 ReAgent.xml 里的记录损坏了。它缓存了旧的分区信息,导致系统无法向 BCD 引导区写入新 ID,陷入了“虽然提示成功,但底层其实写入失败”的死循环。


终极解决流程:教科书级重建恢复分区

如果你也遇到了同样的问题,请严格按照以下四个阶段的顺序操作。

前提准备

  1. 右键开始菜单 -> 磁盘管理,从 C 盘“压缩卷”划出约 850MB - 1000MB 的未分配空间。
  2. 确认你手里有一份正常的 winre.wim 文件(通常在 C:\Windows\System32\Recovery 隐藏目录里,如果没有,可以从官方系统镜像 install.wim 中提取)。
  3. 管理员身份运行命令提示符 (CMD)。

第一阶段:创建并格式化普通分区

首先,不要急着把分区设置成“恢复分区”属性,否则它会被系统锁死,无法写入文件。

在 CMD 中输入 diskpart 回车,执行以下命令:

1
2
3
4
5
6
7
list disk
select disk X      # 将 X 替换为你的系统盘编号(如 select disk 2)
list part          # 查看刚才划出的未分配空间情况
create partition primary  # 将未分配空间创建为主分区
format quick fs=ntfs label="Recovery"  # 格式化为 NTFS
assign letter=R    # 分配一个临时盘符 R 盘(方便后续拷文件)
exit               # 退出 diskpart

第二阶段:粉碎旧配置并放入文件

这一步是解决 BCD 全 0 Bug 的核心,必须粉碎损坏的 ReAgent.xml

在 CMD 中继续输入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
:: 1. 彻底删除损坏的配置文件
cd /d C:\Windows\System32\Recovery
attrib -s -h -r ReAgent.xml
del ReAgent.xml

:: 2. 在 R 盘创建标准的恢复目录结构
md R:\Recovery\WindowsRE

:: 3. 将 winre.wim 复制到 R 盘(假设你的 wim 文件目前在 C 盘该目录下)
xcopy C:\Windows\System32\Recovery\winre.wim R:\Recovery\WindowsRE\ /h /y

(看到提示“复制了 1 个文件”即代表成功。)

第三阶段:重新绑定并激活 WinRE

现在环境已经完全干净,可以重新注册指路牌并启用了:

1
2
3
4
5
6
7
8
:: 1. 告诉系统恢复环境的新路径
reagentc /setreimage /path R:\Recovery\WindowsRE

:: 2. 启用恢复环境
reagentc /enable

:: 3. 重启系统再验证结果
reagentc /info

此时,见证奇迹的时刻到了!你会看到状态变成了 Enabled,并且 BCD 标识符不再是全 0,而是生成了一串全新的有效 ID(例如 27c05624-97e3-11f1...)。


总结

在折腾 Windows 磁盘分区的过程中,“删分区容易,重建分区难”。 执行 reagentc /setreimage 只是设置了路径,真正生成 BCD ID 是在 reagentc /enable 这一步完成的。遇到报错或全 0 的情况,切记先建普通分区放文件,删掉旧 XML 缓存激活成功后,再去更改分区 ID 属性。顺序一旦弄反,就会在权限和报错中无限死循环。

使用 Hugo 构建
主题 StackJimmy 设计