Elm*_*lmo 129 windows-7 bootloader uefi windows-8
几天前,我在硬盘上以 EFI 模式安装了 Windows 7 和 Windows 8。今天,引导加载程序丢失/损坏。
我目前在闪存驱动器上安装了 Windows 8 安装程序,并尝试使用自动修复选项来修复引导加载程序,但它没有做任何事情。Windows 8 安装程序中也缺少启动修复选项。
如何从命令提示符修复/重新创建 EFI 引导加载程序?
BCDEDIT 返回以下消息:
The requested system device cannot be found.
Run Code Online (Sandbox Code Playgroud)
小智 187
在克隆到新的 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
Run Code Online (Sandbox Code Playgroud)
然后为 EFI 分区分配一个驱动器号:
DISKPART> sel vol 3
Volume 3 is the selected volume.
DISKPART> assign letter=b:
DiskPart successfully assigned the drive letter or mount point.
Run Code Online (Sandbox Code Playgroud)
通过输入exit并在命令提示符下运行以下命令来退出 DiskPart 工具:
cd /d b:\EFI\Microsoft\Boot\
bootrec /fixboot
Run Code Online (Sandbox Code Playgroud)
删除或重命名 BCD 文件:
ren BCD BCD.bak
Run Code Online (Sandbox Code Playgroud)
使用bcdboot.exe重新创建BCD存储:
bcdboot c:\Windows /l en-gb /s b: /f ALL
Run Code Online (Sandbox Code Playgroud)
该/f ALL参数更新包括 UEFI 固件/NVRAM 在内的 BIOS 设置,/l en-gb用于针对英国/GB 语言环境进行本地化。本地化默认为美国英语,或使用 en-US。
重新启动并交叉手指。
这让我很头疼。我在圈子里转了很长时间。在撰写本文时,关于修复 UEFI/Windows 8 的可靠信息并不多。
[编辑]
要重新启用 Hyper-V,我还必须在重新启动后从 Windows 中的管理员命令提示符运行以下命令:
bcdedit /set {default} hypervisorlaunchtype Auto
bcdedit /set {default} nx OptIn
Run Code Online (Sandbox Code Playgroud)
小智 22
其他答案很有帮助,但这是我必须做的来修复我的。
我有一个装有 Windows 7 的 1.5 TB 硬盘。然后我将 Windows 8 安装到我购买的 150 GB SSD 上。1.5TB硬盘坏了,我能听到它的声音,我的电脑不再启动,说“请插入系统盘”。我认为引导加载程序丢失了,因为它一定在 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
Run Code Online (Sandbox Code Playgroud)
这些命令将创建 EFI 分区。输入list vol.仔细检查所有内容。您应该会看到一个 200 MB 的分区。您现在需要为其分配一个字母。通过键入assign,然后list vol再次查看已分配的字母来执行此操作。
现在完成了,您需要将引导文件复制到这个新创建的分区:
bcdboot C:\Windows /l en-gb /s B: /f ALL
Run Code Online (Sandbox Code Playgroud)
注意:您必须替换C:为包含 Windows 的分区的驱动器盘符,以及B:分配给您刚刚创建的 EFI 分区的盘符。
我还输入了以下命令:
bootrec /fix
bootrec /fixmbr
Run Code Online (Sandbox Code Playgroud)
这两个人都成功回来了,不知道他们是否真的做了什么,但谁在乎。Windows 现在已完全恢复。
小智 9
好的,我有时间在这里整理一个适当的大纲。它很长,但非常完整,应该可以帮助您了解发生了什么。
首先,这可能发生的一种方式:
这就是您现在可能已经完成的操作。如果其中任何一项不匹配,请仔细评估这是否确实是您的问题,并阅读本文以获得想法,但不要在没有先思考的情况下遵循它。
(somewhere)\Boot\BCD是并且文件是隐藏的;使用dir /a:hs.BCDedit.exe并发现它可以让您使用/CreateStore(并且请不要将其命名为“BCD”)在暂存文件中“模拟”启动配置数据库,您可以明确使用暂存文件使用该/Store选项,您可以使用 为 Windows 启动管理器添加菜单项/Create {bootmgr},并且您应该能够使用/Import.../SysStore选项,这听起来不错,但您无法让它使用另一家商店,因为它“模棱两可”。你有一种预感,它知道商店在哪里——或者应该在哪里——但你找不到它。MountVol挂载 EFI 分区,但它甚至没有显示在列表中,所以您不能。
如果所有这些都非常适合您,那么可能会发生以下情况:
/SysStore——实际上,这可能是正确的行为,否则你会把它放在错误的地方。MountVol故意隐藏 EFI 分区(或不知何故无法注意到它)。这会阻止挂载文件系统,从而阻止找到正确的子目录、验证数据库是否存在等。
所以,最后,这就是你需要做的事情。好消息是它可能比您现在希望的要简单得多。
BCDedit变得古怪——它没有看到数据库,但它知道它应该去哪里。但是,它没有的任何东西都是驱动器号。那么该怎么办?Assign命令吗?你猜怎么着。DiskPart。DiskPart,它的基本工作方式是集合的层次结构;您必须在一个级别中选择一个元素才能继续下一个级别。所以,,List Disk然后Select Disk n哪里n适合你。List Partition和List Volume(注意非复数)来获得一些见解并识别您的 EFI 分区。System。请记住,您的磁盘现在应该使用 GPT 分区表,因此您可能会看到很多分区。其中一些用于紧急恢复——它们对 EFI 问题大有裨益,嗯?那好吧。Select Partition n其中 n 是 EFI 分区。(我希望您可以根据需要选择音量。)Assign. 就是这样。不要指定驱动器号;只是Assign。List Volume. 您现在应该看到分配给 EFI 分区的驱动器号。Exit磁盘部分。Assign)并注意到一个 Boot 分区。“啊哈!” 你会说。“这里没有BCD文件!” 首先...记住该文件是隐藏的。其次...再深入研究一下,您会注意到虽然存在S:\EFI\Boot并且S:\EFI\Microsoft\Boot S:\EFI\Boot用于主板,并包含 Windows 引导加载程序(以及其他操作系统的其他内容)。之所以有这个名字,是因为主板不知道您是否要安装 Windows,并且需要一个有意义的固定路径。S:\EFI\Boot。对于 64 位 Windows 7 Professional,您应该看到:bootx64.efishellx64.efi. chainloader+1将不会在此处看到额外的条目。S:\EFI\Microsoft\Boot使用都 dir和dir a:h。对于 64 位 Windows 7 Professional,您应该会看到一堆语言模板(en_US等)和以下文件:
bootmgr.efi
bootmgfw.efi
memtest.efi
BCD
BCD.Backup.001
BCD.Backup.002
Run Code Online (Sandbox Code Playgroud)
...除了你可能没有看到BCD,是吗?但那些备份文件确实看起来很诱人。BCD.
问:如果您没有备份 BCD 怎么办?
A:嗯,那真的不应该发生。这可能意味着您要么位于错误的目录中,支持 EFI 但实际上并未使用它,要么以某种方式在没有所有必需的 Windows 材料的情况下重建整个 EFI 分区(可能,尤其是在使用多个版本的 Windows 时)。在这种情况下,您需要从 DVD 复制 EFI 材料,然后使用BCDedit.
问:您能否举一个BCDedit /SysStore可用于在 EFI 系统上执行任何操作的场景示例?
答:到目前为止,没有。
无论如何,希望这有助于解决人们的一些问题,或者至少让他们思考。最后一点非常重要,请注意,您可以使用上面的:技术在 Windows 下正常挂载和检查 EFI 分区。在遇到此类麻烦之前,您应该至少执行一次此操作,以获得 EFI 分区的完整备份。我建议一份备份到您驱动器上的子目录中,另一份备份到USB 闪存驱动器上。DiskPartAssignC:
抱歉,啰嗦了这么多。我需要在某个时候把它变成一篇合适的文章,但是有太多人感到非常沮丧,我觉得有必要尽可能完整和迅速地记录我的经历。
Windows 8 还没有最终版本,所以问题是可以预料的。对于我们大多数人来说,您处于一个新领域,我们过去使用的命令可能不再适用。对于@soandos 列出的命令,我添加了一个完全重建 BCD 的命令:
bootrec /rebuildbcd
Run Code Online (Sandbox Code Playgroud)
还尝试使用 Windows 8 的高级启动菜单,让我们知道会发生什么。
如果没有任何效果,文章在启动失败时修复 Windows 7有一些关于使用bcdedit 的建议纠正启动错误的建议。无论如何,看看您的计算机上 bcdedit 的输出是什么会很有趣。
[编辑]
这些链接可能包含一些有用的想法:
从 DVD 恢复 Windows 引导加载程序
Windows 7 引导管理器恢复问题
Windows 7 突然无法引导 – 修复 Windows 7 引导加载程序
| 归档时间: |
|
| 查看次数: |
518383 次 |
| 最近记录: |