PXE 启动设置#
dgx-server UEFI BIOS 支持 PXE 启动。需要几个手动自定义步骤才能使 PXE 启动基础操作系统镜像。
注意
本文档旨在作为参考使用。未提供配置 DHCP、HTTP 和 TFTP 服务器的明确说明。最终用户的 IT 团队应配置这些服务器以适应其公司的环境和安全准则。
要求#
TFTP 服务器
提供 TFTP 服务的软件。
HTTP 服务器
HTTP 服务器用于传输大型文件,例如 iso 镜像和
initrd
。或者,TFTP 也可用于此目的。以下示例中使用 HTTP。
DHCP 服务器
提供动态主机配置协议 (DHCP) 服务的软件。
注意
TFTP 服务器、HTTP 服务器和 DHCP 服务器都可以配置在同一系统上,或者它们可以分别位于不同的系统上。
Linux 引导加载程序
IP 地址:
<ftp ip>
完全限定主机名:
<ftp host>
本主题提供有关如何为 DGX 系统设置 PXE 启动环境的一些指导。有关完整详细信息,请参阅在线文档以了解如何设置 PXE 启动服务器。在此示例中,xinetd
用于提供 TFTP 服务;dnsmasq
用于提供 DHCP 服务;syslinux
用作引导加载程序。
PXE 服务器概述#
PXE 服务器需要在以下区域进行配置
引导加载程序 (grub)
TFTP 内容(内核和
initrd
)在此示例中,TFTP 配置为从
/local/tftp/
提供文件。您需要配置 TFTP 服务器以从/local/tftp
或您希望使用的目录提供文件。HTTP 内容(iso 镜像)
在此示例中,HTTP 配置为从
/local/http/
提供文件。您需要配置 HTTP 服务器以从/local/http
或您希望使用的目录提供文件。DHCP
PXE 服务器配置#
x86_64 说明
在此示例中,HTTP 和 TFTP 服务器上的目录结构如下所示
/local/
http/
base_os_7.0.0/
base_os_7.0.0.iso
tftp/
grub2/
base_os_7.0.0/
vmlinuz
initrd
grub.cfg
bootx64.efi
grubx64.efi
注意
vmlinuz
和 initrd
文件是相对于 TFTP 根目录 /local/tftp/
指定的;ISO base_os_7.0.0.iso
的位置是相对于 HTTP 根目录 /local/http/
指定的。
在此,DHCP 和 PXE 服务器配置为使用上述目录结构。负责部署 PXE 环境的人员应更改目录名称和结构以适应其基础架构。
您可以在 HTTP 和 TFTP 服务器上类似地设置目录结构。
/local/tftp/grub2/grub.cfg 文件的内容应如下所示
set default=0
set timeout=-1
insmod all_video
menuentry 'Install BaseOS 7.0.0' {
linuxefi /grub2/base_os_7.0.0/vmlinuz fsck.mode=skip autoinstall ip=dhcp url=http://<Server IP>/base_os_7.0.0/base_os_7.0.0.iso nvme-core.multipath=n nouveau.modeset=0
initrdefi /grub2/base_os_7.0.0/initrd
}
注意
内核启动参数应与 /mnt/boot/grub/grub.cfg
中找到的相应 ISO 的启动菜单内容匹配。
当要安装的系统通过 PXE 启动时,位于 /local/tftp
上的引导文件将从 TFTP 服务器检索。(在此示例中,TFTP 服务器由 xinetd
服务提供,其配置文件 /etc/xinetd.d/tftp
指定引导文件位于 /local/tftp
。)当系统通过 PXE 启动时,DHCP 服务器的 dhcpd.conf
文件中指定的 bootx64.efi
文件将通过 TFTP 传输检索(请参阅 配置 DHCP 服务器)。默认情况下,在 bootx64.efi
启动后,PXE 启动 grub.cfg
文件(在本例中为 grub2/grub.cfg
)提供用于进一步启动的菜单选项。PXE 启动 grub.cfg
配置文件指定内核和 initrd
文件相对于 tftp 目录的位置。
配置 HTTP 目录
通过将 Base OS 7.0.0 ISO 的副本放置在目录 /local/http/base_os_7.0.0/
中来配置 HTTP 文件目录和 ISO 镜像。在此示例中,完整路径为 /local/http/base_os_7.0.0/`base_os_7.0.0.iso
。
通过以下步骤配置 TFTP 目录
挂载 Base OS 7.0.0 ISO。假设您的挂载点为 /mnt
sudo mount -o loop /local/http/base_os_7.0.0/base_os_7.0.0.iso /mnt
将内核和 initrd
从 ISO 复制到 tftp 目录
cp /mnt/casper/vmlinuz /local/tftp/grub2/base_os_7.0.0/
cp /mnt/casper/initrd /local/tftp/grub2/base_os_7.0.0/
卸载 Base OS 7.0.0 ISO
umount /mnt
下载 x86_64 的 GRUB 软件包并将 PXE 启动的 *.efi shim 二进制文件复制到位
cd /tmp
wget https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/grub2-efi-x64-2.06-94.el9.x86_64.rpm
wget https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/shim-x64-15-15.el8_2.x86_64.rpm
注意
如果 https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages 上不存在 grub2-efi-x64-2.06-94.el9.x86_64.rpm
或 shim-x64-15-15.el8_2.x86_64.rpm
,请使用来自同一 https 位置的任一文件的最新版本。
使用以下命令解压 RPM
rpm2cpio grub2-efi-x64-2.06-94.el9.x86_64.rpm | cpio -idmv
rpm2cpio shim-x64-15-15.el8_2.x86_64.rpm | cpio -idmv
将以下二进制文件从解压后的 RPM 复制到 /local/tftp/grub2/
cp -p $(find . -name shimx64.efi) /local/tftp/grub2/shimx64.efi
cp -p $(find . -name grubx64.efi) /local/tftp/grub2/grubx64.efi
cd -
在 /local/tftp/grub2/
中创建 shimx64.efi
的副本,并将副本命名为 bootx64.efi
cp -p /local/tftp/grub2/shimx64.efi /local/tftp/grub2/bootx64.efi
有关更多信息,请参阅 如何在 amd64 上网络启动服务器安装程序。
x86_64 备用说明(如果 initrd 文件通过 TFTP 传输超时)
在某些情况下,initrd
的传输可能会通过 TFTP 超时。对此的一种解决方法是通过 HTTP 托管所需的文件 - initrd
、vmlinuz
和 ISO。通过 HTTP 托管这些文件可以使传输更快、更可靠。在此示例中,假设 HTTP 服务器文件从 /local/http
托管。HTTP 和 TFTP 服务器上的目录结构如下所示
/local/
http/
base_os_7.0.0/
base_os_7.0.0.iso
vmlinuz
initrd
tftp/
grub2/
grub.cfg
bootx64.efi
grubx64.efi
注意
在这种备用配置方法中,vmlinuz
和 initrd
文件以及 ISO base_os_7.0.0.iso
现在都相对于 HTTP 根目录 /local/http/
指定。
以这种方式配置时,grub.cfg
文件将包含如下所示的文本
set default=0
set timeout=-1
insmod all_video
menuentry 'Install BaseOS 7.0.0' {
linuxefi (http,<HTTP Server IP>)/base_os_7.0.0/vmlinuz fsck.mode=skip autoinstall ip=dhcp url=http://<Server IP>/base_os_7.0.0/base_os_7.0.0.iso nvme-core.multipath=n nouveau.modeset=0
initrdefi (http,<HTTP Server IP>)/base_os_7.0.0/initrd
}
注意
内核启动参数应与 /mnt/boot/grub/grub.cfg
中找到的相应 ISO 的启动菜单内容匹配。
ARM64 说明
下载指定了正确架构的相关 grub 软件包
wget https://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/grub2-efi-aa64-2.06-94.el9.aarch64.rpm
使用以下命令解压 RPM
rpm2cpio grub2-efi-aa64-2.06-94.el9.aarch64.rpm | cpio -idmv
将以下二进制文件从解压后的 RPM 复制到 /local/tftp/grub2/
grubaa64.efi
HTTP 和 TFTP 服务器上的目录结构示例可能类似于
/local/
http/
base_os_7.0.0/
base_os_7.0.0.iso
vmlinuz
initrd
tftp/
grub2/
grub.cfg
bootx64.efi
grubaa64.efi
以这种方式配置时,grub.cfg 文件将包含类似于以下的行
set default=0
set timeout=-1
insmod all_video
menuentry 'Install BaseOS 7.0.0' {
linuxefi (http,<HTTP Server IP>)/base_os_7.0.0/vmlinuz fsck.mode=skip autoinstall ip=dhcp url=http://<Server IP>/base_os_7.0.0/base_os_7.0.0.iso nvme-core.multipath=n nouveau.modeset=0
initrdefi (http,<HTTP Server IP>)/base_os_7.0.0/initrd
注意
内核启动参数应与 /mnt/boot/grub/grub.cfg
中找到的相应 ISO 的启动菜单内容匹配。
TFTP 和 HTTP 服务器验证#
在设置 PXE 服务器的所有元素后,在执行 PXE 安装之前,请验证 TFTP 和 HTTP 服务器是否正常工作。
TFTP 服务器验证
要验证 TFTP 服务器是否已正确设置,请从同一子网上的不同系统使用 tftp
获取将在 PXE 启动期间通过 tftp
获取的文件之一。在此示例中,TFTP 服务器已设置为从 /local/tftp
提供文件。grub 配置文件 grub.cfg
位于 /local/tftp/grub2/grub.cfg
上;因此,从 TFTP 命令提示符,通过 get grub2/grub.cfg
请求 grub.cfg。
cd /tmp
tftp <TFTP_Server_IP>
get grub2/grub.cfg
quit
HTTP 服务器验证
要验证 HTTP 服务器是否已正确设置,请使用 wget
命令获取将在 PXE 启动期间通过 HTTP 获取的文件之一。在此示例中,HTTP 服务器已设置为从 /local/http
提供文件。ISO base_os_7.0.0.iso
位于 /local/http/base_os_7.0.0/base_os_7.0.0.iso
上;因此,通过运行以下命令测试检索 base_os_7.0.0.iso
的 HTTP 请求
cd /tmp
wget http://<HTTP Server IP>/baseos-7/base_os_7.0.0.iso
用于配置系统网络接口的有用参数#
ip=dhcp
:告诉 initramfs 使用 DHCP 自动配置系统的接口。
如果只有一个接口连接到网络,这应该就足够了。
如果多个接口连接到网络,则将使用第一个收到回复的接口。
基础操作系统安装程序独有的参数#
rebuild-raid
告诉安装程序在指定时重建数据 RAID。从出厂状态安装时应始终指定此参数,但在其他情况下是可选的。md5checkdisc
指定此参数时不会执行安装。它只会解压 ISO 并检查其内容是否与md5sum.txt
中描述的内容匹配。offwhendone
在安装后关闭系统电源。否则,我们会在完成后重新启动。出厂安装将指定此参数。nooemconfig
跳过 oemconfig 并创建默认用户nvidia
,播种初始密码。用于 PXE 安装或自动 VM 创建/安装中的无人值守安装。force-ai
允许您提供自动安装文件。如果网络已设置,您可以提供 URL。否则,这必须是安装程序中存在的文件。
例如
force-ai=/ai/dgx_a100-ai.yaml
force-ai=http://your-server.com/your-ai.yaml
注意
有关在使用自定义自动安装文件以及 force-ai
参数时的特殊格式注意事项,请参阅 自动安装自定义 部分的注释。
配置 DHCP 服务器#
除了提供动态 IP 地址的通常作用之外,DHCP 服务器还负责提供 TFTP 服务器的 IP 地址和引导加载程序文件的名称。TFTP 服务器的地址在 DHCP 配置文件中指定为 next-server
,引导加载程序文件指定为 filename
。架构选项可用于检测客户端系统的架构并提供正确版本的 grub 引导加载程序(x86、IA-32、ARM 等)。
dhcpd.conf
的 PXE 部分的示例如下
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server <TFTP_Server_IP>;
# x86 UEFI
if option arch = 00:06 {
filename "grub2/bootx64.efi";
# x64 UEFI
} else if option arch = 00:07 {
filename "grub2/bootx64.efi";
# ARM 64-bit UEFI
} else if option arch = 00:0b {
filename "grub2/grubaa64.efi";
} else {
filename "pxelinux.0";
}
}
下面显示了 dhcpd.conf
的系统子网部分的示例。目标网络为 10.10.10.0。DHCP 服务器将从指定的范围分配特定的 IP 地址。可以配置特定的 IP 地址。有关更多详细信息,请查阅 DHCP 服务器的 PXE 安装设置文档说明。
subnet 10.10.10.0 netmask 255.255.255.0
{ option broadcast-address 10.10.10.255;
option routers 10.10.10.1;
option subnet-mask 255.255.255.0;
option interface-mtu 9000;
range 10.10.10.200 10.10.10.250; }
(可选)配置 CX-4/5/6/7 卡以进行 PXE 启动#
DGX 服务器也可以使用 MLNX CX-4/5/6 卡进行 PXE 启动。如果您已登录到 DGX 服务器主机操作系统,并且运行 DGX Base OS 4.4 或更高版本,则可以使用 /usr/sbin/mlnx_pxe_setup.bash
工具执行本节中的步骤,该工具将启用找到的每个 MLNX Infiniband 设备的 UEFI PXE ROM。
否则,请继续执行以下手动步骤。
为 ConnectX 卡启用 UEFI#
要从 MLNX ConnectX-4/5/6/7 卡进行 PXE 启动,您必须首先启用要从中进行 PXE 启动的卡的 UEFI PXE ROM,因为默认情况下它是禁用的。这需要在 DGX 服务器主机操作系统本身上执行,不能远程完成。
按照使用 DOCA OFED 软件的这些步骤操作,该软件允许您安装与 MLNX_OFED 相同的驱动程序和工具。
要确定 MLNX ConnectX 卡的设备名称和当前配置,请运行
sudo mlxconfig query
命令$ sudo mlxconfig query Device #1: ---------- Device type: ConnectX4 Name: MCX455A-ECA_Ax Description: ConnectX-4 VPI adapter card; EDR IB (100Gb/s) and 100GbE; single-port QSFP28; PCIe3.0 x16; ROHS R6 Device: /dev/mst/mt4115_pciconf3 Configurations: Next Boot ... ... EXP_ROM_UEFI_x86_ENABLE False(0) ... ...
启用 ConnectX 卡的 UEFI PXE ROM
user@dgx1server$ sudo mlxconfig -y -d /dev/mst/mt4115_pciconf3 set EXP_ROM_UEFI_x86_ENABLE=1
重新启动服务器以使更改生效。
user@dgx1server$ sudo reboot
重新启动后,确认配置已设置。
user@dgx1server$ sudo mlxconfig query Device #1: ---------- Device type: ConnectX4 Name: MCX455A-ECA_Ax Description: ConnectX-4 VPI adapter card; EDR IB (100Gb/s) and 100GbE; single-port QSFP28; PCIe3.0 x16; ROHS R6 Device: /dev/mst/mt4115_pciconf3 Configurations: Next Boot ... ... EXP_ROM_UEFI_x86_ENABLE True(1) ... ...
(可选)配置 DGX 服务器以自动进行 PXE 启动#
将 PXE 添加到 UEFI 启动顺序的顶部#
在具有 BMC 的系统上,您可以通过将 PXE 添加到 UEFI 启动顺序的顶部来指定 DGX 服务器进行 PXE 启动。这可以通过 IPMI 带外完成。
ipmitool -I lanplus -H <DGX_BMC_IP> -U <ADMIN> -P <PASSWORD> chassis bootdev pxe options=efiboot
注意
这仅将 DGX 服务器设置为 PXE 启动,但未指定尝试从哪个网络设备进行 PXE 启动的顺序。这是我们当前 UEFI 和 BMC 固件的限制。请参阅以下部分以指定网络设备启动顺序。
配置网络启动优先级#
UEFI 网络驱动器 BBS 优先级允许您指定要从中进行 PXE 启动的网络设备的顺序。要修改此设置,您必须重新启动 DGX 服务器,并在看到启动画面时按 F2 或 Del 进入 UEFI 启动选择菜单。导航到 Boot 菜单,然后向下滚动到 UEFI NETWORK Drive BBS Priorities。

使用此菜单配置尝试从设备进行网络启动的顺序。

保存并退出。
在完成网络启动优先级排序后,保存更改并重置。

使 DGX 服务器进行 PXE 启动#
自动 PXE 启动过程#
如果您按照上面的可选步骤操作,您现在可以重新启动,UEFI 将尝试使用网络驱动器 BBS 优先级列表中指定的顺序使用设备进行 PXE 启动。
手动 PXE 启动过程#
如果您想手动触发 PXE 启动,请重新启动 DGX 服务器,并在看到启动画面时按 F2 或 Del 进入 UEFI 启动选择菜单。
导航到 Save & Exit 菜单,向下滚动到 Boot Override 部分,然后选择要从中启动的相应网络端口。仅当您启用该卡的 UEFI PXE ROM 时,MLNX 卡才会出现。

或者,您可以按 SBIOS 启动画面上的 F12,SBIOS 将迭代遍历每个 NIC 并尝试在每个 NIC 上进行 PXE 启动。尝试 NIC 的顺序由网络驱动器 BBS 优先级指定。
其他 IPMI 启动选项#
有关通过 IPMI 指定启动顺序的更多信息,请参阅 ipmitool 手册页中的 chassis
命令和 bootdev
子命令。
有关 IPMI 规范的更多信息,请参阅 智能平台管理接口规范 v2.0 rev. 1.1。
自动安装自定义#
Base OS 7.x ISO 中有许多自动安装文件可供您参考;这些文件包含在
casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs
您可以挂载 ISO,然后挂载此 squashfs 以查看其中打包的许多自动安装文件
mkdir -p /tmp/iso_mnt
mkdir -p /tmp/squash_mnt
sudo mount /path/to/DGXOS-<version>-<date>.iso /tmp/iso_mnt/
sudo mount /tmp/iso_mnt/casper/ubuntu-server-minimal.ubuntu-server.installer.kernel.nvidia.squashfs /tmp/squash_mnt/
find /tmp/squash_mnt/ai/ -name '*.yaml'
对于某些部署,您可能希望使用自己的自动安装文件。本节将介绍内置自动安装文件中包含的一些部分,以及如何执行一些常见的自定义。
注意
安装程序期望使用统一的自动安装文件,而不是典型的拆分供应商/用户/元数据格式。这意味着用户提供的自动安装文件将需要考虑一些格式差异,即需要删除 autoinstall:
关键字,并相应地调整缩进
#
# typical user-data file
#
#cloud-config
autoinstall:
version: 1
identity:
realname: 'DGX User'
username: dgxuser
password: '$6$g3vXaGj.MQpP/inN$l6.JtAueRAfMtQweK7qASjxXiEX8Vue3CvRcwON81Rt9BJmlEQKtnfOVSnCqHrTsy88PbMDDHq6k.iM6PWfHr1'
#
# unified autoinstall file
#
version: 1
identity:
realname: 'DGX User'
username: dgxuser
password: '$6$g3vXaGj.MQpP/inN$l6.JtAueRAfMtQweK7qASjxXiEX8Vue3CvRcwON81Rt9BJmlEQKtnfOVSnCqHrTsy88PbMDDHq6k.iM6PWfHr1'
NVIDIA 特定的自动安装变量#
ISO 中包含的自动安装文件是特定于平台的,并且可以作为自定义版本的良好起点。它们中的许多文件都包含以 CHANGE_
为前缀的变量,这些变量将被安装程序替换
CHANGE_STORAGE_REG
当不存在启动参数ai-encrypt-root
时,这将删除并取消注释。取消注释此节会导致标准的磁盘分区方案,而无需 LUKS 加密。CHANGE_STORAGE_ENC
当存在启动参数ai-encrypt-root
时,这将删除并取消注释。取消注释此节会导致加密的根分区。CHANGE_BOOT_DISK_NAME_x
这是一个磁盘名称,不带/dev
前缀。对于期望 RAID 引导设备的平台(例如 DGX A100),可能存在多个(例如,CHANGE_BOOT_DISK_NAME_1
和CHANGE_BOOT_DISK_NAME_2
)。注意
安装程序将找到要在此处替换的相应磁盘名称。或者,可以使用
force-bootdisk
参数来指定磁盘名称。CHANGE_BOOT_DISK_PATH_x
这与上面的CHANGE_BOOT_DISK_NAME_x
变量相同,只不过它以/dev/
为前缀。CHANGE_DESC_PLATFORM
安装程序将使用特定于平台的描述性名称替换此变量。CHANGE_SERIAL_NUMBER
安装程序将使用 dmidecode 报告的序列号替换此变量。CHANGE_INSTALL_PKGS
安装程序将使用特定于平台的软件包列表替换此值。软件包列表由squashfs
中的*-pkgs
文件指定。注意
此处的软件包列表将包括 oem-config 及其依赖项。当您提供自己的自动安装文件时,您还希望执行 oem-config 提供的其他设置步骤,并在自动安装期间执行这些步骤。对于此用例,我们建议在 late-commands 部分中添加一个步骤以删除 oem-config 和 ubiquity 软件包
late-commands: ... - curtin in-target -- apt-get purge -y oem-config ubiquity
CHANGE_REBUILD_RAID
这将根据是否存在rebuild-raid
启动参数替换为true
或false
。CHANGE_IPMISOL
这将根据是否存在ai-encrypt-root
启动参数替换为true
或false
。当我们使用加密设置系统时,我们还会撤消 IPMI 串行 over LAN 配置,以确保 LUKS 密码短语提示显示在控制台上而不是串行 over LAN 接口上。
注意
虽然可以自行替换这些值,但我们强烈建议让安装程序处理此操作。
常见自定义#
在本节中,我们将介绍一些在更自定义的部署中可能有用的常见自定义。
网络配置#
要在安装时配置网络,您可以将 network
部分添加到您的自动安装文件中。在此示例中,我们将创建一个 netplan 配置文件,该文件将 enp1s0f0 接口设置为使用 DHCP
network:
version: 2
ethernets:
enp1s0f0:
dhcp4: yes
创建用户#
要在安装时创建用户,您可以将 identity
部分添加到您的自动安装文件中。以下示例将系统主机名设置为 dgx
,并创建一个用户 nvidia
,密码为 nvidia
。
# To generate an encrypted password:
# printf '<plaintext_password>' | openssl passwd -6 -stdin
#
# For example:
# printf 'nvidia' | openssl passwd -6 -stdin
identity:
hostname: dgx
password: $6$8fqF54QDoaLMtDXJ$J02iNH1xW9hHtzH6APpUX4X4HkRx2xY2ZKy9DQpGOQhW7OOuTk3DwHr9FnAAh1JIyqn3L277Jy9MEzW4MyVsV0
username: nvidia
有关更多示例,请参阅 Ubuntu 安装文档中的 自动安装配置参考手册。