bcdedit无法打开启

一、问题描述

  1. 无法打开启动配置数据存储
    无法打开启动配置数据存储
    经查询还可能出现:
    找不到指定文件

  2. 执行 msconfig 引导为 空 。
    msconfig

  3. 在性能选项卡中 数据执行保护不可编辑
    数据执行保护

二、UEFI+GPT

GPT分区下,windows系列引导故障处理程序有bcdedit,bcdboot等
uefi+gpt的windows引导

UEFI BIOS→ESP分区→ EFI/Boot/bootx64.efi→\efi\Microsoft\boot\bootmgfw.efi→efi\Microsoft\Boot\BCD→\Windows\system32\winload.efi→加载内核启动系统

ESP分区为UEFI下Windows的引导分区,实际上就是一个FAT格式的分区,并无其他特殊的要求。并不像在传统BIOS下,启动Windows需要“活动的主分区”。在ESP分区下,存在几个重要的文件(“√”表示必不可少的文件):

√EFI/Boot/bootx64.efi(或bootia32.efi)
√ EFI/Microsoft/Boot/bootmgfw.efi
√ EFI/Microsoft/Boot/BCD
EFI/Microsoft/Boot/zh-CN

上面这几个文件可以系统安装光盘中找到,我们只要简单的使用“复制”-“粘贴”,放到ESP分区即可。当然也可以通过命令进行操作:bcdboot C:\windows /l zh-cn

上述命令成功执行的前提:
1、必须存在bcdboot.exe文件(原版Windows8.1/8/7的C:\Windows\System32下有此文件)。
2、命令在bcdboot.exe文件所在路径下执行。
3、若自行创建的FAT分区(不是标准的ESP分区),则需要执行命令:bcdboot C:\windows /l zh-cn /s Y: (Y代表FAT分区盘符)

文件说明

Windows Boot Manager --------安装完Windows系统后而出现的启动选项(相关的信息存储在NVRAM),可以删除和建立和bcdboot.exe有关
Bootmgfw.efi --------引导Windows的引导文件
Bootx64.efi ---------UEFI的必需引导文件
bcdboot.exe--------修复UEFI启动的命令行工具,微软出品

Bootx64.efi ,它只是一个通用名,权限丰富且大于Windows 默认,就是说如果你的Windows 默认的启动文件不在了, 启动计算机默认的引导文件Bootx64.efi 也是可以启动计算机的。使用计算机默认文件随时可以在各种环境下启动计算机,EFI SHELL、ISO、 Windows、Linux…都可以,通吃型.
所任意有效的efi改成Bootx64.efi 都被计算机启动加载,并启动
Windows默认引导 -------就是你为计算机安装了操作系统,或者修复了UEFI引导后,启动菜单会有 Windows Boot Manager 选项,该选项默认从bootmgfw.efi 启动系统 bootmgfw.efi 该位置的该文件只能用于启动Windows,不是通用名,权限单一

对于UEFI启动Windows来说Bootx64.efi 和bootmgfw.efi 其实是同一个文件,二者的循环冗余校验CRC值是一样的。 他们都有启动windows的能力,但是身处的位置不一样,

明明系统中存在esp分区,为什么bcdedit提示找不到呢,这种情况往往发生在ghost系统,或者不当分区操作之后。esp分区因为种种原因导致系统无法识别,这是我们需要重新新建esp分区;

  1. 使用分区工具删除 esp 分区
  2. 新建fat esp分区
  3. 从光盘或镜像中拷贝文件至esp 分区

再执行bcdedit,我们发现其运行正常了,而且msconfig,启动恢复菜单也都正常了

文件关系

  1. 删除 bootmgfw.efi ,保留 bootx64.efi
    选择从本地硬盘启动 系统仍然可以引导进入
    选择 Windows Boot Manager 进入失败

  2. 删除 bootx64.efi ,保留 bootmgfw.efi
    选择从本地硬盘启动 进入失败
    选择 Windows Boot Manager 系统仍然可以引导进入

  3. bcdboot 和 “Windows Boot Manager ” “ Bootmgfw.efi” “ Bootx64.efi ” 之间的联系

bcdboot c:\windows /l zh-cn
bcdboot f:\windows /s j: /l zh-cn /f UEFI

bcdboot.exe 会修复系统引导,而且会同时修复计算机默认引导和Windows 默认引导,在ESP分区同时出现bootx64.efi和bootmgfw.efi,

并且bootx64.efi是由bootmgfw.efi 改名而来的。与此同时在Boot Menu启动选择菜单那里生成“Windows Boot Manager”,

Windows Boot Manager 及其包含的信息是保存在主板上的NVRAM里面的,而不是保存在硬盘上,故删除Windows Boot Manager需要到BIOS设置区删除。
4.

三、UEFI+MBR

mbr+uefi方式启动后,win7的bcdedit会从以下注册表读取信息获取引导分区位置,从而将相应目录下的系统bcd文件加载到注册表HKLM\BCD00000000,然后进一步进行操作。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"FirmwareBootDevice"="multi(0)disk(0)rdisk(0)partition(1)"
"SystemBootDevice"="multi(0)disk(0)rdisk(0)partition(2)"

然而微软早期也许没有意料到会有用户在uefi+mbr模式下引导windows吧,对在mbr模式下识别系统bcd的情况没有进行相应的处理,所以导致mbr+uefi+win7x64环境下,bcdedit,msconfig,系统属性的启动和故障恢复os列表均出现了无法识别系统bcd的异常。

到了win8时期,微软也许意识到这种问题,对bcdedit进行了完善,进而可以识别mbr+uefi模式下的系统bcd。所以解决方案既可以用win8的bcdedit覆盖win7版本,也可以将win8x64的bededit复制到win7x64上,运行一次,然后win7x64就可以成功识别系统bcd了,不过这种方法重启后就失效了,HKLM\BCD00000000在重启后被卸载了需要重新加载。


版权声明:本文为ynchyong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。