Berd's Playground (Deprecated)

Won't receive any further updates.

08/8
14:33
踩坑

在 Windows 中创建恢复分区

0x00 前言

本来这些东西都是系统自己管理的…结果一顿神奇操作后 Windows 把我系统盘上的分区弄的乱七八糟,只好删掉恢复分区重新建立. 这里记录一下完整的建立过程.

Windows messed up

0x01 创建分区

一般我习惯将 Recovery 分区放在硬盘末尾, 这里直接用 DiskGenius 建立便于精确的指定位置和大小. 当然你也可以用 diskmgmt.msc 或者 diskpart 来操作, 由于这里由于需要把ESP(EFI)分区挪一挪防止出现空隙, 直接选择 DiskGenius 比较方便.

在 Windows Server 2012 下, winre.wim 的大小一般不会超过 300MB , 所以这里只需要建立一个 400MB 的恢复分区就完全够用.

首先计算出ESP分区、Recovery分区占用的扇区数量, 由于当前硬盘扇区大小是 512Bytes, 100MB的ESP分区就需要 100*1024*1024/512=204800 个扇区, 同理Recovery分区占用 400*1024*1024/512=819200 个扇区.

然后用磁盘总扇区数量减去两个分区扇区数量得到ESP分区的起始位置 1000215216-204800-819200=999191216, 由于这里需要对齐到2048个扇区, 所以还需要稍做调整, 后部空间也不会是整整的400M. 这里就不具体写计算过程了.

在DG中输入参数移动分区

然后建立一个新的NTFS分区, Recovery分区应该是没有卷标的所以留空即可. 这里将新建的分区设置盘符为 L:

建立新分区

0x02 提取 Recovery 镜像

这里的镜像是指 Winre.wim, 该镜像可以在安装镜像中找到. 首先插入你的安装媒介, 找到 install.wim 的位置. 这里选用写入了完整系统镜像的U盘来操作.

然后使用 dism /mount-wim /wimfile:"<你的 install.wim 路径>" /index:1 / mountdir:"<你喜欢的挂载点,注意需要是存在的文件夹>" /readonly 挂载镜像.

随后到 <挂载点>\Windows\System32\Recovery 文件夹中提取 Winre.wim 文件, 通常该文件都有System和Hide的属性, 你可以选择在 文件夹选项 中打开 显示隐藏的系统文件 或者使用 attrib -h -s Winre.wim 来去除这些属性.

提取后即可使用 dism /unmount-wim /mountdir:<挂载点> /discard 卸载镜像. 注意不要无意间修改了 install.wim, 这不是什么好习惯.

0x03 配置 Recovery 环境

将提取到的 Winre.wim 文件复制或移动到 L:\Recovery\WindowsRE\Winre.wim,目录结构右键自己建就行了. 这里 L: 是上面新建的分区盘符.

使用 reagentc /setreimage /path L:\Recovery\WindowsRE\Winre.wim 设置恢复环境目录

然后使用 reagentc /enable 启用恢复环境, 检查是否启用成功

0x04 设置权限

一般情况下这一步是可选的, 只是为了安全和尽可能贴近原来的 Recovery 分区结构.

先到 Recovery 文件夹中查看 WindowsRE 文件夹的所有者, 因为我发现在 Windows 10 中该文件夹的所有者是 SYSTEM, 而在 Windows Server 2012 R2 下所有者是 Administrators. 为了避免不必要的麻烦最好先检查一下.

随后在高级安全设置中更改所有者并删除当前用户(这里是 Users 组)的权限. 如果权限是继承的, 到分区的权限管理里面删除即可. 当然你也可以禁用继承然后直接设置权限.

随后使用 attrib +S +H +I Recovery 指令隐藏文件即可

接下来设置磁盘ID, 用DiskGenius设置似乎有Bug或者是被系统自动恢复了, 所以我们选用 diskpart 来设置TypeID为 de94bba4-06d1-4d40-a16a-bfd50179d6ac, 参考资料. 然后移除盘符即可.

0x05 测试恢复环境

其实很简单的, 按住 Shift 键点一下重启, 然后打开 疑难解答 一项检查是否有命令提示符等高级工具即可

另外也可以打开 diskmgmt.msc 检查是否显示恢复分区

在 Windows 中创建恢复分区