我的 BIOS 设置页面“启动系统”Dell XPS 9320,Ubuntu 版本,让我抓狂。我禁用了“ubuntu”和 PEBOOT 的条目(取消选中复选框)并退出设置。看起来我得到了 2 次启动,第一次非常快;只是戴尔屏幕闪了一下。另一次启动自动发生,我看到我的 Ubuntu 系统启动了。
请记住,我禁用了表中的“Ubuntu”条目。拦截 ubuntu(第二次)启动并重新启动 BIOS 设置会显示一个已更改的表,因为它正在尝试“帮助”或“保护”我无法启动 Ubuntu,并激活 UBUNTU 条目——甚至添加它何时彻底删除该条目。
(当我强制启动 PEBOOT 分区(通过禁用所有其他条目)时,DELL 支持/恢复程序启动,并且当它退出时,表已重置为出厂默认值,并带有 ubuntu 条目。)
我怀疑 PEBOOT 分区(另一个“隐藏”分区)正在重置表并添加 ubuntu 和 fallback 条目。
发生了什么事,为什么不会{程序名称} 保留我的设置???
答案1
UEFI 启动是基于文件的。正常(即除了那些引导您进行固件设置等的启动项)每个启动项都引用受支持文件系统中的 EFI 可执行文件。(UEFI 规范仅要求支持 FAT 系列;但请注意,它并不禁止支持其他类型。)
有两种创建启动项的方法:
- 在引导加载程序安装时静态创建,以指向任意位置的可执行文件
\EFI\BOOT\BOOTX64.EFI
启动时,为每个枚举文件系统上的后备路径(例如)下的可执行文件动态创建。
我不知道 UEFI 规范是否要求第二种类型的条目在下次启动时消失,或者在大多数情况下它们是否会被写入 NVRAM(即 UEFI 存储持久状态/数据的地方),但我认为它们是瞬态的,因为这种类型/方法主要用于可移动驱动器。
我也不知道 UEFI 规范是否要求或建议始终将条目类型排在静态条目之前,但我猜不是,因为这种行为是否可取完全取决于给定的场景或用户的偏好。因此,排序启发法可能是特定于供应商的。
您可能尝试做的一件事是将引导加载程序的 EFI 可执行文件放置在与后备路径(和 Windows 路径)不同的路径上,并为其创建一个静态条目。例如,可以在efibootmgr
Linux 或 EFI shell 中创建它。某些固件也有一个设置页面供您执行此操作。(最好确保删除后备路径上的文件,因为某些较旧/较损坏的固件不喜欢同一文件系统同时具有两种类型的条目,尽管这会破坏驱动器的“可移植性”。)如果您的固件没有删除而只是在启动时忽略“无效”静态条目,您可以使用此技巧获得所需的行为/顺序。(但当然,它最多需要为您想要启动的每个 USB 驱动器创建一个条目,您甚至可能需要运气才能不陷入其他问题。)
需要说明的是,一些固件供应商(尤其是 Pheonix)采用的方法与更“参考”的方法(即 EDK2 / AMI 样式)不同。您可能会注意到,此类供应商的实现采用每个驱动器/每个驱动器类型的方法,也就是说,它只会枚举每个内部(SATA/NVMe)驱动器上的第一个受支持的文件系统,例如第一个 USB 驱动器。此类实现通常具有一些预定义条目,这些条目将动态映射到相应类型的驱动器之一,并且不会从启动顺序中来来去去。但是,正如我所暗示的,据我所知,这种方法在 UEFI 规范中根本没有提及,而是由供应商自己设计的,以模仿传统但不那么“奇怪”的启动顺序/菜单。
虽然我提到 UEFI 启动是基于文件的,但据我回忆,启动条目本身确实包含有关相应文件系统/可执行文件所在的驱动器/分区的“设备路径”的数据。除了分区 UUID 之外,它还包括 pci 总线号、scsi lun 和分区号。不过,我不记得是否只有动态/瞬态条目才有“硬件信息”。我指出这一点是因为这些额外的信息(包括分区 UUID)是每个后备路径如何引用不同文件系统中的可执行文件,以及为什么如果您想尝试我建议的解决方法,您需要为“每个”USB 驱动器创建静态条目。(现在您可能会注意到解决方法反过来可以使“上层”解决方法应用于您插入的“每个”USB 驱动器:相同的端口、相同的分区 UUID 等。)
我认为没有实际使用过(特定的)戴尔机器(或者实际上是其固件的源代码)的人都无法确切地说出为什么会忘记禁用启动项,但最有可能的是一个错误(例如,每当创建/删除动态条目时,所有的禁用都会被重置,诸如此类)。