bcdedit 修复
一、问题描述
无法打开启动配置数据存储
经查询还可能出现:执行
msconfig
引导为 空 。在性能选项卡中 数据执行保护不可编辑
二、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分区;
- 使用分区工具删除 esp 分区
- 新建fat esp分区
- 从光盘或镜像中拷贝文件至esp 分区
再执行bcdedit,我们发现其运行正常了,而且msconfig,启动恢复菜单也都正常了
文件关系
删除 bootmgfw.efi ,保留 bootx64.efi
选择从本地硬盘启动 系统仍然可以引导进入
选择 Windows Boot Manager 进入失败删除 bootx64.efi ,保留 bootmgfw.efi
选择从本地硬盘启动 进入失败
选择 Windows Boot Manager 系统仍然可以引导进入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在重启后被卸载了需要重新加载。