确定用于通过 PXE 启动的接口

确定用于通过 PXE 启动的接口

我有一台通过 PXE 启动的 Linux 机器。我可以确定用于启动的网络接口吗?

答案1

如果假设您使用的是 PXELINUX。

有一面旗帜IPAPPEND;如果您将其设置为2,它应该会导致 PXELINUX 将一个参数附加BOOTIF=<hardware-address-of-boot-interface>到您的内核命令行。然后你就得到了 MAC 地址,你可以用它来识别所使用的接口。

http://www.syslinux.org/wiki/index.php/SYSLINUX#IPAPPEND_flag_val_.5BPXELINUX_only.5D

答案2

我已经使用 PXELINUXIPAPPEND=2多年了。但我最近不得不切换到 EFI PXE 引导,大多数人似乎更喜欢 GRUB 而不是 PXELINUX。

GRUB EFI PXE 引导加载程序定义了一个$net_default_mac包含引导接口的 MAC 地址的变量。您可以使用它将 MAC 地址添加到内核命令行,但它与 PXELINUXIPAPPEND=2值有两个不同之处:

  1. 它不包括硬件类型前缀字节(01=以太网)
  2. 它使用冒号来分隔八位字节而不是破折号(例如ba:98:76:54:32:10而不是01-ba-98-76-54-32-10

我们有一些脚本需要 PXELINUXBOOTIF格式,所以我想在 GRUB 配置中复制它。

不幸的是,GRUB 的文本操作功能似乎几乎不存在。我会使用正则表达式像这样命令:

set dd="[0-9a-f][0-9a-f]"

regexp --set 1:o1 --set 2:o2 --set 3:o3 --set 4:o4 --set 5:o5 --set 6:o6 \
    ($dd):($dd):($dd):($dd):($dd):($dd) \
    $net_default_mac

set hwaddr="01-$o1-$o2-$o3-$o4-$o5-$o6"

menuentry  'My Linux' --class fedora --class gnu-linux --class gnu --class os {
   linuxefi my-kernel-image BOOTIF=$hwaddr
   initrdefi my-initramfs.img
}

相关内容