关于 uefi 和引导的疑惑

2017-04-06 10:28:38 +08:00
 serbean117
系统是 uefi 引导的 win10 , bios 中 uefi 启动项目只能看到固态一个。今天用 easyuefi 的时候发现“ uefi 启动列表”里面,有四个项,查看了一下两个指向我现在这个系统的 esp 分区的“/efi/microsoft/bootmgfw.efi ”,有一个指向我没装系统的盘,一个指向哪儿记不得了。我就保留了一个指向 bootmgfw.efi 的项,其他 3 个删掉,结果进不了系统了,提示 bcd 出现问题需要修复,我就纳闷了,关 bcd 什么事呀?于是我在 pe 开 bootice 查看了一下 /efi/microsoft/bcd 发现里面之前的设置,启动项全都丢了,只好手动设置了一个才启动成功。

我感觉很疑惑,这个“ uefi 启动列表”是什么东西?存在哪呢?为什么会和 bcd 有关系?为什么它有 4 个我的 bios 只有一个启动项?如果是 mbr 的话,活动分区只会有一个,但是 gpt 的话如果有多个 esp 分区怎么办?更何况 esp 分区与 fat16 分区没啥不同啊。
259 次点击
所在节点    Windows
5 条回复
acess
2017-04-08 07:25:39 +08:00
据我所知…… UEFI 有个 NVRAM 可以保存设置,其中就有各种启动项,包括但不限于 Windows Boot Manager 、 grub2 、 PXE 、 U 盘等。
每次开机时 UEFI 固件都会扫描一下硬件,更新这个列表。
有些蛋疼的问题也出自这个特性,比如联想笔记本把 U 盘里的 grub2 识别成某 Linux 导致无法启动、手动添加的 UEFI 启动项重启完就消失等。
至于 BCD 文件……应该是 Windows 启动时,就从 NVRAM 里拷了一份启动项列表,然后在使用 bcdedit 时和 NVRAM 保持同步。
acess
2017-04-08 07:27:54 +08:00
BCD 数据库里有{fwbootmgr}和{bootmgr}两个对象,我觉得{fwbootmgr}应该是和 UEFI NVRAM 保持同步的,但你也可以通过 /store 参数指定某个 BCD 数据库,然后读取 /修改这个 BCD 里存储的{fwbootmgr}启动项。
acess
2017-04-08 07:33:43 +08:00
ESP 分区和一般 FAT 分区还真不一样(而且我记得 ESP 应该用 FAT32 而不是 FAT16 ?)。 ESP 是有自己的分区类型 GUID 的,有时候还会设置 GPT Attribute ,设置隐藏、必须等,这俩属性用 diskpart 、 gdisk 可以查看、修改。
至于两块硬盘都有 ESP 的情况……感觉列表里要列出几个、哪个排前面要看 UEFI 固件的心情吧。另外, UEFI 启动项可以设置隐藏属性( BOOTICE 中可见),可能是这个隐藏属性,结合了 UEFI 固件开机时自动扫描硬件的行为,最终导致了 LZ 看到的“四个启动项在 BIOS 里只看到一个”等怪现象。
acess
2017-04-08 07:36:34 +08:00
BCD 实际上就是个 registry hive ,注册表编辑器可以加载它的。
LZ 还可以看看这个:http://www.yiiyee.cn/Blog/bcd-1/#more-746
acess
2017-04-08 07:40:14 +08:00
既然 LZ 提到“提示 bcd 出现问题需要修复”,那么我猜“四个启动项在 BIOS 里只看到一个”和“提示 bcd 出现问题需要修复”这两个现象也有可能是 LZ 使用 EasyUEFI 不当地修改了{bootmgr}中的某些值导致的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352859

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX