因为前一个月更换电脑,想方设法把系统迁移过去的时候把磁盘格式化了,现在发现恢复分区也被删了。于是,没法还原系统了,如果要重装只能用 PE 去恢复。为了让这个功能重新恢复,我花了一些时间弄明白了怎么重建分恢复分区,顺带整理一下恢复的过程。
前言
在 Windows 的系统设置里,有个系统重置的功能,通过这个功能我们就能把系统恢复到初始的状态。初始的系统保存在的在一个隐藏的分区里,这个分区叫做恢复分区(WinRE)。
WinRE 恢复分区
我们可以通过管理员打开 CMD,输入以下命令查看 WinRE 分区是否启用。因为我之前把磁盘格式化了,所以这里显示出来就是 Diabled 状态了。。
这里的 BCD 标识符也可能是全 0,具体取决于分区是否存在,以及 ReAgent.xml 文件配置
reagentc /info
WinRE 恢复分区并不会占用 C 盘多少空间,大概在 700MB~ 1GB 左右。那么,这么小的空间是如何做到放下一个系统的?其实,恢复分区存放的不是原始系统,而是一个极简的系统还原镜像文件。

恢复分区镜像
如果你下载过 Windows 的 ISO 镜像文件,就会知道被压缩成为 ISO 镜像的 Windows 系统大小大概在 5G~6G 左右。实际上,Windows 中有 ISO、WIM 和 ESD 这三种镜像格式,从左到右压缩比例逐步上升。
如果我们把 IOS 镜像解压成文件,进入到解压后的 source 目录中,就会发现在文件中有一个 install.wim 的镜像文件。

WinRE 恢复分区中的 Winre.wim 镜像文件,就在藏这个文件里。所以,我们还需要把这个文件解压成文件。然后可能会有多个文件,分别对应着应家庭版、专业版和教育版这些不同版本的系统版本。

同时,在目录下会有一个 [1].xml 文件,我们直接把这个文件打开格式化一下,就会发现这是每个版本的说明文件,找到对应版本的 INDEX,就可以区分哪个是我们需要的系统文件了。

然后,我们进入到文件的 Windows\System32\Recovery\ 路径下,把 Winre.wim 镜像文件复制出来就行了。

到这里,你肯定也和我一样很好奇这个 Winre.wim 镜像文件下面又放了些什么文件,所以我们可以简单看一下文件的结构。除了常见的几个系统文件,还原镜像只在 sources 目录下多加了两个启动修复和 Windows 环境恢复的程序,看起来应该是用来启用系统重置的启动程序。

删除 WinRE 恢复分区
如果你的 WinRE 恢复分区存在,但是损坏了,那需要先删除这个恢复分区后重建。在此之前,我们先关闭 WinRE 恢复功能。
reagentc /disable
然后,使用管理员打开cmd,输入 diskpart 命令进入 diskpart 模式,选中磁盘。
diskpart
list disk
select disk 0
接着看看我们磁盘里有哪些分区,我们可以使用 list partition 命令查看所有分区
list partition
这时我们能看到每个分区的类型,显示为恢复的分区就是我们要找的分区了。我们再次输入命令选中这个分区,看一下这个分区正常是不是被隐藏的。我这里的分区序号是 4,需要根据自己的磁盘修改。
select partition 4
detail partition
然后,我们就可以输入 delete partition override 命令就能删除这个分区了。
delete partition override
这个时候,恢复分区只是被删除了,磁盘的空间并不会恢复到其他分区,变成了未分配分区。如果空间足够可以直接用于创建新的恢复分区。当然,我们也可以进入分区设置,直接把这个分配的空间回收掉,或着在这个基础上扩展更多未分配空间,用来后续重建 WinRE 恢复分区。


创建 WinRE 恢复分区
因为我们现在的磁盘都是被分配的状态,没有未分配的空间,所以我们可以先到分区设置里把主分区的空间压缩一下


考虑到系统恢复镜像的大小可能不固定,这里建议给恢复分区保留 1G 的空间。

压缩完成后磁盘就会多出一个 1G 的未分配空间,我们右键新建简单卷,然后点击两次下一步。

选择不分配驱动器号或驱动器路径,点击下一步,默认不修改格式化分区为 NTFS 格式,点击下一步并完成创建。


然后,我们需要使用管理员打开cmd,输入 diskpart 命令进入 diskpart 模式,选中磁盘,然后查看分区列表。
diskpart
list disk
select disk 0
list partition
然后,找到我们刚才创建的 1G 的分区,使用 select partition 命令选中这个分区。我这里的序号是 6,这个序号需要根据自己的磁盘列表修改。
select partition 6
detail partition
创建分区还需要设置对应恢复分区的 ID,这个 ID 是固定的,设置成 de94bba4-06d1-4d40-a16a-bfd50179d6ac 就行了。
set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac override
同时,因为现在的恢复分区是可以被修改的,为了防止恢复分区被破坏,我们还需要锁定这个恢复分区。只需要添加分区属性设置为受保护就行了。
gpt attributes=0x8000000000000001
这时,我们使用 list partition 命令查看分区,就会发现原本的分区的分类变成了恢复分区,这说明恢复分区已经创建好了。

使用 Winre.wim 建立恢复分区数据
分区创建好之后,磁盘里面的数据是空的,所以还需要通过恢复镜像来载入数据。在恢复分区镜像的时候,我们已经拿到了 Winre.wim 镜像文件了。
所以,我们只需要把 Winre.wim 复制到系统 C 盘的 C:\Windows\System32\Recovery 目录下,同时删除 ReAgent.xml 文件。

然后使用管理员打开新的cmd,执行 reagentc /enable 命令就行了。这个命令会把 Winre.wim 移动到 WinRE 分区中重建恢复数据,同时保存镜像文件到 Recovery/WindowsRE 目录下。
如果命令执行后,显示 REAGENTC.EXE: 操作失败: b7,那么说明
Winre.wim文件有问题,无法用于数据重建。
reagentc /enable
执行成功后,系统 C 盘的 C:\Windows\System32\Recovery 目录下 Winre.wim 文件会被设置为隐藏文件,这个文件不能删除,如果这个文件被删除会导致 WinRE 变成关闭(Disabled)状态。
检查 WinRE 启用状态
到这里 WinRE 恢复功能就已经是启用(Enabled)状态了,我们可以再用 reagentc /info 命令查看。
reagentc /info
然后,我们进入 Windows 的高级启动看看 WinRE 是否正常。



给 Winre.wim 镜像添加驱动包
有些电脑安装厂商提供的驱动包才能正常运行类似音频蓝牙无线等系统功能,如果我们直接使用 Windows 提供的 Winre.wim 镜像就会缺少这些驱动,在系统重置后还得重新安装这些驱动安装。这样就有点麻烦了,我们其实可以直接把厂商提供的驱动添加到 Winre.wim 镜像里,然后再重建 WinRE 分区数据。
这里说的驱动文件一般是 inf 格式的,像我从惠普上下载的驱动是 exe 格式的文件,就得手动解压成文件。然后把需要添加的驱动文件和 Winre.wim 镜像放到同一个目录下,

为了操作 Winre.wim 镜像,我们需要把它挂在到磁盘上,所以需要先找一个磁盘准备一个挂在目录。我们需要使用管理员打开 cmd,使用 md 命令快速创建文件夹,这里我创建在了 E 盘,这个盘符根据自己有的磁盘修改,比如 D 盘。
md E:\Winre然后,使用 Dism 命令把 winre.wim 镜像挂在到系统路径上,这里我挂载到了 E 盘的 Winre 文件下。
这里要注意下路径斜杠是反斜杠
\,不能用正斜杠,不然会提示语法错误。
Dism /Mount-Image /ImageFile:"D:\ChromeCoreDownloads\Winre.wim" /index:1 /MountDir:"E:\winre"| 参数 | 说明 |
|---|---|
| /Mount-Image | 挂载镜像 |
| /ImageFile | 要挂载的镜像路径 |
| /index | 要挂载的镜像索引 |
| /MountDir | 挂载到的目录,该目录必须存在 |

挂载完成后,我们就可以打开 E:\winre 这个路径,可以看到已经有 Winre.wim 的文件了。

这个时候我们就可以用 Dism命令添加驱动了,这里的 D:\Driver\RealtekService.inf 换成你磁盘的驱动路径就行了。
Dism /Add-Driver /Image:"E:\winre" /Driver:"D:\Driver\RealtekService.inf" /ForceUnsigned
上面的方式是添加单个驱动程序,需要精确指定每个 inf 文件的路径,但是我们下载过来的驱动文件肯定不止一个,这样添加就效率太慢了。所以,我们可以加上 /Recurse 命令参数,只需要指定驱动目录就能自动扫描并添加所有子目录的驱动文件了。我这里把解压的驱动文件都放在了 D:\ChromeCoreDownloads,这个路径改成你保存的驱动目录就行了。
Dism /Add-Driver /Image:"E:\Winre" /Driver:"D:\ChromeCoreDownloads" /Recurse /ForceUnsigned| 参数 | 说明 |
|---|---|
| /Add-Driver | 指定要添加的驱动程序 |
| /Driver | 添加驱动文件的所在文件路径 |
| /Recurse | 递归搜索子目录中的驱动程序 |
| /ForceUnsigned | 强制安装未签名的驱动程序 |


可以看到我们用这种方法,自动安装了目录下 142 个驱动文件,如果一个个手动安装,那我这篇博客也写不完了...
添加好所有驱动文件后,就可以卸载这个 Winre.wim 镜像了。这个过程 Dism 会重新保存文件到镜像,需要等待一会。
这里建议把安装驱动文件时的 CMD 窗口关闭掉,不然卸载的时候可能因为程序占用文件,导致卸载不完全
Dism /Unmount-Image /MountDir:"E:\Winre" /Commit
接下来,我们就可以拿着 Winre.wim 文件像 使用 Winre.wim 建立恢复分区数据 的操作那样重建恢复分区的数据了。
结语
总算是把 Windows 的系统还原的一些东西整理完了,以后换系统应该能少花一些时间恢复了。现在也弄清除怎么建立 WinRE 恢复功能了,以后万一误删这个分区也能解决了。