如何通过 NFS rootfs 来 PXE 启动 UEFI 客户端?

如何通过 NFS rootfs 来 PXE 启动 UEFI 客户端?

我正在尝试 PXE 启动 UEFI 客户端。我当前的 BIOS 客户端设置使用 pxelinux.0 和 pxelinux.cfg/default,如下所示:

DEFAULT vmlinuz-3.8.0-25-generic
APPEND initrd=initrd.img-3.8.0-25-generic root=/dev/nfs nfsroot=10.17.76.1:/var/lib/tribble/ephemeral ip=dhcp ro nomodeset

但是我在使用 UEFI 时遇到了困难,因为有太多不同的方法可以采用,但好的文档却太少。

按照此在 UEFI 上通过 PXE 启动 netboot mini.iso 的指南,我能够通过 PXE 启动进入安装程序,但到目前为止我还没有弄清楚如何根据我的用例调整这些说明。

所以我追求的是以下几点:

  1. 推荐使用哪个引导加载程序来 PXE 引导 UEFI 客户端?

  2. 您能否指出一个使用上述引导加载程序通过 NFS 导出 rootfs 的 UEFI 客户端的 PXE 引导示例?

  3. 我见过很多教程引用郵件pxe命令grub 模块,但是这些模块在 Ubuntu 13.04 上不存在...它们是否已被弃用?如果是,那么用什么来替代它们?

我正在考虑的选项:

在众多选择中,我希望找到一个低风险的解决方案,并能继续得到 Ubuntu 的良好支持。

答案1

如何使用 ELILO 进行网络启动

如何让 EFI 进入网络启动?

您不需要任何附加软件即可让 EFI 启动网络启动会话。任何 EFI 机器都可以配置为启动 PXE/DHCP 会话(前提是它具有支持 UNDI/PXE 协议的网络适配器)。大多数现代卡都具有此类支持。

要启用网络启动,您需要进入 EFI 启动管理器维护菜单并“添加启动选项”。屏幕上将显示要启动的设备列表。其中至少有一个设备应采用以下形式:

Load File [Acpi(PNP0A03,0)/Pci(5|0)/Mac(00D0B7A6FC25)]

代表以太网卡(Mac 地址)。如果没有此选项,则意味着您的机器中没有网络适配器,或者其选项 ROM 中没有 UNDI/PXE 支持。

您需要选择此选项并为其指定一个逻辑名称,例如“netboot”。接下来,您离开维护菜单并返回主菜单。您现在有一个新的启动菜单选项。如果您选择“netboot”,则 EFI 将启动 PXE/DCHP 发现请求并寻找服务器以获取 IP 地址。

在服务器端,您可以使用标准 DHCP 服务器。

使用 PXE 网络启动

EFI 内置了对 PXE 的支持。事实上,它首先尝试 PXE,当找不到有效的 PXE 服务器时,它会默认使用 DHCP。

Linux/ia32 提供了一个 PXE 服务器包,但是该包没有与 EFI 端通信所需的扩展。

无需特殊选项或编译时标志即可让 elilo 使用 PXE 而不是标准 DHCP。当网络启动时,elilo 将自动检测是否已通过 PXE 或 DHCP 下载,并调整后续文件的请求方式。

您需要 Internet 软件联盟 (http://www.isc.org) 带有一个特殊补丁来添加 PXE 扩展。不幸的是,截至版本 3.0xx,该补丁尚未进入官方树。它应该出现在 dhcpd 服务器的 3.1 版本中。

无论如何,elilo 软件包包含一个简单的示例,说明如何/etc/dhcpd.conf使用补丁中提供的扩展为 PXE 感知 DHCP 服务器配置文件。您可以查看examples/dhcpd-pxe.conf。语法与标准 dhcpd 服务器有很大不同。

要牢记的关键要素是 elilo 用于请求不同文件的 PXE 层:

Layer 0 : to get the name of the boot loader (elilo.efi)
Layer 1 : to get the name of the elilo config file
Layer 2 : to get the name of the kernel image

这些层之间有一个重要的区别。前两个层(0、1)是系统请求的,而最后一个层仅在找不到配置文件时使用,即要启动的默认内核是什么。实际文件仍然通过 TFTP 下载。因此,还必须配置 TFTP 服务器(有关详细信息,请参阅上一节)。

获取配置文件

在此模式下,elilo 使用 PXE 第 1 层来获取要使用的配置文件。因此必须在服务器端设置。Elilo 在查找配置文件时将使用以下顺序:

- use the name provide by the PXE server Layer 1 or

- elilo-ia64.conf/elilo-ia32.conf/elilo-x86_64 or

- elilo.conf

elilo.conf 文件示例

chooser=textmenu
default=install
delay=20
prompt

message=boot-screens/elilo_menu.msg
f1=boot-screens/general.msg
f2=boot-screens/params.msg

relocatable

image=vmlinuz
    label=install
    description="Install"
    initrd=initrd.gz
    append="--"
    read-only

image=vmlinuz
    label=expert
    description="Install [Expert mode]"
    initrd=initrd.gz
    append="priority=low --"
    read-only

image=vmlinuz
    label=rescue
    description="Rescue"
    initrd=initrd.gz
    append="rescue/enable=true --"
    read-only

另一个

boot=/dev/sda1
delay=30
timeout=50
default=Gentoo
append="console=ttyS0,9600"
prompt

image=/vmlinuz
    label=Gentoo
    root=/dev/sda2
    read-only

image=/vmlinuz.old
    label=Gentoo.old
    root=/dev/sda2
    read-only

另请查看elilo.conf, 和管理 Linux 的 EFI 引导加载程序:使用 ELILO

Elilo 在第一次匹配时停止。使用 PXE,elilo 不会像使用 DHCP 那样尝试下载以分配的 IP 地址命名的配置文件,因为 PXE 服务器配置具有足够的灵活性来执行此操作。

获取内核映像

当没有配置文件时,elilo 将使用 PXE 第 2 层返回的内核名称。如果没有指定,则默认为“vmlinux”。

获取初始 ramdisk

ramdisk 的文件名必须来自配置文件。Elilo 不使用 PXE 层来请求默认名称。

获取 IP 地址信息

当 elilo 进行网络启动时,网络文件系统模块会使用从 DHCP 服务器收到的信息初始化一些 elilo 变量。至少,它会收到 IP 地址。

以下信息存储于如下所示的变量中:

assigned IP address -> %I
assigned netmask    -> %M
assigned domainname -> %D
assigned gateway    -> %G

这些变量可用于动态调整传递给内核的命令行参数。

更多信息请参阅远程控制Linux 和实现 PXE 启动

来源:生命值

答案2

仅作为“唤醒”问题:

这些客户端必须使用 UEFI 吗? -

您不能在每个客户端上禁用 UEFI 并仅在其上启用 EFI 吗? -

那么使用 grub2 启动所有安装可能会更容易。

您可以考虑将 BIOS 设置调整为 EFI 启动而不是 UEFI 启动 - 因为对于 Windows 7 或 Windows 8 等而言,使用 UEFI 双启动并不十分可靠。我知道在某些安装中,带有 UEFI 双启动 Win7 的 Ubuntu 经常崩溃并回到 gdm。

相关内容