无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 4422|回复: 16
打印 上一主题 下一主题

[求助] 系统启动时调用的BCD,其实是在nvram中的BCD,是吗?

  [复制链接]
跳转到指定楼层
1#
发表于 2014-11-13 11:12:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天,在用BOOTICD编写BCD菜单时发现些奇怪的现象,明明把某启动项写入了系统的BCD,用bootice或者bcdedit/enmu也能看到该项,但是windows启动时就是死活没有该项! 好像系统调用的不是我修改的BCD。机子是UEFI+GPT,windows 8.1 。 于是查找了一些资料,有些启发:

参考:http://bbs.wuyou.net/forum.php?m ... d=304392&page=3

【微软技术文章】
在某些基于统一可扩展固件接口 (UEFI) 的计算机上,固件会在计算机启动时为本地设备(如 CD-ROM 或硬盘驱动器)创建稳定随机存取内存 (NVRAM) 项。Bcdedit 会将 NVRAM 中的固件命名空间对象与系统启动配置数据 (BCD) 同步。当您执行 bcdedit /set 或 /enum 命令时,Bcdedit 会打开系统 BCD 存储。当 bcdedit 打开 BCD 时,它将 NVRAM 中的项与 BCD 中的项进行比较。如果 NVRAM 中由固件创建的项在 BCD 中不存在,则将它们添加到系统 BCD。当 bcdedit 关闭系统 BCD 时,BCD 中包含的但 NVRAM 中不存在的任何启动管理器项将被添加到 NVRAM。bcdedit /import 命令可将所有固件命名空间对象从系统 BCD 复制到 NVRAM 中。


照这么是说,我修改添加的项,始终没有被复制到NVRAM中去(原因不明),所以系统启动仍然调用的还是原来的BCD,所以添加的启动项看不到。

请教大神们,不知我上述猜测是否正确。 如果这样,为啥BCD没有被复制到NVRAM中, 是不是用bcdedit /import 可以手动把BCD复制进NVRAM?
2#
发表于 2014-11-13 15:57:09 | 只看该作者
没有测试对象,无法测试. 但对楼主的现象表示关注. 也想搞清楚其中的关系,尤其是UEFI引导的机器BCD的信息.

点评

回去测试了一下, 还是不行, 看来BCD不是我想的这么简单。 还盼大神指教。  详情 回复 发表于 2014-11-13 21:57
回复

使用道具 举报

3#
 楼主| 发表于 2014-11-13 21:57:01 | 只看该作者
sgw888 发表于 2014-11-13 15:57
没有测试对象,无法测试. 但对楼主的现象表示关注. 也想搞清楚其中的关系,尤其是UEFI引导的机器BCD的信息.

回去测试了一下, 还是不行, 看来BCD不是我想的这么简单。 还盼大神指教。

点评

真正的BCD在ESP区。 先挂载ESP区,然后在bootice内打开“其他BCD文件”,找到ESP分区内的BCD修改就好了 ,挂载ESP分区的软件很多,我用UEFIX挂载  详情 回复 发表于 2014-11-13 22:03
回复

使用道具 举报

4#
发表于 2014-11-13 22:03:15 | 只看该作者
詹姆斯草 发表于 2014-11-13 21:57
回去测试了一下, 还是不行, 看来BCD不是我想的这么简单。 还盼大神指教。

真正的BCD在ESP区。
先挂载ESP区,然后在bootice内打开“其他BCD文件”,找到ESP分区内的BCD修改就好了
,挂载ESP分区的软件很多,我用UEFIX挂载

点评

谢谢你多次给的指导。一般说来是你讲的这样,但是我的这台妖机挺怪异。我相信自己路径也没找错。改的bcd也没错。因为用bootice和bcdedit查看都能发现添加的启动项,但是怪异的就是实际启动时菜单没这项。  详情 回复 发表于 2014-11-13 22:31
回复

使用道具 举报

5#
 楼主| 发表于 2014-11-13 22:31:12 | 只看该作者
lbw2007 发表于 2014-11-13 22:03
真正的BCD在ESP区。
先挂载ESP区,然后在bootice内打开“其他BCD文件”,找到ESP分区内的BCD修改就好了
...

谢谢你多次给的指导。一般说来是你讲的这样,但是我的这台妖机挺怪异。我相信自己路径也没找错。改的bcd也没错。因为用bootice和bcdedit查看都能发现添加的启动项,但是怪异的就是实际启动时菜单没这项。

回复

使用道具 举报

6#
 楼主| 发表于 2014-11-18 22:47:56 | 只看该作者
这几天的测试和思考终于有了些收获。大神们都很忙,所以只好自己摸索了。简单说来还是Uefi的构架引起的 "奇怪"现象。那个死活不出现的启动项源于我加载移动硬盘的VHD!NVram其实同步的只是bcd的{fwbootmgr}项,也就是efi的启动顺序,也就是说带有efi的启动设备才会被记录到nvram去。虽然我在BCD添加了vhd的启动项,但是这块移动硬盘是传统的bios-mbr构架,当我的uefi-gpt构架系统启动时,移动硬盘设备根本没被记录到nvram内,所以bcd菜单涉及到这个设备的启动菜单就不会出现!
于是我把移动硬盘转成了GPT方式,划分出一个fat32的esp分区,建立了efi的启动模式。然后参考了大神们如何修改注册表使得USB移动硬盘运行win7VHD。把该启动项再加入BCD菜单,一切就ok了!

点评

您寫得很長.或許是您自己的體會 簡單講... UEFI搜尋.抓的.呈現的是 FAT(or FAT32)分區下的... EFI\microsoft\boot\bootmgfw.efi EFI\Ubuntu\grubx64.efi EFI\boot\bootx64.efi 只要有這些檔.Uefi啟動該設  详情 回复 发表于 2014-11-19 00:14
回复

使用道具 举报

7#
发表于 2014-11-18 22:56:57 | 只看该作者
BCD的fwbootmgr是独立的吧, 用bootice智能模式添加项目应该能直接在启动时看到啊, 还是说你把超时设0导致选项列表被跳过了?
回复

使用道具 举报

8#
发表于 2014-11-19 00:14:05 | 只看该作者
詹姆斯草 发表于 2014-11-18 22:47
这几天的测试和思考终于有了些收获。大神们都很忙,所以只好自己摸索了。简单说来还是Uefi的构架引起的 "奇 ...

您寫得很長.或許是您自己的體會

簡單講...
UEFI搜尋.抓的.呈現的是 FAT(or FAT32)分區下的...
EFI\microsoft\boot\bootmgfw.efi
EFI\Ubuntu\grubx64.efi
EFI\boot\bootx64.efi

只要有這些檔.Uefi啟動該設備的選項就會出現...
您只要能把該啟動項目的相關設定設對了.就能啟動!
與寫入NVRAM沒什關係...

点评

我突然想到个问题,和大元帅商榷: 您说: UEFI搜尋.抓的.呈現的是 FAT(or FAT32)分區下的... EFI\microsoft\boot\bootmgfw.efi EFI\Ubuntu\grubx64.efi EFI\boot\bootx64.efi 这没错, 肯定对, 但是您说  详情 回复 发表于 2014-11-20 10:48
您说得对。由于解决了萦绕多天的启动问题,可能有点小兴奋,很多词不达意,主观臆断了。 最初想解决的就是一个启动问题——启动移动硬盘里VHDwin7。 就直接在主机Windows8.1的BCD添加启动项,可是问题来了:  详情 回复 发表于 2014-11-19 09:53
回复

使用道具 举报

9#
 楼主| 发表于 2014-11-19 09:53:49 | 只看该作者
本帖最后由 詹姆斯草 于 2014-11-19 10:09 编辑
peterpanheaven 发表于 2014-11-19 00:14
您寫得很長.或許是您自己的體會

簡單講...


您说得对。由于解决了萦绕多天的启动问题,可能有点小兴奋,很多词不达意,主观臆断了。

最初想解决的就是一个启动问题——启动移动硬盘里VHDwin7。

就直接在主机Windows8.1的BCD添加启动项,可是问题来了:启动时,添加的该项目就是不显示出来。

后来把VHDwin7文件直接放到主机的硬盘上启动,启动菜单就没问题了。

曾怀疑过BCD的路径、启动机制的问题,后来发现都不是关键。

后来判断还是与移动硬盘的格式类型有关系。问题就出在,这块移动硬盘是MBR的!

UEFI启动Windows时,BCD无法确认这块MBR的移动设备(大概MBR磁盘没有GUID?即使有,GUID号大概也根本无法传递给BCD吧?),所以也就无法显示上面的启动项了。

呢么,是否可以得出这个结论:在UEFI+GPT的环境下,BCD菜单不能添加在MBR硬盘上的启动项目?


我尝试过用P神的xorboot0.8可以加载MBR上的VHD,好像没这些问题。我想应该是启动机制不同的原因。

另外还有待验证一个问题:就这个环境下,移动硬盘上没有ESP分区和EFI的启动配置,是否也能加载VHD。

回复

使用道具 举报

10#
发表于 2014-11-19 10:16:08 | 只看该作者
试一下旧版本BOOTICE
回复

使用道具 举报

11#
 楼主| 发表于 2014-11-20 10:48:51 | 只看该作者

RE: 系统启动时调用的BCD,其实是在nvram中的BCD,是吗?

peterpanheaven 发表于 2014-11-19 00:14
您寫得很長.或許是您自己的體會

簡單講...

我突然想到个问题,和大元帅商榷:

您说:
UEFI搜尋.抓的.呈現的是 FAT(or FAT32)分區下的...
EFI\microsoft\boot\bootmgfw.efi
EFI\Ubuntu\grubx64.efi
EFI\boot\bootx64.efi

这没错, 肯定对, 但是您说:

“只要有這些檔.Uefi啟動該設備的選項就會出現...”

我觉得还不够。 因为如果不添加到固件启动管理器{fwbootmgr},即使fat分区上有这些文档,UEFI的启动项也不能呈现它们。。

所以我们用bcdboot、bootice等工具添加UEFI的启动项。

而所谓的固件启动管理器{fwbootmgr}, 我猜想就应该是写入NVRAM的变量之一吧,不知对不对。 如果是这样,就不该说与写入NVRAM没关系吧?


点评

我很同意楼主的观点,因为我和你遇到过同样的问题,也是一直在找答案。只是稍微有点不同。我是在同一个GPT硬盘的末端再划了一个FAT分区,我把所有的EFI启动项放在了FAT分区(实际不是真正的ESP分区),同样是可以引  详情 回复 发表于 2014-11-22 09:59
我觉得最大的问题是,你不能把移动介质中的操作系统添加到本地磁盘引导。 不知道你试没试过。我曾经向本地硬盘上安装g4d,结果在命令行中无法发现已经插上的U盘。关键在于你说的“修改注册表使得USB移动硬盘运行win  详情 回复 发表于 2014-11-20 13:04
回复

使用道具 举报

12#
发表于 2014-11-20 13:04:18 | 只看该作者
詹姆斯草 发表于 2014-11-20 10:48
我突然想到个问题,和大元帅商榷:

您说:

我觉得最大的问题是,你不能把移动介质中的操作系统添加到本地磁盘引导。
不知道你试没试过。我曾经向本地硬盘上安装g4d,结果在命令行中无法发现已经插上的U盘。关键在于你说的“修改注册表使得USB移动硬盘运行win7VHD”。这项功能实现了,就和UEFI没关系了

点评

你说 “不能把移动介质中的操作系统添加到本地磁盘引导” ,可是事实上已经成功了。你可能会说,是因为已经改了注册表的关系。但事实上,我改注册表后,移动硬盘还保持MBR类型,仍然不能在本地磁盘的windows上面显示  详情 回复 发表于 2014-11-20 14:49
回复

使用道具 举报

13#
 楼主| 发表于 2014-11-20 14:49:03 | 只看该作者
本帖最后由 詹姆斯草 于 2014-11-20 14:59 编辑
lbw2007 发表于 2014-11-20 13:04
我觉得最大的问题是,你不能把移动介质中的操作系统添加到本地磁盘引导。
不知道你试没试过。我曾经向本 ...


你说 “不能把移动介质中的操作系统添加到本地磁盘引导” ,可是事实上已经成功了。你可能会说,是因为已经改了注册表的关系。但事实上,我改注册表后,移动硬盘还保持MBR类型,仍然不能在本地磁盘的windows上面显示出移动硬盘上的VHD启动菜单(在BCD添加),应该和你用G4D不能发现U盘是一个道理。

也就是说,改了注册表只是让VHD系统启动时能够驱动USB接口,不至于在徽标出现后就蓝屏。但在本地系统上添加移动设备的启动项,还得让本地系统能够辨别出这个移动设备。我把移动硬盘MBR改成GPT后,本地磁盘的BCD上再添加移动设备的操作系统,就可以成功显示了。(我估计这和UEFI无法启动MBR设备的系统也是一个道理)
回复

使用道具 举报

14#
发表于 2014-11-22 09:59:12 | 只看该作者
詹姆斯草 发表于 2014-11-20 10:48
我突然想到个问题,和大元帅商榷:

您说:

我很同意楼主的观点,因为我和你遇到过同样的问题,也是一直在找答案。只是稍微有点不同。我是在同一个GPT硬盘的末端再划了一个FAT分区,我把所有的EFI启动项放在了FAT分区(实际不是真正的ESP分区),同样是可以引导EFI系统,但是怎么都不显示BCD菜单,而且这样进入系统后BOOTICE无法查看当前系统的BCD菜单,只有把ESP分区的EFI目录中放入BCD菜单,才会在开机时显示BCD,也可以查看当前BCD。
还有另一个问题,我的EFI-PE只有在我的MBR硬盘中被识别启动,在启动硬盘的GPT分区中实现不了,不知为什?谢谢!

点评

你的问题还是和我不一样。你把bcd移动到不是默认的位置,系统当然找不到,菜单当然也就不会出现。(既然还能正常启动,我想大概是系统自己使用了备用bcd模版)。我的问题是bcd菜单能出现,但是我另外添加的启动项不  详情 回复 发表于 2014-11-22 22:37
回复

使用道具 举报

15#
 楼主| 发表于 2014-11-22 22:37:43 | 只看该作者
2012sillian 发表于 2014-11-22 09:59
我很同意楼主的观点,因为我和你遇到过同样的问题,也是一直在找答案。只是稍微有点不同。我是在同一个GP ...

你的问题还是和我不一样。你把bcd移动到不是默认的位置,系统当然找不到,菜单当然也就不会出现。(既然还能正常启动,我想大概是系统自己使用了备用bcd模版)。我的问题是bcd菜单能出现,但是我另外添加的启动项不出现。原因自认为已经找到。

点评

我的FAT分区和ESP分区文件结构和内容都是一样的,也就是说,BCD也是在/EFI/MICROSOFT/BOOT/下,如果把ESP和FAT分区的BCD都删掉的话,就无法启动,删掉任一个都可以启动,我的启动项是设定在了FAT区而不是ESP分区。你  详情 回复 发表于 2014-11-23 23:05
回复

使用道具 举报

16#
发表于 2014-11-23 23:05:19 | 只看该作者
詹姆斯草 发表于 2014-11-22 22:37
你的问题还是和我不一样。你把bcd移动到不是默认的位置,系统当然找不到,菜单当然也就不会出现。(既然 ...

我的FAT分区和ESP分区文件结构和内容都是一样的,也就是说,BCD也是在/EFI/MICROSOFT/BOOT/下,如果把ESP和FAT分区的BCD都删掉的话,就无法启动,删掉任一个都可以启动,我的启动项是设定在了FAT区而不是ESP分区。你的这个问题,我也碰到过的,可以尝试全盘搜索到底有多少BCD,把多余的全都删掉或改名就能发现原因,我发现的原因是:通过修复后产生新的BCD的路径发生了改变,也就是说后来启动的BCD根本不是默认的路径。另一种理解是:BOOTX64引导系统时一定要找ESP下的BCD,而BOOTMGFW引导系统时则不一定要找ESP下的BCD,不知道这样理解是否正确?

点评

我的情况与你最大的不同是,你启动的是本地磁盘的系统,我编辑BCD是想启动移动设备上的系统。其它你的分析我觉得还是有点道理的,不过,根据UEFI区置顶贴的分析, 在windows系统下,BOOTX64.efi就是有bootmgfw.efi改  详情 回复 发表于 2014-11-24 10:53
回复

使用道具 举报

17#
 楼主| 发表于 2014-11-24 10:53:15 | 只看该作者
2012sillian 发表于 2014-11-23 23:05
我的FAT分区和ESP分区文件结构和内容都是一样的,也就是说,BCD也是在/EFI/MICROSOFT/BOOT/下,如果把ESP ...

我的情况与你最大的不同是,你启动的是本地磁盘的系统,我编辑BCD是想启动移动设备上的系统。其它你的分析我觉得还是有点道理的,不过,根据UEFI区置顶贴的分析, 在windows系统下,BOOTX64.efi就是有bootmgfw.efi改名而来的,两个文件没有区别
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-27 03:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表