如果有的话,Windows 10 的 EFI 分区数据位于 C 盘的什么位置?

如果有的话,Windows 10 的 EFI 分区数据位于 C 盘的什么位置?

我使用 Ubuntu 19.10 和 Windows 10 双启动。驱动器分区如下:

dev/sad1 (8GB swap)
dev/sda2 (~50MB EFI Partition, containing UEFI files for both Ubuntu and Windows)
dev/sda3 (~450GB mounted as root partition, ext4 filesystem)
dev/sda4 (~20MB Windows system reserved partition)
dev/sda5 (~130GB Windows 10 Partition, C drive, NTFS filesystem)
dev/sda6 (~400GB mounted as home (/home), ext4 filesystem)

在安装 Pop OS 代替 Ubuntu 时,Pop 建议 EFI 分区大小约为 500MB,因此我删除 dev/sda3(以 root 身份挂载的分区)并尝试扩展 EFI 分区。GParted 扩展了分区,但“无法扩展文件系统”。因此,dev/sda2 现在为 500MB,其中包含约 50MB 的 FAT32 文件系统。然后,我继续在 dev/sda3 上新创建的 ext4 文件系统中安装 Pop OS,在 dev/sda3 之后和 dev/sda4 上的 Windows 保留系统分区之前留下 100GB 的未分配空间。我想将 Windows 的主分区从约 130GB 扩展到约 230GB。

安装 Pop OS 后,分区如下所示:

dev/sad1 (8GB swap)
dev/sda2 (~500MB EFI Partition, containing UEFI files for Pop OS.)
dev/sda3 (~350GB mounted as root partition, ext4 filesystem)
Unallocated space (~100GB)
dev/sda4 (~20MB Windows system reserved partition)
dev/sda5 (~130GB Windows 10 Partition, C drive, NTFS filesystem)
dev/sda6 (~400GB mounted as home (/home), ext4 filesystem)

我以为 Pop OS 安装程序会检测 Windows 安装的 UEFI 文件,并将 UEFI 文件放在 EFI/Microsoft 文件夹中的正确位置但它没有!现在我陷入了无法启动的 Windows 安装中。EFI 分区仅包含 Pop OS UEFI 文件。

我遇到了一个教程这表明将 Microsoft 文件夹从 Windows EFI 分区复制到 Pop OS EFI 分区将允许 Pop OS 引导加载程序将Systemd-bootWindows 显示为引导选项,但 Windows 没有 EFI 分区。之前有一个 EFI 分区,用于grub存放上述文件,但 Pop OS 安装程序覆盖了它们,而我没有旧 EFI 分区的备份。

我知道这个问题其内容/boot/EFI/Microsoft如下:(
注意 Microsoft 文件夹里面的内容)

❯❯❯ tree -L 4 /boot
/boot
├── e0dbb6ba929948f599abce57c8e2eb65
├── EFI
│   ├── BOOT
│   │   └── BOOTX64.EFI
│   ├── Microsoft
│   │   ├── Boot
│   │   │   ├── BCD
│   │   │   ├── BCD.LOG
│   │   │   ├── BCD.LOG1
│   │   │   ├── BCD.LOG2
│   │   │   ├── bg-BG
│   │   │   ├── bootmgfw.efi
│   │   │   ├── bootmgr.efi
│   │   │   ├── BOOTSTAT.DAT
│   │   │   ├── boot.stl
│   │   │   ├── cs-CZ
│   │   │   ├── da-DK
│   │   │   ├── de-DE
│   │   │   ├── el-GR
│   │   │   ├── en-GB
│   │   │   ├── en-US
│   │   │   ├── es-ES
│   │   │   ├── es-MX
│   │   │   ├── et-EE
│   │   │   ├── fi-FI
│   │   │   ├── Fonts
│   │   │   ├── fr-CA
│   │   │   ├── fr-FR
│   │   │   ├── hr-HR
│   │   │   ├── hu-HU
│   │   │   ├── it-IT
│   │   │   ├── ja-JP
│   │   │   ├── kd_02_10df.dll
│   │   │   ├── kd_02_10ec.dll
│   │   │   ├── kd_02_1137.dll
│   │   │   ├── kd_02_14e4.dll
│   │   │   ├── kd_02_15b3.dll
│   │   │   ├── kd_02_1969.dll
│   │   │   ├── kd_02_19a2.dll
│   │   │   ├── kd_02_1af4.dll
│   │   │   ├── kd_02_8086.dll
│   │   │   ├── kd_07_1415.dll
│   │   │   ├── kd_0C_8086.dll
│   │   │   ├── kdstub.dll
│   │   │   ├── ko-KR
│   │   │   ├── lt-LT
│   │   │   ├── lv-LV
│   │   │   ├── memtest.efi
│   │   │   ├── nb-NO
│   │   │   ├── nl-NL
│   │   │   ├── pl-PL
│   │   │   ├── pt-BR
│   │   │   ├── pt-PT
│   │   │   ├── qps-ploc
│   │   │   ├── Resources
│   │   │   ├── ro-RO
│   │   │   ├── ru-RU
│   │   │   ├── sk-SK
│   │   │   ├── sl-SI
│   │   │   ├── sr-Latn-RS
│   │   │   ├── sv-SE
│   │   │   ├── tr-TR
│   │   │   ├── uk-UA
│   │   │   ├── winsipolicy.p7b
│   │   │   ├── zh-CN
│   │   │   └── zh-TW
│   │   └── Recovery
│   │       ├── BCD
│   │       ├── BCD.LOG
│   │       ├── BCD.LOG1
│   │       └── BCD.LOG2
│   └── systemd
│       └── systemd-bootx64.efi
├── initramfs-linux-fallback.img
├── initramfs-linux.img
├── intel-ucode.img
├── loader
│   ├── entries
│   │   └── arch.conf
│   ├── loader.conf
│   └── random-seed
├── System Volume Information
│   ├── AadRecoveryPasswordDelete
│   └── ClientRecoveryPasswordRotation
└── vmlinuz-linux

它看起来类似于以下目录结构(在 C:\Windows\Boot\EFI 中):

akshatfs@apollo:/media/akshatfs/C82CBFC42CBFAC36/Windows/Boot/EFI$ tree -L 3
.
├── bg-BG
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── bootmgfw.efi
├── bootmgr.efi
├── boot.stl
├── cs-CZ
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── da-DK
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── de-DE
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── el-GR
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── en-GB
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── en-US
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── es-ES
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── es-MX
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── et-EE
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── fi-FI
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── fr-CA
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── fr-FR
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── hr-HR
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── hu-HU
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── it-IT
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── ja-JP
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── ko-KR
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── lt-LT
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── lv-LV
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── memtest.efi
├── nb-NO
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── nl-NL
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── pl-PL
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── pt-BR
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── pt-PT
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── qps-ploc
│   └── memtest.efi.mui
├── ro-RO
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── ru-RU
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── sk-SK
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── sl-SI
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── sr-Latn-RS
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── sv-SE
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── tr-TR
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
├── uk-UA
│   ├── bootmgfw.efi.mui
│   └── bootmgr.efi.mui
├── winsipolicy.p7b
├── zh-CN
│   ├── bootmgfw.efi.mui
│   ├── bootmgr.efi.mui
│   └── memtest.efi.mui
└── zh-TW
    ├── bootmgfw.efi.mui
    ├── bootmgr.efi.mui
    └── memtest.efi.mui

这让我怀疑 Windows 的 EFI 分区中的文件是否也位于 Windows 主分区的某个地方,具体来说是在 C:\Windows\Boot\EFI\

因此我的问题是:

  1. 如果有的话,Windows 10 的 EFI 分区数据位于 C 盘的什么位置?
  2. 如果是,我应该复制哪些以及复制在哪里?
  3. 如果没有,还有其他方法可以解决这个问题,而不需要下载 Windows iso 文件,我的带宽有限,下载~5GB 的文件是不可行的。
  4. 我想将 Windows 的主分区从~130GB 扩展到~230GB。

答案1

就像 systemd-boot 或 GRUB 一样启动管理器它需要一个“entries”文件或 grub.cfg 来告诉它要启动什么,Windows Bootmgfw.efi 也是一个启动管理器,它需要一个配置文件来告诉它要启动哪个操作系统。因此,仅仅复制文件是不够的,您还必须创建配置。

官方提供的将 Windows 引导加载程序安装到新 EFI 分区的工具是bcdboot。从 Windows 安装磁盘(CD 或 USB)启动它 - 您无需浏览菜单,只需按 Shift+F10 即可访问控制台窗口:

bcdboot c:\windows

这会将所有静态引导加载程序文件从指定的源(您找到的)复制到正确的位置,但是它还将生成配置文件(BCD)用于 Windows Bootmgr,它还会将新分区的 GUID 添加到 EFI 启动菜单中。

(在 Linux 上可以轻松从 Windows ISO 创建可启动的 USB 棒,但现有线程已介绍过。只需确保创建一个 UEFI 可启动的 USB 棒,并以 EFI 模式启动它,这样 bcdboot 将默认安装 EFI 引导加载程序。尽管 bcdboot 有一个选择要安装哪个引导加载程序的选项。)

答案2

Pop!_OS 安装程序通常只会将其文件添加到 ESP(EFI 系统分区)。您可能在安装过​​程中意外选择了格式化它,或者在调整大小失败时损坏了它。在这种情况下,标准做法是从备份中恢复。让这成为一个教训:定期备份整个系统(非数据驱动器的分区映像)在处理分区之前立即进行额外备份。如果在此过程中出现问题,请尝试了解问题并修复它,而不是继续!

无需 Windows ISO 即可进行修复您可以在 Windows 文件夹中找到最需要的文件,但您必须为特定系统生成启动配置存储。您需要某种 Windows 恢复环境才能执行此操作,最好是与您安装的 Windows 版本相同的 ISO。旧版本的 Windows 10 没有使用混合 32/64 位 ISO,因此如果您的带宽有限,您可以考虑下载它们(如果您能找到可信赖的来源,因为 Microsoft 不再提供它们)。

引导文件位于C:\Windows\Boot\EFI。您必须将它们复制到<ESP>\EFI\Microsoft\Boot。您可能还必须将引导加载程序文件添加到 UEFI 引导列表中。您可以在 UEFI 设置中执行此操作。引导加载程序二进制文件称为bootmgfw.efi

bootrec /rebuildbcd可以通过在目录中执行来生成引导配置存储<ESP>\EFI\Microsoft\Boot

我用过本网站刷新我的记忆。我以前做过这种修复,我可以确认这种方法有效。

相关内容