我使用 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-boot
Windows 显示为引导选项,但 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\
因此我的问题是:
- 如果有的话,Windows 10 的 EFI 分区数据位于 C 盘的什么位置?
- 如果是,我应该复制哪些以及复制在哪里?
- 如果没有,还有其他方法可以解决这个问题,而不需要下载 Windows iso 文件,我的带宽有限,下载~5GB 的文件是不可行的。
- 我想将 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
。
我用过本网站刷新我的记忆。我以前做过这种修复,我可以确认这种方法有效。