我如何访问 bios 的 .efi 目录并替换 .efi(特别是 BOOTX64.EFI)文件?

我如何访问 bios 的 .efi 目录并替换 .efi(特别是 BOOTX64.EFI)文件?

我认为 .efi 文件不知怎么搞砸了。不久前,当我第一次拿到这台机器时,我毫无问题地启动了 Windows 11 安装盘,安装了操作系统,并且在大约一天的时间内成功启动了……

当我开始通过 BIOS 启用虚拟化时,我最终失去了启动 Windows 的能力。启动画面滚动圈会冻结,我一直无法弄清楚原因。

我最终厌倦了无法启动,所以我决定尝试 Proxmox,看看我是否可以让 Windows 在 VM 中启动,结果确实如此!所以对我来说,这意味着硬件“必然”没有问题,因为 proxmox 是 1 型虚拟机管理程序,Windows 在裸机上运行。

回顾 Dell BIOS 中的“添加启动选项”,并查看 FS0,与我在 YouTube 上的 Dell 教学视频中看到的关于手动添加 Windows 启动管理器的内容相比,这些目录看起来不合适。

我尝试选择“BOOTX64.EFI”文件并将其与名称“Windows Boot Manager”关联,但这并不能解决我的问题。

我认为问题已经缩小到这些预启动文件的一些问题。再说一遍,我知道如何操作计算机,但 BIOS 不是其中之一。请问我如何访问这些 .EFI 启动文件并用一些新副本替换它们。另外,我不知道旧版 BIOS 启动使用的是什么东西,但 MBR Windows 安装磁盘也不起作用,所以我想也需要替换与之相关的文件。

摘自戴尔的视频

从我的机器

答案1

最简单、最安全的方法是使用权EFI 文件是通过 USB 启动,使用 Windows 恢复环境 (Windows RE) 等操作系统,或者直播 Ubuntu

你可以看法使用磁盘工具检查 EFI 文件,例如磁盘精灵,如下所示。

查看 EFI 文件

在分区 ESP(1) 上,格式化为 FAT32,在各个文件夹中有许多 EFI 文件。这很有用,有时,来修改这些文件:例如,我曾经在一台电脑上工作过,除非我重命名 OEM 启动文件,否则它拒绝启动 Linux,然后将 Ubuntu grubx64.efi 重命名为 OEM 启动文件。虽然可能还有其他解决方法,但这种方法很容易记录和执行,也很容易逆转。

注意:制作之前任何启动分区的改变,制作图像这样您就可以撤消任何更改。最好是完整的磁盘映像,尽管只是启动分区可能帮助恢复。如果没有备份,错误可能会导致您的电脑无法启动。

答案2

我尝试选择“BOOTX64.EFI”文件并将其与名称“Windows Boot Manager”关联,但这并不能解决我的问题。

\EFI\Boot\BootX64.EFI 是“默认”位置,可能会被最后安装的操作系统覆盖 - 它可能是 Windows 启动管理器,可能是 GRUB 等等。在fs0:屏幕截图中的卷中,它可能是来自 Proxmox 的 systemd-boot.efi 的副本。

Windows 启动管理器的具体路径始终是\EFI\Microsoft\Boot\Bootmgfw.efi。如果该路径完整无损,您可以将其复制到 BootX64.efi(您不必需要BootX64.efi 正常)。

然而,如果你真的到了“旋转的圆圈”,就意味着系统做过启动 Windows 启动管理器,并取得了进一步的进展 – 它已读取其配置(BCD 文件),并且您已到达 Windows 本身正在启动的阶段。因此,这些文件不太可能是问题所在。

回顾 Dell BIOS 中的“添加启动选项”,并查看 FS0,与我在 YouTube 上的 Dell 教学视频中看到的关于手动添加 Windows 启动管理器的内容相比,这些目录看起来不合适。

在您的屏幕截图中,该fs0:分区看起来就像 Linux 发行版(例如 Proxmox)会设置的分区。假设您显示的是\EFI目录的内容,其中没有Microsoft子目录(Windows 始终会将其启动管理器放在子目录中),因此它肯定不是知道如何启动 Windows 的 EFI 分区。

如果您连接了多个磁盘,则每个磁盘(如果安装了操作系统)通常都有自己的 EFI 分区,因此请务必查看fs1:等等fs2:

我认为问题已经缩小到这些预启动文件的一些问题。

我如何访问这些 .EFI 启动文件并用一些新副本替换它们

需要明确的是,没有“BIOS 的 EFI 目录”。系统固件本身不以文件形式存储,也不从任何磁盘或分区运行 - 整个固件都是从专用闪存加载的,更换它(或首先损坏它)的唯一方法是通过主板的“固件更新”过程。

在几乎所有系统中,磁盘上“EFI 系统分区”中的所有文件都是仅有的用于启动特定磁盘上安装的实际操作系统,或有时用于启动各种可选诊断和恢复工具。每个磁盘都带有自己的 EFI 启动文件,用于安装该磁盘上的任何内容 - 您的系统磁盘有自己的 EFI 启动文件,而您的“Windows 安装”USB 棒也有自己的 EFI 启动文件。

所以如果你不是无法启动 Windows 安装 CD/USB,那么替换系统磁盘上的 EFI 引导加载程序文件将毫无用处——可启动 CD/USB 已经自带它自己的EFI 启动文件(这就是它“可启动”的原因)并且固件仅在从 USB 启动时查看这些文件。

当然,安装 USB 棒的 EFI 启动文件可能会被意外删除,在这种情况下,最简单的方法是将它们从原始 Windows ISO 中复制出来(或者从头开始重建安装 USB 棒)。

如果你能够启动到 Windows 安装磁盘并且只想修复系统磁盘,那么bcdboot命令将重新安装 Windows 启动管理器文件(从保存在 C:\Windows 或任何地方的原始文件开始),并且还将重建 Windows 启动管理器的“BCD”配置。

(每个操作系统都有自己的引导加载程序,因此每个操作系统都会有不同的命令来修复其引导文件;对于 Linux 系统,您可以使用grub-installbootctl install。同样,这些文件与系统固件本身无关。)

一旦 USB 启动完成,最小化“安装 Windows”窗口,使用打开控制台窗口ShiftF10并使用diskpart为 EFI 分区分配驱动器号,以及找出分配给 Windows 分区的驱动器号(它可能不在C:该环境中)。

DISKPART>  list part[ition]
DISKPART>  sel[ect] part[ition] ##
DISKPART>  assign letter=S
DISKPART>  det[ail] vol[ume]

(此时我实际上会先去S:清理旧的 Windows 文件 - 将“EFI\Microsoft”目录移到一边或将其完全删除,因为无论如何它都将要重建。)

一旦您获得了 Windows 分区(源)和 EFI 分区(目标)的驱动器号,您就可以用来bcdboot复制全新的 Windows 启动管理器文件:

X:\> bcdboot C:\Windows /s S: /f UEFI

这将创建 Bootmgfw.efi,将其作为条目添加到 EFI NVRAM,并将其复制到 BootX64.efi。它还将生成一个新的 BCD 配置文件,其中包含一个 Windows 条目供 Bootmgfw.efi 使用。

(这也适用于 BIOS 风格的启动,尽管它不会写入启动扇区 -bootsect需要分别用于 MBR 和 VBR。)

再次说明一下,系统磁盘上的 EFI 文件不会影响您从 USB 启动的能力。

另外,我不知道旧式 BIOS 启动使用什么,但 MBR Windows 安装磁盘也不起作用,所以我想也需要替换与之相关的文件。

答案与上述相同,只是程度更甚。该过程的“固件”部分不取自任何文件;整个固件(包括其“旧式 BIOS 仿真”(CSM)模块)直接从主板的写保护闪存运行。

除此之外,当涉及到 BIOS 启动时,启动过程的特定于操作系统的部分也不完全是文件;有一个(通常有两个)“启动扇区”被写入“文件”区域之外的磁盘(整个磁盘的 MBR,然后跳转到“活动”分区的 VBR)。

在执行 BIOS 样式的启动时,固件唯一关心的就是 MBR – 后续阶段涉及的任何文件完全由该磁盘上特定于操作系统的 VBR 决定。(例如,Windows 使用的 VBR 将从名为 的文件加载 Windows 启动管理器的其余部分\BOOTMGR。)

对于安装了 Windows 的磁盘(以及制作 Windows 安装 USB 棒时),您可以使用bootsect它来写入 MBR 和 Windows“nt60”VBR。对于 Linux,它grub-install负责处理 MBR 和 GRUB 使用的非 VBR,尽管某些发行版可能会使用 Syslinux。

相关内容