背景

主要是遇到了两个问题:

  • 想给两台Windows虚拟机的C盘扩容,但安装程序将恢复分区直接放在了C盘挡了路
  • 安装KB5034441时遇到了0x80070643错误(参见微软社区的帖子),这一错误与恢复分区容量不足有关

修复和扩容恢复分区的流程其实差不多,所以在此记录一下。

操作流程

S1-创建/扩容恢复分区

此流程参考微软官方的指南。请留意磁盘和分区的索引号,错误的命令会导致数据丢失。

  1. 使用管理员身份启动cmd
  2. 执行reagentc /info检查WinRE状态,留意下路径和安装磁盘;如果正在运行的话执行reagentc /disable停用WinRE
  3. 创建或扩容恢复分区
    • 运行diskpart
    • 执行list disk查看磁盘状况;执行select disk <index>选中系统所在磁盘;执行list part查看分区状况
    • 如果需要扩容恢复分区的话,就需要将C盘缩小一点,然后删除并创建新的恢复分区:
      • 先选中系统分区select part <index>,然后缩小分区大小shrink desired=250 minimum=250
      • 接下来选中恢复分区select part <index>,并删除恢复分区delete part override
    • 而对于我的两台VM而言,恢复分区已经不存在了,接下来便是共通的恢复分区创建步骤,MBR和GPT磁盘略有不同,可通过list disk检查GPT列中是否有星号判断(有星号则为GPT磁盘)
      • 对GPT磁盘,执行create partition primary id=de94bba4-06d1-4d40-a16a-bfd50179d6ac然后gpt attributes =0x8000000000000001;而对MBR磁盘则执行create partition primary id=27
      • 格式化恢复分区format quick fs=ntfs label=”Windows RE tools”
      • 如果为MBR磁盘,追加执行set id=27
    • 检查一下恢复分区是否成功创建list vol

S2-修复恢复分区

在完成恢复分区创建/扩容后,尝试执行reagentc /enable启用WinRE,但出现如下报错:

REAGENTC.EXE: 未找到 Windows RE 映像。

参考这篇帖子,有两种途径可以修复WinRE。

  1. 使用SFC(详情参考这里),执行sfc /scannow,Windows会尝试扫描并修复损坏文件。但这种方法对我的虚拟机并未生效。
  2. 从ISO安装镜像提取winre.wim用于修复(参考这篇教程)
    • 挂载Windows安装镜像ISO到X盘(假设),使用7-zip打开X:\sources\install.wim;这里会找到若干个数字编号的目录,可以打开[1].xml查看每个编号对应的Windows版本
    • 选择对应Windows版本的目录,对应找到X:\sources\install.wim\<index>\Windows\System32\Recovery\winre.wim文件,拷贝出来保留
    • 将拷贝出来的winre.wim放到需要修复的系统的C:\Windows\System32\Recovery目录下
  3. 此时再次尝试reagentc /enable,若完成修复则可以启用WinRE了;如果S1中完成了对恢复分区的扩容,可以再次尝试安装Windows更新