安装任何操作系统后(BIOS 设置为 UEFI),启动顺序不断变化(Windows 和 Linux 安装)。我该如何禁用此“功能”

安装任何操作系统后(BIOS 设置为 UEFI),启动顺序不断变化(Windows 和 Linux 安装)。我该如何禁用此“功能”

我们有许多不同的服务器(主要是戴尔)正在通过 pxeboot 安装。首次安装操作系统后,UEFI 启动顺序会自动更改,以允许操作系统作为第一个启动选项加载。

对于想要一次性构建单个主机的普通人来说,这很好,但在需要不断重建的实验室环境中,这会带来很大的麻烦。有没有办法在安装后禁止 OS 安装在 UEFI 中更改启动顺序。

这篇文章对此进行了更多讨论 https://arstechnica.com/civis/viewtopic.php?f=21&t=1474353并且讨论了它可能是 uefi 规范,但对此没有肯定的答复。

有没有办法在安装操作系统后不允许修改 UEFI 启动顺序?

答案1

修改 efi 启动顺序的选项在 uefi 规范中。您确实可以创建一个忽略此部分的固件,或者有一个重置它的选项。(为此请联系制造商戴尔)

作为一种解决方法,您可以从操作系统重置它,至少在 Linux 中,您可以使用 efimgr 来更改顺序。

另一个需要考虑的选项是,许多机器都有不同的启动顺序选项,具体取决于是否通过网络启动。也就是说,正常启动使用正常的 efi 顺序,但是如果机器通过 WOL“通过网络启动”,则将使用“网络启动顺序”。- 这可以用来代替重新启动机器,将其关闭,然后远程启动它。

答案2

编写一个脚本来检查 PXE 是否是第一个启动选项,如果不是则进行设置:

#!/bin/bash

# Get the current boot order
boot_order="$(efibootmgr -v | grep BootOrder | cut -d' ' -f2-)"

# Get first boot option hex number
first_boot_nr_hex="$(echo "${boot_order}" | cut -c1-4)"

# Get first boot option
first_boot_option="$(efibootmgr -v | grep "Boot${first_boot_nr_hex}")"

# Check if the first boot option is PXE boot
if echo "$first_boot_option" | grep -q "PXE"; then
    echo "PXE boot is already the first option in the boot order"
else
    # Get the list of boot options, excluding PXE boot
    boot_options="$(efibootmgr -v | grep -E "^Boot[0-9]{4}" | grep -v "PXE" | cut -c5-8 | tr '\n' ',' | sed 's/.$//')"
    
    # Get PXE boot option
    pxe_boot="$(efibootmgr -v | grep -E "^Boot[0-9]{4}" | grep "PXE" | cut -c5-8)"

    # Set the boot order to PXE boot followed by the other options
    new_boot_order="$(echo "$pxe_boot"),$(echo "$boot_options")"
    efibootmgr -o "$new_boot_order"

    echo "PXE boot is now the first option in the boot order"
fi

相关内容