Назад | Перейти на главную страницу

Использование NFS-root со связанными интерфейсами

Я хотел бы настроить наши серверы на загрузку с корнем NFS с двумя связанными интерфейсами.

Мне удалось успешно настроить 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 я понял, что в настоящее время существует два разных подхода к созданию начальных RAM-дисков. Ubuntu использует инструменты initramfs, а RedHat - новый инструмент dracut. Сообщение в блоге, на которое я ссылался, написано для Fedora, и параметры загрузки, указанные для dracut, не подходят для Ubuntu. Поскольку я не мог понять, как обрабатывать связанные интерфейсы с помощью initramfs-tools, я использовал dracut на Ubuntu и опубликовал свои выводы в сообщении в блоге. Установка и настройка dracut для загрузки Ubuntu 12.10 из корня NFS по сети с тегами VLAN с использованием связанных интерфейсов.

После небольшого написания сценариев я смог заставить его работать с initramfs-tools, используя динамические подчиненные интерфейсы, указанные через командную строку ядра.

Добавьте модуль соединения и ваш Ethernet-модуль в /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

После этого вы сможете использовать параметр bondlaves = 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

Попробуйте изменить ip=bond0:dhcp к ip=:::::bond0:dhcp

заменить

ip = bond0: dhcp

с участием

ip = bootp