如何恢复Windows EFI分区(UPDATED on 08-10)

loading... read

最近在电脑上安装了最新的 Arch Linux,这次不同于之前,使用了 Gnome 的桌面环境,用起来还不错,所以就按照我之前的配置文件,光速配置了一下电脑。然而当我配置 Windows 双启动的时候,却找不到 Windows 的 EFI 分区了,很奇怪,我的两个系统安装在两个硬盘里,所以不存在我误操作删除 EFI 分区的问题。而且我在 Linux 系统还能挂载 Windows 的数据,数据也没有丢失。

然后我尝试搜索问题出现的原因,没找到,不过却找到了解决方案,方法倒是不是特别难,用到了一个 Windows 的bcdboot命令,这里记录一下。

操作流程

第一步,准备一个 Windows 的安装介质,推荐使用Ventoy,开源免费,甚至不用格式化 U 盘!!

第二步,boot 进 live 安装系统,依次点击Repair Computer > Troubleshoot > Advanced > Command Prompt

第三步,进入命令提示符后,使用以下命令显示分区:

$ diskpart // 运行diskpart
diskpart> list disk  // 列出所有硬盘,每个硬盘都有一个编号(e.g. 0/1/2)
diskpart> sel disk <disk_id> // 选择Windows系统EFI分区所在的硬盘,如果不存在,则需要手动创建,具体下方`UPDATED`的详细说明
diskpart> list partition // 列出所有分区
diskpart> sel partition <id> // 选择EFI分区
diskpart> assign letter=F // 分配EFI一个新盘符
diskpart> exit //退出
$ bcdboot C:\Windows /s F: /f ALL // 创建所有Windows boot files到F盘
$ reboot //重启即可正常进入Windows

额外操作

UPDATED:

最近因为某种情况,Windows 启动项又消失了,这次甚至连 EFI 分区都没有了,所以又折腾了很久,这里再更新一下。
如果出现 EFI 分区直接消失的情况,可以通过重建 EFI 分区来解决,以下是具体操作步骤:

// 创建EFI类型的新分区
diskpart> create partition efi size=100
// 格式化
diskpart> format quick fs=fat32 label="System"
//分配卷标
diskpart> assign letter=L
diskpart> exit
X:Resources> bcdboot C:\Windows /s F: /f UEFI

如果最后提示以下内容,说明成功创建:

Boot files successfully created.

此时退出 CMD,然后重启电脑,进入 BIOS,应该就能看到 Windows 的启动选项了。

p.s. 有的时候,这里分配给 Windows 的系统分区的 letter 可能不是C,你要自己确认一下,可以使用list partition命令来查看具体在哪个分区(一般都有 label,比如系统或者OS之类的),确认之后,再执行上面的bcdboot,否则会创建失败。

总结

总的来说,EFI 分区消失并不是什么太大问题,恢复起来也不是很麻烦,但是每次出现这个问题就很困扰,我到现在都不知道具体什么原因引起的,猜测应该是跟双系统有关,但是我的双系统在不同的硬盘里,很奇怪。

Sooner or later, everything ends.