我如何修复 Windows 8 EFI Bootloader?

我如何修复 Windows 8 EFI Bootloader?

几天前,我在硬盘上以 EFI 模式安装了 Windows 7 和 Windows 8。今天,引导加载程序丢失/损坏了。

我目前在闪存驱动器上安装了 Windows 8 安装程序,并尝试使用“自动修复”选项修复引导加载程序,但没有任何效果。Windows 8 安装程序中也缺少“启动修复”选项。

如何从命令提示符修复/重新创建 EFI 引导加载程序?

BCDEDIT返回以下消息:

The requested system device cannot be found.

答案1

我花了很多时间尝试在克隆到新的 SSD 后重新启动我的 Windows 8 PC,并尝试总结我最终如何让一切正常运行 -

首先,从 UEFI Windows 8 恢复磁盘(CD/DVD/USB)启动 - 我发现自动恢复过程找不到正确的 Windows 分区,而且当我设法将其添加到 BCD 设置时,它也无法可靠地启动,例如使用 BCDEDIT 我让它找到并启动 Windows 分区,但它拒绝冷启动或在第二次重启或关机后不会“保留”设置。

进入高级选项并运行命令提示符。

输入diskpart使用 DiskPart 工具来确保您拥有所有正确的分区并识别您的 EFI 分区 - 这里的关键是您的 EFI 分区格式化为 FAT32:

DISKPART> sel disk 0

Disk 0 is now the selected disk.

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E                       DVD-ROM         0 B  No Media
  Volume 1     C                NTFS   Partition    195 GB  Healthy    Boot
  Volume 2         WINRE        NTFS   Partition    400 MB  Healthy    Hidden
  Volume 3                      FAT32  Partition    260 MB  Healthy    System

然后为 EFI 分区分配一个驱动器号:

DISKPART> sel vol 3

Volume 3 is the selected volume.

DISKPART> assign letter=b:

DiskPart successfully assigned the drive letter or mount point.

exit通过输入并在命令提示符下运行以下命令退出 DiskPart 工具:

cd /d b:\EFI\Microsoft\Boot\

bootrec /fixboot

删除或者重命名BCD文件:

ren BCD BCD.bak

用于bcdboot.exe重新创建 BCD 存储:

bcdboot c:\Windows /l en-gb /s b: /f ALL

/f ALL参数更新 BIOS 设置(包括 UEFI 固件/NVRAM),/l en-gb用于针对 UK/GB 语言环境进行本地化。本地化默认为美国英语,或使用 en-US。

重新启动并祈祷。

这让我很头疼。我陷入了很长一段时间的困境。在撰写本文时,没有太多关于修复 UEFI/Windows 8 的可靠信息。

[编辑]

要重新启用 Hyper-V,我还必须在重新启动后从 Windows 中的管理员命令提示符运行以下命令:

bcdedit /set {default} hypervisorlaunchtype Auto
bcdedit /set {default} nx OptIn

答案2

其他答案也很有帮助,但这是我必须做的事情来解决我的问题。

我有一块 1.5 TB 的硬盘,上面安装了 Windows 7。然后我将 Windows 8 安装在我买的 150 GB SSD 上。1.5 TB 的硬盘坏了,我听到它发出噪音,我的电脑无法启动,提示“请插入系统盘”。我以为是引导加载程序丢失了,因为它一定在 1.5 TB 的磁盘上。结果确实如此,但问题是我遵循的指南无法重建引导加载程序或任何它叫什么,因为我在较小的 150 GB 磁盘上没有 EFI 分区(这可能存在于故障磁盘上),它只有 1 个分区,占满了整个磁盘。

我不想丢失所有数据,因此我通过从 Windows 8 安装 USB 驱动器启动进入命令提示符(请注意,如果出现 UEFI 版本,则无法启动该版本,请选择仅从 USB 驱动器启动,而不在它之前出现 UEFI)。

进入命令提示符后(请参阅其他答案以获取说明),您需要缩小分区。为此,请输入以下命令,并Enter在每条命令后按:

diskpart

list disk

select disk 0

list partition

select partition 1

shrink desired=200 minimum=200

create partition efi

list partition

select partition 2

format fs=fat32

这些命令将创建 EFI 分区。输入 仔细检查所有内容list vol。您应该会看到一个 200 MB 的分区。现在您需要为其分配一个字母。输入assign,然后list vol再次输入 ,查看已分配的字母。

现在完成了,您需要将启动文件复制到这个新创建的分区:

bcdboot C:\Windows /l en-gb /s B: /f ALL

笔记:您必须将其替换C:为包含 Windows 的分区的驱动器号,以及B:分配给您刚刚创建的 EFI 分区的字母。

我还输入了以下命令:

bootrec /fix

bootrec /fixmbr

这两个都成功恢复了,不知道它们是否真的做了什么,但谁在乎呢。Windows 现已完全恢复。

答案3

好的,我终于有时间整理一下大纲了。大纲很长,但很完整,应该能帮你了解情况。

首先,发生这种情况的一种方式是:

  1. 您的 BIOS 丢失其设置。
  2. 没问题,所有这些东西都存储在 EFI 分区中。
  3. ...除了 SATA IDE 与 AHCI 设置,原因很明显。
  4. 您使用的是 SATA-AHCI 吗?您现在可能正在使用 SATA-IDE。
  5. 在弄清楚这一点之前,您是否尝试过启动?
  6. 如果这样做,则失败。您是否让 Windows 尝试修复它?
  7. 如果你这样做了,砰,它很可能已经破坏了启动配置数据库。
  8. 确保您使用的是上次使用的正确 SATA 设置。


以下是您现在可能已经完成的操作。如果其中任何一项不匹配,请仔细评估这是否确实是您的问题,并阅读本文以获取想法,但不要不加思索地遵循它。

  1. 希望您忽略所有有关修复主引导记录 (MBR)、分区表、分区标志以及其他不适用于 EFI 启动场景的垃圾的废话。 完全最好的情况是,你可以完全重建一个新的,无关,非 EFI 启动解决方案。然而,这可能并不简单,因为:
  2. 您已经发现 Windows 确信它没有启动配置数据库,但不幸的是,它要么完全不知道它去了哪里,要么非常确定它去了哪里 - 您无法完全分辨是哪一种。
  3. 您知道引导存储处于正常状态(somewhere)\Boot\BCD并且文件是隐藏的;请使用 查看它dir /a:hs
  4. 您已经熟悉了一点,BCDedit.exe并且发现它将允许您使用/CreateStore(请不要将其命名为“BCD”)在暂存文件中“模拟”启动配置数据库,您可以使用选项明确使用暂存文件/Store,您可以使用为 Windows 启动管理器添加菜单项/Create {bootmgr},并且您应该能够使用/Import...导入它。
  5. ...但是当您尝试这样做时,您却做不到。您查看了选项/SysStore,这听起来是对的,但是您无法让它使用另一家商店,因为它“不明确”。您有预感它知道商店在哪里——或者应该在哪里——但是您找不到它。
  6. 您已尝试使用它MountVol来挂载 EFI 分区,但它甚至没有显示在列表中,所以您无法做到。


如果以上所有情况都与您非常相似,则可能发生以下情况:

  1. Windows 可以告诉您已设置 EFI(您已通过 UEFI 启动启动了 DVD,您有一个 EFI 分区等)。
  2. 因此,它知道在哪里查找 BCD 文件——但是,要么是位置错误(不是这个问题,但类似),要么是 BCD 已被删除。
  3. 显然,因为它知道它应该在哪里,所以这会中断/SysStore——实际上,这可能是正确的行为,因为否则你会把它放在错误的地方。
  4. 据我所知,MountVol故意隐藏 EFI 分区(或无法注意到它)。这会阻止挂载文件系统,从而阻止找到正确的子目录、验证数据库是否存在等。


所以,最后,这就是你需要做的事情。好消息是,这可能比你现在希望的要简单得多。

  1. 你确实需要挂载 EFI 分区。

    实际上,我有一种预感,这不是严格正确——我强烈怀疑 EFI 分区是已经由某个内部子系统挂载,这就是为什么BCDedit它会变得很古怪——它看不到数据库,但它知道它应该去哪里。然而,它没有驱动器号。那么——该怎么办?

    嗯……你的 DOS 根目录可以追溯到多远?你还记得命令吗Assign?猜猜是什么。
  2. 开始DiskPart
  3. 如果您不熟悉DiskPart,它的基本工作原理是集合的层次结构;您必须在一个级别上选择一个元素才能继续下一个级别。因此,List Disk,然后是适合您的任何值Select Disk nn
  4. 使用List PartitionList Volume(注意不是复数)来获取一些见解并识别您的 EFI 分区。

    它通常是一个标记为 的 100MB FAT32 分区System。请记住,您的磁盘现在应该使用 GPT 分区表,因此您可能会看到相当多的分区。其中一些用于紧急恢复 - 它们对 EFI 问题没什么用,是吗?哦,算了。

    请注意,EFI 分区和其他几个分区没有驱动器号。如果您愿意,您还可以查看 GPT 分区属性,这也可能给您带来一些切线相关的“啊哈”时刻。
  5. Select Partition n其中 n 是 EFI 分区。(我希望您可以在需要时选择卷。)
  6. Assign。就是这样。不要指定驱动器号;只需Assign
  7. List Volume。您现在应该看到分配给 EFI 分区的驱动器号。
  8. ExitDiskPart。

    现在...一个很大的警告。您可能会直接转到 S:(或从 获得的任何内容Assign)并注意到 Boot 分区。“啊哈!”您会说。“这里没有BCD文件!”首先...请记住该文件是隐藏的。其次...再挖掘一下,您会注意到虽然有S:\EFI\Boot并且S:\EFI\Microsoft\Boot

    您还需要检查这两个问题。 S:\EFI\Boot母板,并包含 Windows 启动加载器(也可能是其他操作系统的其他内容)。之所以有这个名字,是因为主板不知道您是否要安装 Windows,并且需要一个有意义的固定路径。
  9. 检查S:\EFI\Boot。对于 64 位 Windows 7 Professional,您应该会看到:bootx64.efi
    如果您已经安装了 EFI shell(这始终是个好主意),您可能还会看到shellx64.efi

    注意:使用双启动 Linux 的用户chainloader+1将不会在此处看到额外的条目。
  10. 检查S:\EFI\Microsoft\Boot使用两个都 dirdir a:h。对于 64 位 Windows 7 Professional,您应该会看到一堆语言模板(en_US等)和以下文件:
    bootmgr.efi
    bootmgfw.efi
    memtest.efi
    BCD
    BCD.Backup.001
    BCD.Backup.002
    
    ...除了你可能没看到BCD,对吧?但这些备份文件看起来确实很诱人。
  11. 确定要使用哪个备份文件。无论它缺少什么最近的更改,都远不如您启动系统的能力重要,因此请选择最完整的文件。您可能会看到一个大文件和一个相当小的文件。小文件已经损坏,是修复过程失败的产物——不要使用它。如果它们都很大,请使用较旧的那个。无论如何,请制作额外的备份副本备份别的地方。
  12. 将您决定使用的备份复制到BCD
  13. 退出 shell,干净关闭,然后重新启动。
  14. 告诉 Windows 正常启动。此时,它应该可以启动。


问:如果您没有备用 BCD 怎么办?

A: 嗯,那真的不应该发生这种情况。这可能意味着您处于错误的目录中,支持 EFI 但实际上并未使用它,或者以某种方式重建了整个 EFI 分区而没有所有必需的 Windows 材料(可能,尤其是在使用多个版本的 Windows 时)。在这种情况下,您需要从 DVD 复制 EFI 材料,然后使用 修改或重建引导配置数据库BCDedit


BCDedit /SysStore问:您能给我举一个可以在 EFI 系统上做任何事情 的场景的例子吗?

答:到目前为止还没有。

无论如何,希望这能帮助人们解决一些问题,或者至少让他们思考。作为最后一点,请注意,您可以挂载和检查您的 EFI 分区在 Windows 下通常使用上面的DiskPart:Assign技术。你应该至少执行一次,以获得 EFI 分区的完整备份,你会遇到这种麻烦。我建议将一份备份放在C:驱动器上的子目录中,另一份备份放在 USB 闪存驱动器上。

抱歉说了这么多。我需要在某个时候把这个变成一篇正式的文章,但是有太多人非常沮丧,所以我觉得有必要尽可能完整、快速地记录我的经历。

答案4

最简单的方法:

  • 按照上面帖子中的步骤找到 BCD 文件并转到其目录。

  • 如果 BCD 文件是隐藏的,请键入attrib bcd -s -h -r并按Enter。这将允许您修改和覆盖该文件。

  • 输入ren bcd bcd.old并按下Enter。这将重命名当前的 BCD 文件。

  • 键入Bootrec /RebuildBCD并按下Enter以强制 Windows 8 从头开始​​重建启动菜单。

  • 退出命令提示符并关闭。删除 Windows 恢复介质并重新启动。您已完成!

相关内容