从 Dell Vostro 15 上的闪存 Ubuntu Studio 22.04(使用 Rufus 创建)启动

Vla*_*tov 2 boot dual-boot dell uefi

我正在尝试从 Dell Vostro 15 上的闪存 Ubuntu Studio 22.04(使用 Rufus 创建)启动(请参阅下面的配置)。我遇到了Launching 'EFI\boot\bootx64.efi'...Ubuntu 16.04 已安装并且我想保留文件的问题。

开机画面:

开机画面

戴尔配置:

戴尔配置

UEFI启动顺序:

BIOS 启动顺序

Ake*_*keo 7

鲁弗斯开发在这里。这是一个很难解决的问题,但我现在可以为您提供有关该问题的完整答案。它可能有点充满了首字母缩略词和术语,但那是因为我真的不想提供一个如此简单的解释,以至于变得毫无意义。

  1. 问题的根源在于,由于当前的 Ubuntu Studio ISO 包含大于 4 GB 的文件,Rufus 默认使用 NTFS 作为 USB 介质的文件系统,并且为了确保 Dell Vostro 等系统可以引导它,还确保在 Ubuntu 引导加载程序启动之前加载 NTFS 驱动程序。不幸的是,我们发现,Rufus 当前使用的 NTFS 驱动程序在回复目录列表请求时并不完全符合 UEFI。
  2. 因此,Ubuntu 引导加载过程的下一部分(称为Shim)在尝试通过列出特定的某些目录来查找证书时可能会进入无限循环(仅在启用安全引导时才会这样做)。因此,正如 OP 发现的那样,避免该问题的一种方法是禁用安全启动,因为此时Shim不会读取目录,也不会强调 NTFS 驱动程序的不兼容部分。
    注意:对于那些技术上倾向的人来说,问题是Shim/efi/boot/使用一个循环,在其中对缓冲区大小为零的目录发出读取调用,并期望(对于兼容的驱动程序来说应该是这种情况)驱动程序会告诉它:提供的缓冲区太小,同时还返回所需的实际大小。然后它重新进入循环,并使用它期望的更新后的缓冲区大小。然而,虽然驱动程序确实返回一个代码来告诉Shim它请求的缓冲区太小,但它不会更新所需的大小,这意味着Shim不断发出零大小的请求,并且驱动程序永远返回“缓冲区太小” ...

显然,我们将在下一版本的 Rufus 中修复有问题的驱动程序,以确保它在列出目录时返回实际所需的大小,正如Shim(正确地)期望的那样。然而与此同时,甚至在我们发现这个问题之前,开发Shim的人 最近也发现一些 UEFI 固件(特别是来自 Dell),并且不使用我们的 NTFS 驱动程序,也无法满足目录列表合规性并遇到问题这个无限循环的问题。因此他们还独立应用了修复程序以避免无限循环。然而,他们的修复是在二月初添加的,而 Ubuntu 用于Shim 的二进制文件是在一月份生成的,因此它没有进入当前的 Ubuntu Studio。话又说回来,如果 Ubuntu Studio 一直使用更新的Shim代码,OP 很可能永远不会遇到启动冻结问题,而且我们也不会发现 Rufus 的 NTFS 驱动程序不是 100% UEFI 兼容。

所有这些意味着,最终,您应该有 4 个选择:

  1. 在安装过程中暂时禁用安全启动(就像OP所做的那样)。
  2. 在 Rufus 中以DD 模式而不是ISO 模式写入媒体(请记住,Rufus总是提示您在DD 模式ISO 模式之间进行选择,并非常明确地告诉您,如果您在ISO 模式下遇到问题,您应该尝试在DD 模式下重新创建驱动器)。
  3. 使用 Rufus 3.23 或更高版本,其中包含符合 UEFI 的驱动程序。
  4. 使用更新版本的 Ubuntu,其中应包含更新版本的Shim,可以处理不兼容的 UEFI 驱动程序或固件。