如何使用 NFS rootfs PXE 引导 UEFI 客户端?

jde*_*ose 5 nfs 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
Run Code Online (Sandbox Code Playgroud)

但是我正在努力用 UEFI 做同样的事情,因为有很多不同的方法可以采用,而且很少有好的文档。

按照PXE 在 UEFI 上引导 netboot mini.iso 的指南,我能够通过 PXE 引导进入安装程序,但到目前为止我还没有想出如何使这些说明适应我的用例。

所以我追求的东西很少:

  1. 为 PXE 引导 UEFI 客户端推荐什么引导加载程序?

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

  3. 我看过很多教程都引用了pxepxecmd grub 模块,但是这些教程在 Ubuntu 13.04 中不存在……它们是否已被弃用,如果是,用什么替代它们?

我正在考虑的选项:

在这众多选择中,我希望找到一个低风险的解决方案,该解决方案将继续得到 Ubuntu 的大力支持。

Mit*_*tch 4

如何使用 ELILO 进行网络启动

如何让EFI网络启动?

您不需要任何其他软件即可让 EFI 启动网络引导会话。任何 EFI 计算机都可以配置为启动 PXE/DHCP 会话(如果它具有支持 UNDI/PXE 协议的网络适配器)。大多数现代卡确实有这样的支持。

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

Load File [Acpi(PNP0A03,0)/Pci(5|0)/Mac(00D0B7A6FC25)]
Run Code Online (Sandbox Code Playgroud)

代表以太网卡(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 ) 开发的特殊版本的 DHCPD 服务器以及特殊的补丁来添加 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
Run Code Online (Sandbox Code Playgroud)

这些层之间有一个重要的区别。前两个 (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
Run Code Online (Sandbox Code Playgroud)

示例 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
Run Code Online (Sandbox Code Playgroud)

另一个

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
Run Code Online (Sandbox Code Playgroud)

另请查看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
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅PXE Linux 和实现 PXE 引导

来源:惠普


dsc*_*001 0

仅意味着“觉醒”问题:

这些客户端上的 UEFI 是强制必需的吗?-

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

也许这样用 grub2 引导所有安装会更容易。

您可以考虑将 BIOS 设置调整为 EFI 启动而不是 UEFI 启动 - 因为 UEFI 双启动对于 Windows 7 或 Windows 8 来说不太可靠。我知道一些安装,Ubuntu 与 UEFI 双启动 Win7经常崩溃回到gdm。