bcdedit.exe 拒绝打开系统存储

bcdedit.exe 拒绝打开系统存储

看起来我的 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下类似解决办法:

https://www.tenforums.com/general-support/187123-bcdedit-command-not-working-since-i-rebuilt-bcd.html

使用 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 芯片甚至会导致整个系统变砖。

希望这些有帮助。

相关内容