对于我的个人微型集群,我成功设置了 Ubuntu 服务器 16.04 LTS PXE 网络启动系统,但是为了利用我拥有的 4 端口 NIC,我想要设置以太网绑定。
我没有找到与 Linux 内核版本 4.4.0-21-generic 相关的资源,旧的解决方案无效。
答案1
这是一个自定义的解决方案,实际上是一种黑客攻击,我已经设法让它发挥作用。
在我的 NFS 中,PXE 系统应该从中启动,确保/etc/initramfs-tools/initramfs.conf
没有DEVICE
设置,并且modules
等于most
。
从那里,您将要在处添加一个文件/etc/initramfs-tools/scripts/nfs-premount/00_bond
,确保它具有0755
权限,即它是可执行的。
00_bond
内容:
#!/bin/sh
ip link add bond0 type bond mode 802.3ad
echo "+eth0" > /sys/class/net/bond0/bonding/slaves
echo "+eth1" > /sys/class/net/bond0/bonding/slaves
echo "+eth2" > /sys/class/net/bond0/bonding/slaves
modprobe af_packet
ipconfig -c dhcp -d bond0
此脚本在 initramfs 中创建一个绑定,手动添加从属设备,因为我们没有工具来执行此操作(可以将它们添加到 initramfs,但没有必要)。根据需要添加/删除/重命名接口。
最后,我们加载af_packet
内核模块,并在我们的绑定接口上初始化 DHCP。ipconfig
是一个由 klibc 提供的程序,不要与混淆ifconfig
。
我们的 initramfs 的最后一个配置位于/etc/initramfs-tools/modules
,我们想在这里将模块添加到我们的 initramfs 中。只需在文件末尾bonding
添加一行,默认情况下它通常为空。bonding
您可以通过运行 来更新 initramfs(确保您已 chroot 或在另一个启动到 NFS 分区的系统中)update-initramfs -u
。完成后,请确保从 TFTP 服务器更新对它的任何使用,以便您的新 initramfs 可以远程启动。
在 DHCP 中,由于我们绕过了网络接口的 DHCP 配置(假设是 pxelinux),并且依赖于ethX
NIC 名称格式,因此我们想要更改一些内核启动参数。您可以在脚本中更改它们,但是,我发现使用旧的命名方案更可靠,因为在这种情况下,如果 NIC 发生变化,最好使用临时替换命名 —— 这是我以前遇到过的问题。
这些是我在 PXELinux 配置中输入的针对版本 4.4.0-21-generic 的内核启动参数:
APPEND root=/dev/nfs initrd=initrd.img-4.4.0-21-generic nfsroot=192.168.0.1:/nfs net.ifnames=0 biosdevname=0 ip=none rw
net.ifnames=0 biosdevname=0
禁用新的 NIC 命名方案。
ip=none
禁用任何默认网络配置。我没有遇到任何问题ip=dhcp
,但这是不必要的,因为当它看到已经存在的网络时,它会终止。
其余的是标准的 NFS 挂载参数。
完成所有这些操作后,您的 NFS 服务器即可运行、可访问,并且正确安装了 Ubuntu,DHCP 服务器已准备就绪,然后您就可以从 PXE 启动到具有以太网绑定 NFS 根系统的 Ubuntu。我选择的模式802.3ad
提供速度和断开连接的冗余,而其他可用模式可以提供更强的冗余以换取速度。这对于此用例特别有用,因为当我们突然断开连接时,这类似于在操作中途拉出根驱动器。
应该注意的是,标准 Ubuntu 网络尚未配置(即/etc/network/interfaces
),因此,在设置之前,ifup 和 ifdown 等工具可能无法工作。当然,如果您要运行这样的命令,您应该准备好关闭电源,除非您以非 root 身份启动具有 NFS 的持久 ramdisk,以保持最低限度的功能。
答案2
这里有一个项目在 GitHub 上它集成了 Ubuntu/Debian 节点的解决方案。