如何修复Windows 8 EFI Bootloader?


122

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

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

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

BCDEDIT 返回以下消息:

The requested system device cannot be found.

当前解决方案出了什么问题?
soandos 2012年

@soandos我有同样的问题。我执行了您和harrymc的命令,现在一切正常!非常感谢你们俩。
ComFreek 2012年

2
正如一个供参考,但我们最近发布了一个自动化的EFI修复工具为Windows 8:neosmart.net/blog/2013/...
马哈茂德·Qudsi

1
我没想到人们会在UEFI Windows 8上遇到这么多麻烦...系统分区怎么会消失或变得损坏?通常它甚至都没有安装在Windows中,因此文件系统损坏就不可能了。而且所有当前的操作系统都没有错误,足以掩盖现有的Windows安装。实际上,即使Windows也不能够在UEFI上破坏Linux,令人惊讶。
Milind R 2014年

如果您使用动态磁盘,则此方法不适用
rainabba 2015年

Answers:


183

克隆到新的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

1
是否从Windows 10下载ISO。起初没有用,但是后来在GUI菜单中运行了启动修复程序,所以做到了,谢谢Gd。:-)我感谢您的帮助:-)
Abbafei

这个食谱觉得最有前途,但我击中了BFSVC Error: Could not open the BCD template store. STatus = [c000000f ]:(
杜桑·波斯尼亚

21

其他答案很有帮助,但这是我必须修复的。

我有一个安装Windows 7的1.5 TB硬盘。然后,我将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现在已完全恢复。


2
bootrec / fix在Windows 8上似乎不是有效的命令,但否则说明可以正常工作并解决了我所有的问题。谢谢!
Ciaran Fisher

i:是我的EFI分区(首先在磁盘上),但是它是空的。运行时,bcdboot c:\windows /s i: /f ALL我收到“ BFSVC错误:无法设置emement应用程序设备。状态= [c00000bb]”,我已经在这场战斗中奋斗了几个月,每次尝试,最终都得到了一个似乎包含我的EFI引导的闪存驱动器文件,因为II可以从中启动,但是如果删除它,则无法启动。
rainabba 2015年

非常感谢!这挽救了我的一天。我几乎尝试了所有东西,但没有任何效果。我缺少的步骤是格式化EFI卷。格式化EFI卷之后。bcd boot命令成功运行,并且我的Windows 10已备份并再次运行。
萨希尔

+1告诉我选择Windows驱动器号而不是通常的C:
ptetteh227

9

好的,我有时间在这里整理出适当的轮廓。它很长,但是很完整,应该可以帮助您了解发生了什么。

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

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

这是您到目前为止可能已完成的操作。如果没有做到这一点,请仔细评估这是否在您的问题中,并仔细阅读本手册以获取想法,但请务必先进行思考。

  1. 您已经完全忽略了有关修复主启动记录(MBR),分区表,分区标志和其他不适用于EFI启动方案的其他垃圾的废话。 完全没有。充其量,您将能够完全重建一个新的,不相关的 NON-EFI引导解决方案。但是,这可能并不容易,因为:

  2. 您已经确定Windows可以确定它没有启动配置数据库,但是不幸的是,它完全毫无头绪,或者非常确定它的去向-您无法完全确定哪个。

  3. 您知道引导存储区通常位于(某处)\ Boot \ BCD,并且文件为HIDDEN。使用“ dir / a:hs”查看它。

  4. 您已经对BCDEDIT.EXE有所了解,并发现它可以让您使用“ / CREATESTORE”在暂存文件中“模拟”引导配置数据库(请不要将其命名为“ BCD”),您可以将暂存文件与“ / STORE”选项一起显式使用,可以使用“ / CREATE {bootmgr}”为Windows Boot Manager添加菜单项,并且应该可以使用“ / 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命令吗?你猜怎么了。

  1. 启动DISKPART。

  2. 如果您不熟悉DISKPART,则它的基本工作方式是集的层次结构。您必须在一个级别上精确选择一个元素才能继续进行下一个操作。因此,“ LIST DISKS”,然后“ SELECT DISK n”,其中n适合您。

  3. 使用“ LIST PARTITION”和“ LIST VOLUME”(注意非复数)来获得一些见识并确定您的EFI分区。

它通常是一个标记为“ SYSTEM”的100MB FAT32分区。请记住,您的磁盘现在应该正在使用GPT分区表,因此您可能会看到很多分区。其中一些用于紧急恢复-它们在处理EFI问题方面有很多好处,是吗?那好吧。

请注意,EFI分区和其他几个分区没有驱动器号。如果您愿意,也可以查看GPT分区属性,这也可以给您一些与切线相关的“ Aha”时刻。

  1. “ SELECT PARTITION n”,其中n是EFI分区。(我希望您可以根据需要选择音量。)

  2. “分配”。而已。不要指定驱动器号;只是“ ASSIGN”。

  3. “列表量”。现在,您应该看到分配给EFI分区的驱动器号。

  4. “退出” DISKPART。

现在...一个大的警告。您可能会直接转到S :(或从ASSIGN获得的任何内容),并注意到/ Boot分区。“啊哈!” 你会说。“这里没有BCD文件!” 首先...记住该文件是隐藏的。其次...多挖一点,您会发现虽然有:

S:\ EFI \ Boot

还有:

S:\ EFI \ Microsoft \ Boot

您需要检查这两个问题。

S:\ EFI \ Boot用于主板,并且包含Windows Boot LOADER(对于其他操作系统,可能还包含其他内容)。之所以使用这个名称,是因为主板不知道您是否要安装Windows,并且需要一条合理的固定路径。

  1. 检查S:\ EFI \ Boot。对于Windows 7 Professional 64位,您应该看到:

bootx64.efi

如果安装了EFI Shell(总是一个好主意),则可能还会看到“ shellx64.efi”。

注意:使用“ chainloader + 1”的双引导Linux用户将在此处看不到额外的条目。

  1. 检查S:\ EFI \微软\启动使用两个 “目录”和“DIR A:H”。对于Windows 7 Professional(64位),您应该看到一堆语言模板(“ en_US”等)和以下文件:

bootmgr.efi bootmgfw.efi memtest.efi BCD BCD.Backup.001 BCD.Backup.002

...除了您可能看不到BCD,是吗?但是那些备份文件肯定看起来很诱人。

  1. 确定要使用的备份文件。不管最近发生的更改是什么,它所缺少的引导功能都远不及您引导系统的功能那么重要,因此,请选择最完整的系统。可能您会看到一个很大的一个和一个很小的一个。小的已经损坏,是修复过程失败的产物-不要使用它。如果它们都很大,请使用较旧的。在任何情况下,使额外的备份副本备份的其他地方。

  2. 将您决定使用的备份复制到“ BCD”。

  3. 退出外壳,干净地关机,然后重新启动。

  4. 告诉Windows正常启动。此时,它应该开始。

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

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

问:您能否举一个例子说明在EFI系统上可以完全使用“ BCDEDIT / SYSSTORE”执行任何操作的情况?

答:到目前为止,还没有。

无论如何,希望这有助于为人们解决一些问题,或者至少让他们思考。最后一点很重要,请注意,您可以使用上述DISKPART ASSIGN技术正常安装和检查Windows下的 EFI分区。遇到这种麻烦之前,您应该至少执行一次此操作,以获取EFI分区的完整备份。我建议一个备份到C:驱动器的子目录中,另一个备份到USB闪存驱动器中。

抱歉,这么长。我需要在某个时候把它变成一篇合适的文章,但是有这么多人感到沮丧,以至于我觉得有必要尽可能完整和迅速地记录我的经历。

干杯,Matt“ Breakpoint” Heck


1
实际上,MOUNTVOL允许您安装ESP。您使用MOUNTVOL字母:/ S。
于洪宝

因此,当您挂载该EFI分区而根本找不到任何内容时,如何进行?我当时以为这样bcdboot c:/windows /s i: /f ALL或那样会让我起步,但这只是让我“ BFSVC错误:无法设置元素应用程序设备。状态= [c00000bb]”
rainabba 2015年

尽管曾经一次看到该错误,但现在看来该驱动器上有我以前没有的EFI文件夹。仍然没有错误就不能做很多其他事情,也不能启动,但这至少是这样。
2015年

决定尝试另一条路线。我插入了另一个闪存驱动器,将其擦除,给它一个驱动器号,然后重复使用它作为目标而不是我的EFI分区。简而言之,我没有启动Windows安装,而是从该闪存驱动器启动。尽管我的EFI分区中有文件,但我仍无法启动,这是我的第一个驱动器上的第一个分区(EFI,fat32,有文件)。我的系统。我只是从系统中取出了这个“钥匙”,它也无法启动。
rainabba 2015年

5

Windows 8仍未以最终形式发布,因此可能会出现问题。您对我们大多数人来说是一个新领域,在这里我们过去使用的命令可能不再起作用。在@soandos列出的命令中,我添加了一个完全重建BCD的命令:

bootrec /rebuildbcd

也尝试使用Windows 8中的“高级”启动菜单,让我们知道会发生什么。

如果没有任何效果,则文章在启动失败时修复Windows 7提供了有关使用bcdedit纠正启动错误的一些建议。无论如何,查看计算机上bcdedit的输出将是一件很有趣的事情。

[编辑]

这些链接可能包含一些有用的想法:

从DVD中恢复Windows Bootloader
Windows 7 Boot Manager恢复问题
Windows 7突然无法启动–修复Windows 7 Bootloader


我已经添加了一些链接,可能是有益的,但有关Windows 7的
harrymc

3

最简单的方法:

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

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

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

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

  • 退出命令提示符并关闭。删除Windows恢复媒体,然后重新启动。你完成了!


2

在DISKPART下,我只有vol 0或D(DVD)和vol 1或C(Windows NTFS分区)。在我使第1卷处于活动状态之前,对我没有任何帮助。

退出DISKPART后,我只输入:

bootrec /fixboot
bootrec /rebuildbcd

然后系统已正确修复。我没用

bootrec /fixmbr

因为我在MBR上使用GAG(gestor de arranquegràfico)进行多重引导。


1

经过6个小时的奋斗,我设法解决了Windows 8启动问题。

今天,在正常重启后,我收到了消息MBR not found或类似的消息,我不再记得了。我尝试了bootrec命令,Windows自动修复(找不到任何已安装的Windows),一百万种其他方式,却一无所获。

问题是我执行bootrec /rebuildbcd该命令时很正常,然后yes如果要保存配置则必须输入时,出现消息the file is not accessible because it is used by a another process

经过数小时的思考,我终于解决了。

按此顺序...

  • 首先,我启动了easyup分区主服务器,并格式化了系统保留的卷,稍后我将其分配为活动卷(在我的引导文件夹所在的卷中)。重新启动时出现错误NTLDR missing

  • 然后,我在Windows中启动恢复,打开命令提示符,输入 bootrec /fixmbr/fixboot/scanos/rebuildbcd(现在执行的罚款:])

  • 我退出cmd并单击自动修复。

  • 然后,我可以选择Windows8。重新启动后,可以看到Windows 8徽标。


2
注意:此答案似乎是MBR磁盘。在GPT磁盘上,将卷标记为活动状态时,diskpart.exe返回此消息:“ ACTIVE命令只能在固定的MBR磁盘上使用。”
zacharydl

0

我的情况 我没有松开EFI系统分区,但是切换驱动器和安装Windows似乎已经使第一个驱动器的Windows Boot Manager UEFI引导项搞砸了。必须使用直接指向驱动器的UEFI条目进行引导。我想我通过更正/添加了“设备分区= \ Device \ HarddiskVolumeX”设置(在我的情况下为X = 2;我的第二个分区是EFI系统分区,通过diskpart.exe映射到Z :)来修复它:

Bcdedit / set {bootmgr}设备分区= Z:

查看与:bcdedit.exe /枚举固件


-1

使用:( bootrec /fixmbr更新MBR,在这种情况下可能不会执行任何操作,但也不会造成任何伤害)

bootrec /fixboot 重写系统分区的引导扇区。

bootrec /scanos 扫描驱动器上的操作系统,然后将它们添加到引导加载程序中。

只需按顺序运行命令。


唐纳德关心评论?
soandos 2012年

1
bootrec /fixmbr命令不适用于作者的问题或情况。
Ramhound 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.