使用具有绑定接口的 NFS-root

使用具有绑定接口的 NFS-root

我想将我们的服务器配置为使用具有两个绑定接口的 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:dhcpip=:::::bond0:dhcp

相关内容