我正在尝试 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 引导进入安装程序,但到目前为止我还没有想出如何使这些说明适应我的用例。
所以我追求的东西很少:
为 PXE 引导 UEFI 客户端推荐什么引导加载程序?
您能否指出一个使用所述引导加载程序以 PXE 引导通过 NFS 导出 rootfs 的 UEFI 客户端的工作示例?
我看过很多教程都引用了pxe和pxecmd grub 模块,但是这些教程在 Ubuntu 13.04 中不存在……它们是否已被弃用,如果是,用什么替代它们?
我正在考虑的选项:
使用elilo
使用grub2
使用Linux EFI 存根加载器(有点麻烦,因为我们必须使用硬编码的引导参数编译我们自己的内核)
在这众多选择中,我希望找到一个低风险的解决方案,该解决方案将继续得到 Ubuntu 的大力支持。
如何让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 引导
来源:惠普
仅意味着“觉醒”问题:
这些客户端上的 UEFI 是强制必需的吗?-
您不能在每个客户端上禁用 UEFI 并仅在它们上启用 EFI 吗?-
也许这样用 grub2 引导所有安装会更容易。
您可以考虑将 BIOS 设置调整为 EFI 启动而不是 UEFI 启动 - 因为 UEFI 双启动对于 Windows 7 或 Windows 8 来说不太可靠。我知道一些安装,Ubuntu 与 UEFI 双启动 Win7经常崩溃回到gdm。
| 归档时间: |
|
| 查看次数: |
18573 次 |
| 最近记录: |