看起来我的 BCD 不知怎么坏了,但我不知道问题出在哪里。系统启动正常,但它阻止 Windows 安装更新:
MoSetupPlatform: Opening BCD store...
CDlpActionDiskSpaceReq::CalculateRequiredDiskSpaceInstallReq(1752): Result = 0x8007001F
我在 MacBook(bootcamp)上运行 Windows 10,它使用 EFI 分区表。当我bcdedit /enum
在提升的提示符下运行时,我得到
The boot configuration data store could not be opened.
A device attached to the system is not functioning.
当我尝试直接打开商店时,它可以正常打开:
B:\>bcdedit.exe /store B:\EFI\Microsoft\Boot\BCD /enum
Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=B:
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
resumeobject {8b3fea76-03c8-11e6-8f47-dc08058a457d}
displayorder {default}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {default}
device partition=C:
path \WINDOWS\system32\winload.efi
description Windows 10
locale en-US
inherit {bootloadersettings}
recoverysequence {8b3fea78-03c8-11e6-8f47-dc08058a457d}
displaymessageoverride Recovery
recoveryenabled Yes
isolatedcontext Yes
allowedinmemorysettings 0x15000075
osdevice partition=C:
systemroot \WINDOWS
resumeobject {8b3fea76-03c8-11e6-8f47-dc08058a457d}
nx OptIn
bootmenupolicy Standard
Windows 是否将实际的 BCD 存储在其他地方?Windows 如何知道在哪个分区和路径上查找系统 BCD 存储?
我如何诊断我的 BCD 存储出了什么问题?
更新:忘记了我使用refind
引导加载程序启动,该引导加载程序可能会启动bootmgfw.efi
答案1
如果 EFI 启动分区的分区类型错误,系统会启动但bcdedit /enum
失败。另外,这也可能导致reagentc /enable
失败,并且可能阻止 Windows 更新成功安装。
您可以使用以下命令检查这是否是您的问题diskpart
。假设您只有一个硬盘驱动器,
select disk 0
list partition
你应该看到类似这样的内容:
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 System 500 MB 1024 KB
Partition 2 Primary 445 GB 501 MB
(也可能有或没有第三个“恢复”分区。)
较小的名为“系统”的分区是您想要的分区,通常是分区 1,因此
select partition 1
detail partition
你应该看到类似这样的内容
Partition 1
Type : c12a7328-f81f-11d2-ba4b-00a0c93ec93b
Hidden : Yes
Required: No
Attrib : 0XC000000000000000
Offset in Bytes: 1048576
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
* Volume 3 FAT32 Partition 500 MB Healthy System
如果文件系统不是 FAT32,则说明您没有找到正确的分区。该分区也应该是隐藏的,并且通常不会分配驱动器号,除非(如最初发布的问题中所述)出于故障排除目的明确指定了驱动器号。它可能不完全是 500MB,但应该只占用硬盘的一小部分。
EFI 分区的类型应c12a7328-f81f-11d2-ba4b-00a0c93ec93b
如上所示。 如果不是,尤其是如果它是ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
(见Microsoft 基本数据分区在维基百科上),那么这很可能就是问题的原因。
补充:如果当前分区类型为07或者任意两个十六进制数字,则表示磁盘是以MBR模式分区的,而不是以EFI模式分区的,此答案不适用。
如果分区类型不正确,您可以使用以下set id
命令修复此问题,
set id=c12a7328-f81f-11d2-ba4b-00a0c93ec93b
然后命令bcdedit /enum
就可以起作用了。
答案2
看来 OS X 做了一些不兼容的更改,导致 bcdedit 无法使用。以下是我暂时修复此问题的方法:使用⌘+ Alt+ P+重置 NVRAM R,然后按住 直接启动到 windows 分区Alt。我能够安装 windows 更新,但在启动到 OS X 并安装更新后,bcdedit 再次损坏。
答案3
迁移到新的 SSD 后出现同样的问题(通过 efi-partition \efi\microsoft\boot\bcd 启动到 win10)
bcdedit /enum 无法打开系统存储(BCD),错误:
无法打开启动配置数据存储。找不到请求的系统设备。
(德语:无法为启动配置数据提供存储空间。 无法为允许的系统设备提供存储空间。)
问题是:
efi 分区的分区类型错误
(通常是 msftdata,分区 ID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7)
必须是 esp(efi 启动分区,分区 id=c12a7328-f81f-11d2-ba4b-00a0c93ec93b)
进一步的症状:
休眠功能不起作用。
BCD 未加载到注册表 (HKEY_LOCAL_MACHINE\BCD00000000),也不在配置单元列表 (HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist) 中
简单的解决方案:
打开 cmd > diskpart > 选择 efi 分区(fat32,在我的情况下是 360 mb)
设置 id=c12a7328-f81f-11d2-ba4b-00a0c93ec93b (efi 启动分区),退出 diskpart
此后,Windows 识别 efi 启动分区并将 BCD 加载到注册表,BCD 出现在配置单元列表中,bcdedit /enum 工作正常,休眠工作正常
Linux下类似解决办法:
使用 gparted 将分区标志从 msftdata 更改为启动,尤其是
答案4
A Windows 是否将实际的 BCD 存储在其他地方?Windows 如何知道在哪个分区和路径上查找系统 BCD 存储?
EFI 模式采用两条腿走路;
1- 一个特殊的 BIOS(片上可写区域)分区,其中保存了 OS 加载程序分区 GUID。2-
一个具有该 GUID 的系统(隐藏)分区,名为 EFI,Bootloader 可执行文件位于其中(.efi 扩展文件)。
如果您在 EFI 模式下安装/重新安装了多个操作系统,那么很有可能 BIOS SPI 芯片会被许多旧操作系统的记录所弄乱,并最终填满那个特殊的 8MB(如果我没记错的话)片上分区的空间并变为只读。
微软有一个 Technet 页面其中展示了如何清理 EFI 重复或不需要的 guid 记录(例如 OS 已删除但 EFI 记录仍然存在)。
它涉及创建当前配置的备份,然后在没有重复记录的情况下重置它。
在提升的 cmd 提示符下;
Bcdedit /export savebcd
这将备份当前的引导加载程序配置。
复制一份以用于恢复目的(savebcd 将是我们的备份);
Copy savebcd newbcd
然后将当前记录导出为人类可读格式的文本文件;
Bcdedit /enum firmware > enumfw.txt
notepad enumfw.txt
使用记事本加载该文件并检查它以指出重复的记录。
删除每个重复/过时的记录:
Bcdedit /store newbcd /delete {93cee840-f524-11db-af62-aa767141e6b3}
其中 93cee840-f524-11db-af62-aa767141e6b3 只是一个示例 guid,
将其替换为您认为不需要的 guid
删除所有不需要的指南后;
Bcdedit /import newbcd /clean
清除当前 EFI 记录并导入已清理的(我们刚刚从中清理了不需要的记录的)配置数据。
如果您仍然收到“连接到系统的设备无法运行。”错误,
那么;我不想成为一个坏消息传播者,但你有两条路可走;
-坚持使用当前系统;尽快制作整个磁盘映像备份(包括您的 EFI 分区),因为很可能您的 SPI(BIOS)芯片已经混乱,如果不重新刷新/更换它,您就无法刷新它。
这意味着芯片上当前的 Bootloader 指针是最终的,如果您尝试在 EFI 模式下重新安装另一个操作系统,它根本无法完成安装,安装程序将因错误而中断(Windows 操作系统系列)或将完成但 BIOS 不会加载它(Linux 安装程序,例如 openSUSE),此外,您将丢失旧配置,您的设备上最终将没有可启动的操作系统。
- 考虑到您有一台 Mac,请要求技术支持重新刷新/更换 BIOS。
如果不是这种情况或不可行;更换硬盘切换到传统 BIOS 模式(如果 BIOS 中的那个开关仍然有效,对我来说它就是不起作用(Lenovo Ideapad B50)
除了这些还有一些其他选项需要排除,如下所示:因为 YouTube 上的一些关于这个主题的视频中提供了这些安全提示,所以我只是提到它们是为了不去尝试,因为它们很危险并且/或者会使设备保修失效(取出笔记本电脑电池 +拆卸设备以露出主板,然后取出 bios 电池+ 等待(希望)BIOS重置,或短接(短路) SPI 芯片); 尤其是 BIOS 电池拆卸方法在大多数(如果不是全部)笔记本电脑中都不起作用,而短路 SPI 芯片甚至会导致整个系统变砖。
希望这些有帮助。