修复Windows EFI 分区
问题描述
电脑有两块硬盘,一个装 Windows 11,一个装 Ubuntu。觉得 Ubuntu 不好用,就想着把它重装成 Manjaro。安装时选择了覆盖整个 Ubuntu 硬盘。安装好了以后就无法进入 Windows 系统了。
查找原因
本来想着把 Windows 的启动项添加到 Manjaro 的 grub 菜单中,这样开机时可以在 grub 菜单中选择进入 Windows 。但是用fdisk -l
发现 Windows 硬盘中竟然没有 EFI 分区,只有一个保留分区和C盘分区(是的,我只分了一个C盘)。
没有 EFI 分区,那在这之前是怎么进入 Windows 系统的呢?之前也是通过 Ubuntu 的 grub 菜单进入 Windows 系统的。那么只有一种可能,就是 Windows 的 EFI 分区存在于之前的 Ubuntu 的硬盘中,也就是现在的 Manjaro 硬盘中。安装 Manjaro 时这个分区被抹掉了。所以只有给 Windows 重建一个 EFI 分区,才能进入 Windows 系统。
解决方法
Windows的 EFI 分区也叫 ESP 分区。这个 EFI 分区可以在两块硬盘中的任意一个硬盘上创建,都能正确引导 Windows 系统。为了避免再次误删 EFI 分区,我决定在 Windows 所在的硬盘上创建一个 EFI 分区。具体过程如下:
- 我们需要进入Windows系统的安装界面进行修复。找一个 Windows 系统的安装U盘,修改 BIOS 设置U盘为首选启动设备,通过U盘进入Windows系统的安装界面。
- 选择 修复计算机 > 疑难解答 > 命令提示符,下面将使用 diskpart 创建 EFI 分区。
- 运行diskpart
diskpart
列出电脑中的所有磁盘
list disk
选择Windows磁盘,X为Windows 所在的磁盘号
select disk X
我的 Windows 安装在磁盘1上,所以我输入
select disk 1
列出所选磁盘上的分区
list partition
如果有EFI分区,则跳到5 - 正如前面所说,我没有EFI分区,所以需要创建一个,由于磁盘没有剩余空间,只能在其他分区划分一部分空间。EFI分区一般在100MB以上,找一个剩余空间比较充分的分区,通过缩小这个分区得到100MB的空间。
先选择一个分区,X为分区编号
select partition X
缩小分区,得到 100MB 的未分配空间
shrink desired=100
在未分配的空间上创建一个 100MB 的 EFI 分区
create partition efi size=100
- 选择新分区,如果没有分配新分区,则选择原来的 EFI 分区,假设该分区的编号为X,可以通过
list partition
查看
select partition X
格式化
format fs=fat32 quick
分配盘符为Z
assign letter=Z
退出diskpart
exit
- 查看系统所在的盘符,通常是C,但也有可能是其他字母。可以使用下面的命令查看。
fsutil fsinfo drives
输出类似
C:\ D:\ ... X:\ Z:\
使用dir C:
,dir D:
等逐个尝试,如果输出中包含Program Files (x86),Program Files,Windows等文件夹,则应该就是系统所在的盘符。假设系统盘符为C。
使用bcdboot 将引导文件复制到新的 EFI 分区
bcdboot C:\Windows /s Z: /f UEFI
这样就成功修复了EFI分区。
如果电脑有多个系统的话,可能需要在 BIOS 里设置一下 UEFI 的启动顺序。设置Windows EFI分区所在的盘为首选启动项,这样就可以进入 Windows 了。