如何修复Windows 8 EFI启动加载器?
我前些日子在硬盘上安装了Windows 7和Windows 8在EFI模式下的Windows 7和Windows 8。
我目前将Windows 8安装程序放在闪存盘上,并尝试使用自动修复选项来修复启动加载器,但没有任何作用。
我如何从命令提示符中修复/重建EFI启动程序?
BCDEDIT
返回以下信息:
The requested system device cannot be found.
我前些日子在硬盘上安装了Windows 7和Windows 8在EFI模式下的Windows 7和Windows 8。
我目前将Windows 8安装程序放在闪存盘上,并尝试使用自动修复选项来修复启动加载器,但没有任何作用。
我如何从命令提示符中修复/重建EFI启动程序?
BCDEDIT
返回以下信息:
The requested system device cannot be found.
我花了很多时间试图让我的Windows 8电脑在克隆到新的SSD后再次启动,并尝试总结一下我最终如何让它发挥作用 -
首先,从UEFI的Windows 8恢复盘(CD/DVD/USB)启动 - 我发现自动恢复过程中没有找到正确的Windows分区,当我设法将其添加到BCD设置中时,它也不会使它可靠地启动,例如:使用BCDEDIT,我让它找到并启动Windows分区,但它拒绝冷启动或在第二次重启或关机后不能 “保留 "设置。 例如,使用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.
cd /d b:\EFI\Microsoft\Boot\
bootrec /fixboot
退出DiskPart工具,输入exit
,在命令提示符下运行以下操作:
ren BCD BCD.bak
删除或重命名BCD文件。
bcdboot c:\Windows /l en-gb /s b: /f ALL
bcdedit /set {default} hypervisorlaunchtype Auto
bcdedit /set {default} nx OptIn
bcdboot.exe
使用 /f ALL
重新创建 BCD 存储:
&001
/l en-gb
参数更新 BIOS 设置,包括 UEFI 固件/NVRAM,&007 是为英国/GB 本地化。本地化默认为美式英语,或者使用en-US。
重启后,横竖都是英文,
这让我很头疼。绕了好长时间的圈子。在写这篇文章的时候,关于修复UEFI/Windows 8的可靠信息并不多。
[EDIT]
要想重新启用Hyper-V,我还得在Windows内的Administrator命令提示符中重启后运行以下内容:
&001
他の回答も参考になりますが、私の場合はこんな感じです。その後、購入した150GBのSSDにWindows8をインストールしました。1.5TBのハードディスクが故障して、「システムディスクを挿入してください」と音がしてパソコンが起動しなくなってしまいました。1.5TBのディスクにブートローダが入っていたはずなので、ブートローダがなくなっているのかと思っていました。しかし、問題は、私が従ったガイドでは、ブートローダを再構築していないということでした。
私はすべての私のデータを失いたくなかったので、私は私の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 パーティションを作成します。007 と入力して、すべてをダブルチェックしてください。200MB のパーティションが表示されているはずです。これに文字を割り当てる必要があります。
これで新しく作成されたパーティションにブートファイルをコピーする必要があります。
bcdboot C:\Windows /l en-gb /s B: /f ALL
これらは両方とも成功して戻ってきましたが、本当に何かをしたかどうかはわかりませんが、誰が気にしています。これでWindowsは完全に回復しました。
好了,我有时间在这里整理了一个合适的大纲。很长,但很完整,应该能帮你看清楚是怎么回事。
首先,有一种情况会发生:
这里是你现在可能已经做了什么。如果这些都不匹配,请仔细评估这是否是你的问题,并阅读这段内容以获得想法,但不要不经思考就照做。你希望你忽略了所有关于修复主启动记录(MBR)、分区表、分区标志和其他不适用于EFI启动情况的垃圾的废话。完全不适用于EFI启动情况。最多,你可以完全重建一个新的、_无关的、非EFI启动方案。然而,这可能不是一件小事,因为:
2. 你已经知道Windows确定它没有一个启动配置数据库,但不幸的是,它要么是完全不知道,要么是非常确定它在哪里—-你不太清楚。你知道启动存储区通常是(somewhere)\Boot\BCD
,而且文件是HIDDEN,用dir /a:hs
查看。你已经对BCDedit.exe
有了一定的了解,知道了它可以让你用/CreateStore
“模拟 "出一个启动配置数据库(请不要把它命名为 "BCD"),你可以用/Store
选项明确地使用这个暂存文件,你可以用/Create {bootmgr}
为Windows启动管理器添加一个菜单条目,你应该可以用/Import
导入它…..
5………..但是当你尝试这样做的时候,你不能。你研究了一下/SysStore
选项,听起来是对的,但你不能让它使用其他商店,因为它 "含糊不清"。你有一种预感,它知道存储空间在哪里–或者应该在哪里–但你找不到。Windows可以告诉你设置为EFI(你已经通过UEFI启动DVD,你有一个EFI分区等)。因此,它知道在哪里可以找到BCD文件—-然而,它要么是位置不对(不是这个问题,而是类似的问题),要么是BCD被删除了。很显然,因为它知道它应该在哪里,这就打破了MountVol
—实际上,这可能是正确的行为,否则你会把它放在错误的地方。据我所知,/SysStore
故意隐藏了EFI分区(或者说是无法察觉到它)。这样一来,就无法挂载文件系统,从而无法找到正确的子目录,无法验证数据库的存在等等,
所以,最后,这里就是你需要做的事情了。好消息是,这可能比你现在希望的要简单得多。
MountVol
会出现问题的原因–它没有看到数据库,但它知道它应该去哪里。但它知道它应该去哪里,但它没有的是一个驱动器号。那么…… 怎么办呢? 那么…… 你的DOS根基有多深? 你还记得BCDedit
命令吗?你猜猜怎么着
2. 启动Assign
,
3. 如果你不熟悉DiskPart
,它的工作方式基本上是一个层次结构的集合,你必须在一个层次上选择一个元素,才能进入下一个层次。所以,DiskPart
,然后是List Disk
,其中Select Disk n
是适合你的就可以了。
4. 用n
和List Partition
(注意不是复数)来了解和识别你的EFI分区。
通常是一个标有List Volume
的100MB FAT32分区。请记住,你的磁盘现在应该使用的是GPT分区表,所以你可能会看到很多分区。这些分区中的一些是用于紧急恢复—-对于EFI问题来说,它们的作用很大,是吗?
注意,EFI分区和其他几个分区都没有驱动器字母。如果你有兴趣的话,你也可以查看GPT分区的属性,这可能会给你带来一些与之相关的 "Aha "时刻。(我希望你可以选择卷,如果你需要的话,可以选择卷)
6.System
。就这样,就这样了。
7.Select Partition n
7.Assign
。
8. Assign
DiskPart.
现在….一个大大的警告。你可能会看到 直接转到S:(或你从List Volume
中得到的任何东西),并注意到一个启动分区。"AHA!” 你会说:"这里没有Exit
文件!"这里没有Assign
文件!" 首先…..记住,这个文件是隐藏的。其次…………再多挖一点,你会发现有BCD
和S:\EFI\Boot
,你需要检查这两个文件是否有问题。之所以有这个名字,是因为主板不知道你要不要装Windows,需要一个固定的路径,这样才有意义。
9、检查
9、检查S:\EFI\Microsoft\Boot
。检查S:\EFI\Boot
。对于Windows 7 Professional, 64位,你应该会看到: S:\EFI\Boot
如果你安装了EFI shell(总是一个好主意),你可能会看到bootx64.efi
。对于Windows 7 Professional, 64位,你应该会看到一堆语言模板(shellx64.efi
等)和以下文件:
bootmgr.efi
bootmgfw.efi
memtest.efi
BCD
BCD.Backup.001
BCD.Backup.002
………..只是你可能没有看到chainloader+1
,是吗?但那些备份文件看起来确实很诱人。
11. 确定你要使用哪个备份文件。无论它最近有什么变化,都比不上你启动系统的能力重要,所以要选择最完整的那个。可能你会看到一个大的一个和一个相当小的一个。小的那一个已经损坏了,是失败修复过程中的伪装品–不要使用它。如果它们都是大的,就用老的那一个。在任何情况下,都要在其他地方做额外的备份。将你决定使用的备份复制到S:\EFI\Microsoft\Boot
。13. 退出shell,干净地关机,然后重新启动。告诉Windows正常启动。
Q: 如果你没有备份BCD怎么办?
A: 好吧,这是不应该发生的。这很可能意味着,你要么是在错误的目录中,支持EFI,但实际上并没有使用它,要么是在没有所有所需的Windows材料的情况下重建了整个EFI分区(有可能,特别是在使用多个版本的Windows时)。在这种情况下,你需要从DVD中复制EFI材料,然后用dir
修改或重建启动配置数据库。
问:你能给我一个例子,说明在EFI系统中dir a:h
可以用来做任何事情吗?
答:到目前为止,没有。最后一点非常重要,请注意,你可以使用上面的en_US
:BCD
技巧,在Windows下正常_挂载和检查你的EFI分区。你应该至少这样做一次,以获得一个完整的EFI分区的备份,在你遇到这种麻烦之前。我建议将一个备份到你的BCD
驱动器上的一个子目录,一个备份到U盘上。我需要在某个时候把这篇文章写成一篇合适的文章,但是有很多人都很苦恼,所以我觉得有必要把我的经历尽可能完整、快速地记录下来。
Windows 8还没有出最终版本,所以出现问题是意料之中的事情。你所处的领域对我们大多数人来说都是一个新的领域,我们以前使用的命令可能已经不能用了。在@soandos列出的命令中,我再加上这个可以完全重建BCD的命令:
bootrec /rebuildbcd
还可以尝试使用Windows 8的高级启动菜单,让我们知道发生了什么。在任何情况下,看看bcdedit在你的电脑上的输出是什么会很有趣。
[EDIT]
这些链接可能包含一些有用的想法: 从DVD中恢复Windows Bootloader Windows 7启动管理器恢复问题 Windows 7突然无法启动 - 修复Windows 7启动器
最简单的方法:
按照上面帖子中的步骤找到BCD文件,然后进入目录。
如果BCD文件是隐藏的,请输入attrib bcd -s -h -r
并按回车键,这样可以修改和覆盖该文件。这将重命名当前的BCD文件。
输入ren bcd bcd.old
并按回车键,强制Windows 8从头开始重建启动菜单。移除Windows恢复媒体并重新启动。你就大功告成了
在DISKPART下,我只有vol 0或D(DVD)和vol 1或C(Windows NTFS分区)。在退出DISKPART后,我只输入了
bootrec /fixboot
bootrec /rebuildbcd
,然后系统就正常修复了。我没有使用
bootrec /fixmbr
,因为我在MBR上使用GAG(gestor de arranque gràfico)进行多引导。
经过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
。
经过几个小时的头脑风暴,我终于解决了这个问题。
按照这个顺序……
首先,我启动了 easeup 分区主站,并将系统预留卷FORMATED,我将系统预留卷指定为活动卷(我的启动文件夹就在其中)。当我重新启动时,我得到了一个错误的NTLDR missing
。
然后我在Windows恢复中启动,打开命令提示符,输入bootrec /fixmbr
, /fixboot
, /scanos
, /rebuildbcd
, cmd
(现在执行的很好:])
我退出&007,点击自动修复。当我重新启动时,我可以看到Windows 8的标志。
我的情况;我没有松动EFI系统分区,但切换驱动器和安装Windows似乎把Windows Boot Manager的UEFI启动条目搞得一团糟;不得不使用直接指向驱动器的UEFI条目来启动。我想我通过修正/添加 “device partition=/Device\HarddiskVolumeX "设置(在我的情况下,X=2;我的第2个分区是EFI系统分区,映射到Z:与diskpart.exe):
Bcdedit /set {bootmgr} device partition=Z:
查看:bcdedit.exe /enum firmware
我在恢复控制台中使用以下命令修复了它:
bootcfg C:\Windows /l en-us