我想将我们的服务器配置为使用具有两个绑定接口的 NFS-root 进行启动。
我成功地使用启用了 NFS-root 的 initrd 和以下内核参数设置了一个具有一个网络接口的 NFS-root
root=/dev/nfs nfsroot=192.168.1.1:/nfsroot/ubuntu ip=dhcp initrd=initrd.img
我找到了有关如何设置与 NFS-root 绑定的信息在博客文章中。
由于我使用的是 Ubuntu,因此我必须将绑定模块添加到末尾/etc/initramfs-tools/modules
。我构建了一个新的 initrd 并使用了内核参数
root=/dev/nfs nfsroot=192.168.1.1:/nfsroot/ubuntu biosdevname=0 bond=bond0:eth0,eth1:mode=4:miimon=100:lacp-rate=1:slaves=none:xmit_hash_policy=layer3+4 ip=bond0:dhcp initrd=initrd.img
当我启动服务器时,我收到一个内核恐慌,该消息在消息后立即显示
ipconfig: can't parse IP address 'bond0'
有人能帮我解决这个问题吗?
启动日志的相关部分可以在这个要点。
更新:
在深入研究了 Ubuntu 启动过程后,我发现目前有两种不同的方法来创建初始 ramdisk。Ubuntu 使用 initramfs-tools,而 RedHat 使用较新的 dracut 工具。我引用的博客文章是为 Fedora 编写的,dracut 列出的启动参数不适用于 Ubuntu。由于我无法弄清楚如何使用 initramfs-tools 处理绑定接口,因此我在 Ubuntu 上使用 dracut 并在博客文章中写下了我的发现安装并配置 dracut 以使用绑定接口通过 VLAN 标记网络从 NFS 根目录启动 Ubuntu 12.10。
答案1
经过一些脚本编写后,我能够使用通过内核命令行指定的动态从属接口使其与 initramfs-tools 一起工作。
将绑定模块和以太网模块添加到/etc/initramfs-tools/modules
igb
bonding
然后/etc/initramfs-tools/scripts/nfs-top/00_bonding_init
使用 0755 权限创建并填充以下内容:
#!/bin/sh -e
PREREQS=""
case $1 in
prereqs) echo "${PREREQS}"; exit 0;;
esac
echo "Network interfaces loaded: "
echo `ls /sys/class/net`
for x in $cmdline; do
case $x in
bondslaves=*)
bondslaves="${x#bondslaves=}"
;;
esac
done
IFS=","
for x in $bondslaves; do
echo "+$x" > /sys/class/net/bond0/bonding/slaves
done
之后,您将能够使用 bondslaves= kernel cmdline 参数来指定您的从属接口,例如:
boot=nfs root=/dev/nfs initrd=ubuntu/initrd.img-3.13.0-44-generic ip=:::::bond0:dhcp aufs=tmpfs console=ttyS1,115200 console=tty0 bondslaves=p1p1,p1p2
答案2
代替
ip=bond0:dhcp
和
ip=bootp
答案3
尝试更改ip=bond0:dhcp
为ip=:::::bond0:dhcp