几天前,我以EFI模式在硬盘上安装了Windows 7和Windows 8。今天,引导加载程序丢失/损坏。
我目前在闪存驱动器上安装了Windows 8安装程序,并尝试使用“自动修复”选项来修复引导加载程序,但它没有执行任何操作。Windows 8安装程序中也缺少“启动修复”选项。
如何从命令提示符修复/重新创建EFI引导加载程序?
BCDEDIT
返回以下消息:
The requested system device cannot be found.
几天前,我以EFI模式在硬盘上安装了Windows 7和Windows 8。今天,引导加载程序丢失/损坏。
我目前在闪存驱动器上安装了Windows 8安装程序,并尝试使用“自动修复”选项来修复引导加载程序,但它没有执行任何操作。Windows 8安装程序中也缺少“启动修复”选项。
如何从命令提示符修复/重新创建EFI引导加载程序?
BCDEDIT
返回以下消息:
The requested system device cannot be found.
Answers:
克隆到新的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
BFSVC Error: Could not open the BCD template store. STatus = [c000000f ]
:(
其他答案很有帮助,但这是我必须修复的。
我有一个安装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现在已完全恢复。
bcdboot c:\windows /s i: /f ALL
我收到“ BFSVC错误:无法设置emement应用程序设备。状态= [c00000bb]”,我已经在这场战斗中奋斗了几个月,每次尝试,最终都得到了一个似乎包含我的EFI引导的闪存驱动器文件,因为II可以从中启动,但是如果删除它,则无法启动。
好的,我有时间在这里整理出适当的轮廓。它很长,但是很完整,应该可以帮助您了解发生了什么。
首先,一种可能发生这种情况的方式:
这是您到目前为止可能已完成的操作。如果没有做到这一点,请仔细评估这是否在您的问题中,并仔细阅读本手册以获取想法,但请务必先进行思考。
您已经完全忽略了有关修复主启动记录(MBR),分区表,分区标志和其他不适用于EFI启动方案的其他垃圾的废话。 完全没有。充其量,您将能够完全重建一个新的,不相关的 NON-EFI引导解决方案。但是,这可能并不容易,因为:
您已经确定Windows可以确定它没有启动配置数据库,但是不幸的是,它完全毫无头绪,或者非常确定它的去向-您无法完全确定哪个。
您知道引导存储区通常位于(某处)\ Boot \ BCD,并且文件为HIDDEN。使用“ dir / a:hs”查看它。
您已经对BCDEDIT.EXE有所了解,并发现它可以让您使用“ / CREATESTORE”在暂存文件中“模拟”引导配置数据库(请不要将其命名为“ BCD”),您可以将暂存文件与“ / STORE”选项一起显式使用,可以使用“ / CREATE {bootmgr}”为Windows Boot Manager添加菜单项,并且应该可以使用“ / IMPORT”将其导入...
...但是当您尝试这样做时,您就不能这样做。您查看/ SYSSTORE选项,这听起来不错,但由于它“含糊不清”,因此您无法使用它来使用其他存储。您有一种直觉,即它知道商店在哪里或应该在哪里,但是找不到。
您尝试使用“ MOUNTVOL”挂载EFI分区,但它甚至没有显示在列表中,因此您无法这样做。
如果所有这些都非常适用于您,则可能会发生以下情况:
Windows可以告诉您已为EFI设置(您已通过UEFI引导启动了DVD,具有EFI分区等)。
因此,它知道BCD文件在哪里查找-但是,它要么以某种方式具有错误的位置(不是此问题,而是类似的问题),或者BCD已被删除。
显然,因为它知道应该在哪里,所以这会破坏/ SYSSTORE -实际上,这可能是正确的行为,因为否则您会将其放在错误的位置。
据我所知,MOUNTVOL故意隐藏了EFI分区(或者某种程度上无法注意到它)。这样可以防止挂载文件系统,从而防止找到正确的子目录,验证数据库是否存在等。
所以,最后,这是您需要做的。好消息是,它可能比您现在希望的要简单得多。
实际上,我有一种不完全正确的预感- 我强烈怀疑EFI分区已经由某些内部子系统挂载了,这就是BCDEDIT变得怪异的原因-它没有看到数据库,但是知道应该去哪里。但是,没有的是驱动器号。那么该怎么办?
好吧...您的DOS根可以追溯到多久以前?您还记得ASSIGN命令吗?你猜怎么了。
启动DISKPART。
如果您不熟悉DISKPART,则它的基本工作方式是集的层次结构。您必须在一个级别上精确选择一个元素才能继续进行下一个操作。因此,“ LIST DISKS”,然后“ SELECT DISK n”,其中n适合您。
使用“ LIST PARTITION”和“ LIST VOLUME”(注意非复数)来获得一些见识并确定您的EFI分区。
它通常是一个标记为“ SYSTEM”的100MB FAT32分区。请记住,您的磁盘现在应该正在使用GPT分区表,因此您可能会看到很多分区。其中一些用于紧急恢复-它们在处理EFI问题方面有很多好处,是吗?那好吧。
请注意,EFI分区和其他几个分区没有驱动器号。如果您愿意,也可以查看GPT分区属性,这也可以给您一些与切线相关的“ Aha”时刻。
“ SELECT PARTITION n”,其中n是EFI分区。(我希望您可以根据需要选择音量。)
“分配”。而已。不要指定驱动器号;只是“ ASSIGN”。
“列表量”。现在,您应该看到分配给EFI分区的驱动器号。
“退出” DISKPART。
现在...一个大的警告。您可能会直接转到S :(或从ASSIGN获得的任何内容),并注意到/ Boot分区。“啊哈!” 你会说。“这里没有BCD文件!” 首先...记住该文件是隐藏的。其次...多挖一点,您会发现虽然有:
S:\ EFI \ Boot
还有:
S:\ EFI \ Microsoft \ Boot
您需要检查这两个问题。
S:\ EFI \ Boot用于主板,并且包含Windows Boot LOADER(对于其他操作系统,可能还包含其他内容)。之所以使用这个名称,是因为主板不知道您是否要安装Windows,并且需要一条合理的固定路径。
bootx64.efi
如果安装了EFI Shell(总是一个好主意),则可能还会看到“ shellx64.efi”。
注意:使用“ chainloader + 1”的双引导Linux用户将在此处看不到额外的条目。
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”执行任何操作的情况?
答:到目前为止,还没有。
无论如何,希望这有助于为人们解决一些问题,或者至少让他们思考。最后一点很重要,请注意,您可以使用上述DISKPART ASSIGN技术正常安装和检查Windows下的 EFI分区。在遇到这种麻烦之前,您应该至少执行一次此操作,以获取EFI分区的完整备份。我建议一个备份到C:驱动器的子目录中,另一个备份到USB闪存驱动器中。
抱歉,这么长。我需要在某个时候把它变成一篇合适的文章,但是有这么多人感到沮丧,以至于我觉得有必要尽可能完整和迅速地记录我的经历。
干杯,Matt“ Breakpoint” Heck
bcdboot c:/windows /s i: /f ALL
或那样会让我起步,但这只是让我“ BFSVC错误:无法设置元素应用程序设备。状态= [c00000bb]”
Windows 8仍未以最终形式发布,因此可能会出现问题。您对我们大多数人来说是一个新领域,在这里我们过去使用的命令可能不再起作用。在@soandos列出的命令中,我添加了一个完全重建BCD的命令:
bootrec /rebuildbcd
也尝试使用Windows 8中的“高级”启动菜单,让我们知道会发生什么。
如果没有任何效果,则文章在启动失败时修复Windows 7提供了有关使用bcdedit纠正启动错误的一些建议。无论如何,查看计算机上bcdedit的输出将是一件很有趣的事情。
[编辑]
这些链接可能包含一些有用的想法:
从DVD中恢复Windows Bootloader
Windows 7 Boot Manager恢复问题
Windows 7突然无法启动–修复Windows 7 Bootloader
经过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徽标。
我的情况 我没有松开EFI系统分区,但是切换驱动器和安装Windows似乎已经使第一个驱动器的Windows Boot Manager UEFI引导项搞砸了。必须使用直接指向驱动器的UEFI条目进行引导。我想我通过更正/添加了“设备分区= \ Device \ HarddiskVolumeX”设置(在我的情况下为X = 2;我的第二个分区是EFI系统分区,通过diskpart.exe映射到Z :)来修复它:
Bcdedit / set {bootmgr}设备分区= Z:
查看与:bcdedit.exe /枚举固件
使用:(
bootrec /fixmbr
更新MBR,在这种情况下可能不会执行任何操作,但也不会造成任何伤害)
bootrec /fixboot
重写系统分区的引导扇区。
bootrec /scanos
扫描驱动器上的操作系统,然后将它们添加到引导加载程序中。
只需按顺序运行命令。
bootrec /fixmbr
命令不适用于作者的问题或情况。
我已经通过在故障恢复控制台中使用以下命令来解决此问题:
bootcfg C:\Windows /l en-us