连接/移除 USB 时获得 UEFI BIOS 启动顺序一致性?

gri*_*tin 6 bios usb boot uefi

我正在尝试使用 USB 来确定应加载哪个操作系统;即,当 USB 插入时,Windows 应该加载,当 USB 未插入时,Ubuntu 应该加载。从相应媒体启动工作正常,但我在 BIOS 启动顺序设置方面遇到问题。插入 USB 后,我可以将启动顺序设置为:

  1. USB(grub)
  2. SSD(grub)
  3. 直接启动进入 Ubuntu
  4. 直接启动进入 Windows

只要插入 U 盘,该顺序就保持一致。但是,当我执行以下步骤时:

  1. [计算机关闭时] 断开 USB。
  2. 打开计算机并启动至 Ubuntu 或 Windows。
  3. 关闭计算机。
  4. 插入USB。
  5. 打开计算机。

启动顺序更改为

  1. SSD(grub)
  2. 直接启动进入 Ubuntu
  3. 直接启动进入 Windows
  4. USB(grub)

是否有某种方法可以避免 BIOS 更改启动顺序,或者明确告诉它要查看哪个 USB 位置?

我的主板是华硕 Z97-A,带有华硕 UEFI BIOS 实用程序,版本 2.16.1240。

帮助我的超级用户,你是我唯一的希望。

Rod*_*ith 4

不幸的是, EFI 如何处理此类事情没有标准化,但根据我的经验,您描述的行为相当常见。问题在于,EFI 在识别引导设备方面比 BIOS 更“智能”,并且许多 EFI 在识别出无效引导条目后会删除它们。因此,当您拔下 USB 驱动器并再次启动计算机时,它会注意到该 USB 驱动器存在无效的启动项,并将其从启动列表中删除。据我所知,EFI 中没有解决此类问题的方法。

但这并不是说没有解决方法。具体来说,您可以在内部磁盘上安装一个 EFI 启动管理器来执行您想要的操作,即在未插入 USB 闪存驱动器时启动 Windows,并在插入 USB 驱动器时从 USB 驱动器启动 Ubuntu。 d 然后将此引导管理器设置为默认引导程序。

不幸的是,据我所知 Ubuntu 的 GRUB 无法以这种方式配置,因此您需要寻找其他地方。您要遵循的规则非常简单,可以编写一个非常简单的程序来完成这项工作,但我知道可以做到这一点的程序要复杂得多:我自己的rEFInd 启动管理器。我建议您尝试按如下方式安装和配置它:

  1. 启动至 Ubuntu。
  2. 检查 处安装了什么(如果有的话)/boot/efi。(通过键入,df -h您可以看到当前安装的分区。)
  3. 如果/boot/efi对应于 USB 驱动器上的分区,请将其卸载并从硬盘安装EFI 系统分区 (ESP) 。gdisk(如链接中所述,ESP 是具有特定类型代码的 FAT 分区。您可能需要使用、parted或 GParted来查找它。)
  4. 从 rEFInd 下载页面安装 rEFInd Debian 软件包 安装PPA;安装 Debian 软件包(或使用该文件并手动.zip运行)。refind-install
  5. 编辑/boot/efi/EFI/refind/refind.conf并进行以下更改:
    • 可选设置timeout -1. 如果设置了此项,则除非您在 rEFInd 启动时按住某个键,否则 rEFInd 菜单将不会出现。您可能需要推迟设置此设置,直到测试安装之后。
    • default_selection "vmlinuz,Microsoft"。如果 rEFInd 找到 Linux 内核,则这会导致 rEFInd 启动 Linux;如果 Linux 内核不存在,也就是说,如果 Linux USB 驱动器已拔出,则 rEFInd 启动 Windows。替换vmlinuz为也应该有效,如果无效grub则值得尝试。vmlinuz
  6. 重新启动并测试系统。

如果您在不设置该timeout值的情况下尝试,如果 USB 驱动器已拔出,您应该会看到 rEFInd 菜单出现并突出显示 Windows 选项(这可能是唯一的选项);但如果插入 USB 驱动器,默认情况下应该突出显示 Ubuntu 选项。如果有效,设置timeout -1将导致直接启动到所需的操作系统。

如果 rEFInd 未检测到已插入 USB 驱动器的 Ubuntu 安装,请尝试按 Esc 键。如果随后出现 Ubuntu 选项,请尝试设置scan_delay 1(或可能更高的值)。

以这种方式使用 rEFInd 的最大问题是,在启动、扫描操作系统等过程中会出现延迟。当 USB 驱动器未插入时,这应该只是一两秒,当 USB 驱动器插入时,可能还需要两到三秒。处理此特定任务的更专业的启动管理器可能能够完成这项工作延迟较少,但我不知道有这样的程序。