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

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

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

BCDEDIT返回以下消息:

The requested system device cannot be found.


评论

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

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

与FYI一样,但我们最近发布了Windows 8的自动EFI修复工具:neosmart.net/blog/2013/…

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

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

#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
参数更新BIOS设置,包括UEFI固件/ NVRAM,/f ALL用于本地化UK / GB语言环境。本地化默认为美国英语,或使用en-US。

重新启动并用手指动。

这让我头疼。我转了一圈很久了。撰写本文时,关于修复UEFI / Windows 8的信息不多。

[编辑]

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

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


评论


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

–阿巴菲
17年4月2日在21:51

这个食谱感觉最有希望,但我遇到了BFSVC错误:无法打开BCD模板存储。状态= [c000000f] :(

–杜尚·波斯尼亚(Dusan Bosnjak)的“桶头”
17年8月1日在20:21

#2 楼

其他答案是有帮助的,但这是我要解决的问题。

我有一个1.5 TB硬盘,上面装有Windows 7。然后,我将Windows 8安装到购买的150 GB SSD上。 1.5 TB硬盘驱动器发生故障,我可以听到它发出的声音,计算机将无法启动,并显示“请插入系统磁盘”。我以为引导加载程序丢失了,因为它必须位于1.5 TB磁盘上。事实证明是这样,但是问题出在我遵循的指南不会重建引导加载程序或所谓的引导程序,因为我在较小的150 GB磁盘上没有EFI分区(该磁盘可能已存在于故障磁盘上),它我只有一个分区充满了整个磁盘。

我不想丢失所有数据,所以我通过从Windows 8安装USB驱动器启动进入了命令提示符(注意您无法启动UEFI如果出现此版本,请选择仅从没有出现UEFI的USB驱动器启动)。

一旦在命令提示符下(请参阅其他答案以获取指示),您需要缩小分区。为此,请输入以下命令,并在每个命令后按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现在已完全恢复。

评论


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

–Ciaran Fisher
2014年7月4日在8:15



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

–rainabba
15年7月10日在17:32



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

– Sahil
17年3月31日在20:47

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

–ptetteh227
18年4月6日在9:14



+1-记住最重要的语句注意:必须将C:替换为包含Windows的分区的驱动器号,并将B:替换为分配给刚创建的EFI分区的盘符。我与之战斗了13个小时!谢谢你,你救了我接下来的12个小时:)

–JerzyDrożdż
19-10-18在19:16



#3 楼

好的,我有时间在这里整理出适当的轮廓。它很长,但是很完整,应该可以帮助您了解正在发生的事情。首先,一种可能发生的方式:


您的BIOS丢失了设置。
没问题,所有这些东西都存储在EFI分区中。
...由于明显的原因,除了SATA IDE vs AHCI设置。
您是否在使用SATA-AHCI?您现在可能正在使用SATA-IDE。
您是否先尝试过启动才知道?
如果这样做,它会失败。您是否让Windows尝试修复它?
如果这样做,BLAM可能很可能破坏了启动配置数据库。
请确保您使用的是上次使用的正确SATA设置。


这是您现在可能已经完成的工作。如果没有任何一个匹配,请仔细评估这是否在您的问题上,并仔细阅读本文以获取想法,但请务必先思考后再进行操作。


您已经完全忽略了所有内容有关修复主引导记录(MBR),分区表,分区标志和其他不适用于EFI引导方案的垃圾的废话。完全没有。充其量,您将能够完全重建一个新的,不相关的NON-EFI引导解决方案。但是,这可能并不容易,因为:
您已经确定Windows可以确定它没有启动配置数据库,但是不幸的是,它完全毫无头绪或者非常确定它的去向-您
您知道引导存储区通常为(somewhere)\Boot\BCD,文件为HIDDEN;使用dir /a:hs查看它。
您已经对BCDedit.exe有所了解,并发现它可以让您使用/CreateStore在过渡文件中“模拟”引导配置数据库(请不要将其命名为“ BCD”),您可以显式使用使用/Store选项的临时文件,您可以使用/Create {bootmgr}为Windows启动管理器添加菜单项,并且应该能够使用/Import导入该文件...
...但是当您尝试执行此操作时,你不能。您可以看一下/SysStore选项,听起来不错,但由于它“模棱两可”,您无法使用它来使用其他商店。您有一种直觉,它知道商店的位置-或应该在哪里-但找不到它。
您尝试使用MountVol挂载EFI分区,但它甚至没有显示


如果所有这些都非常适用于您,则可能会发生以下情况:


Windows可以告诉您已设置EFI(已通过UEFI引导启动了DVD,具有EFI分区等)。
因此它知道在哪里可以查找BCD文件-但是,它要么以某种方式有错误的位置(不是这个问题,而是类似的问题),或者BCD已被删除。
显然,因为它知道应该在哪里,所以这会破坏/SysStore,实际上,这可能是正确的行为,
据我所知,MountVol故意隐藏了EFI分区(或者某种程度上无法注意到它)。这样可以防止挂载文件系统,从而防止找到正确的子目录,验证数据库是否存在等。


最后,这是您需要做的。好消息是,它可能比您现在希望的要简单得多。


您确实必须挂载EFI分区。
实际上,我的直觉并不完全正确-我强烈怀疑EFI分区已经由某些内部子系统挂载了,这就是为什么BCDedit变得怪异的原因-它看不到数据库,但是它知道应该去哪里。但是,没有的是驱动器号。那么该怎么办?
...您的DOS根源可以追溯到多远?您还记得Assign命令吗?猜猜是什么。
开始DiskPart
如果您不熟悉DiskPart,那么它的基本工作方式是集合的层次结构。您必须在一个级别上仅选择一个元素才能继续进行下一个操作。因此,请先选择List DiskSelect Disk n,然后再选择n
请使用List PartitionList Volume(请注意非复数形式)来获得一些见识并确定您的EFI分区。
通常是标记为System的100MB FAT32分区。请记住,您的磁盘现在应该正在使用GPT分区表,因此您可能会看到很多分区。其中一些用于紧急恢复-它们在处理EFI问题方面有很多好处,是吗?那好吧。
请注意,EFI分区和其他一些分区没有驱动器号。如果您愿意,也可以查看GPT分区属性,这也可能会给您一些与切线相关的“ Aha”时刻。

Select Partition n其中n是EFI分区。 (我希望您可以根据需要选择该音量。)

Assign。而已。不要指定驱动器号;只需Assign

List Volume。现在,您应该会看到一个分配给EFI分区的驱动器号。

Exit DiskPart。
现在...一个重大警告。您可能会直接转到S :(或从Assign获得的任何内容),并注意到一个Boot分区。 “啊哈!”你会说。 “这里没有BCD文件!”首先...记住该文件是隐藏的。其次...多挖一点,您会发现虽然有S:\EFI\BootS:\EFI\Microsoft\Boot
您需要检查这两个问题。
S:\EFI\Boot用于主板,并且包含Windows Boot LOADER(对于其他操作系统,可能还有其他东西)。之所以用这个名称,是因为主板不知道您是否要安装Windows,并且需要一条合理的固定路径。
检查S:\EFI\Boot。对于64位Windows 7专业版,应该看到:bootx64.efi如果安装了EFI Shell(总是个好主意),则可能还会看到shellx64.efi
注意:使用chainloader+1的双引导Linux用户将在此处看不到额外的条目。
同时使用S:\EFI\Microsoft\Bootdir检查dir a:h。对于Windows 7 Professional(64位),应该看到一堆语言模板(en_US等)和以下文件:

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


...除了您可能看不到BCD,对吗?但是这些备份文件肯定很诱人。
确定要使用哪个备份文件。不管最近发生的更改是什么,它缺少的启动功能都远不如您引导系统的功能重要,因此,请选择最完整的系统。可能您会看到一个很大的一个和一个很小的一个。小的已经损坏,是修复过程失败的产物-不要使用它。如果它们都很大,请使用较旧的。在任何情况下,请在其他位置进行备份的其他备份副本。
将您决定使用的备份复制到BCD
退出外壳,干净地关机,然后重新启动。
告诉Windows正常启动。此时,它应该开始。


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

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


问:能否举一个例子?可以在EFI系统上完全使用BCDedit /SysStore进行任何操作的情况?


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

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

评论


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

–鲍玉红
13年4月28日在2:03

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

–rainabba
15年7月10日在17:45

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

–rainabba
15年7月10日在18:08

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

–rainabba
15年7月10日在18:24



#4 楼

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

bootrec /rebuildbcd


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

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

[EDIT]

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

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

评论


我添加了一些可能有用的链接,尽管它们与Windows 7有关。

–harrymc
2012年8月27日20:08



#5 楼

最简单的方法:


按照上面的文章中的步骤找到BCD文件并转到其目录。
如果BCD文件是隐藏的,请键入attrib bcd -s -h -r并按Enter。这将允许您修改和覆盖文件。
键入ren bcd bcd.old,然后按Enter。这将重命名当前的BCD文件。
键入Bootrec /RebuildBCD,然后按Enter键以强制Windows 8从头开始重建启动菜单。
退出命令提示符并关闭。删除Windows恢复媒体,然后重新启动。完成了!


#6 楼

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

退出DISKPART后,我仅键入:

bootrec /fixboot
bootrec /rebuildbcd


,然后正确维修了系统。我没有使用

bootrec /fixmbr


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

#7 楼

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

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

问题是当我执行bootrec /rebuildbcd时,它正常了,然后我不得不输入如果我要保存配置,则会收到消息yes

经过数小时的努力,我终于解决了。

按此顺序...


首先,我启动了Easyup分区主服务器和格式化的系统保留卷,稍后我将其分配为活动卷(在我的启动文件夹中)。重新启动时出现错误the file is not accessible because it is used by a another process
然后我在Windows恢复中启动,打开命令提示符并输入
NTLDR missingbootrec /fixmbr/fixboot/scanos(现在可以正常执行了:))
我退出/rebuildbcd并单击自动修复。
然后,我能够选择Windows8。重新启动后,我可以看到Windows 8徽标。


评论


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

– zacharydl
16-09-3在7:45



#8 楼

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

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

查看:
bcdedit.exe /枚举固件

#9 楼

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

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

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

只需按顺序运行命令即可。

评论


唐纳德关心评论?

– soandos
2012年10月29日,0:07

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

–猎犬
15年3月3日在16:05

#10 楼

我已经通过在故障恢复控制台中使用以下命令来解决此问题:

 bootcfg C:\Windows /l en-us


评论


该工具仅适用于Windows XP和较旧版本的boot.ini。

– Elmo
2012年8月26日14:31

这与EFI引导程序无关。

–马哈茂德·古德西
15年9月17日在17:26