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

Загрузка бездисковой системы Debian с использованием связывания, моста и iSCSI

Я пытаюсь создать свой личный святой Грааль: загружаю свой бездисковый KVM-сервер Debian Wheezy с цели iSCSI, и единственная конфигурация, необходимая на бездисковом сервере, - это параметры iSCSI в ПЗУ сетевого адаптера. Остальная часть конфигурации должна находиться «внутри» iSCSI LUN.

В системе есть два сетевых адаптера, подключенных к коммутатору, поддерживающему LACP. Итак, я хочу загрузить машину через связанный интерфейс, который также находится внутри моста. vmbr0. Хотя эта комбинация не совсем работает.

Поскольку я прочитал, что соединение iSCSI не должно прерываться после загрузки (например, путем перенастройки интерфейсов), я попытался установить всю свою IP-конфигурацию перед загрузкой (в параметрах ядра / cmdline).

Загрузочная часть iSCSI обрабатывается ПЗУ моей двухпортовой сетевой карты Broadcom. Кажется, это работает нормально: запускается grub и после этого продолжается загрузка. В моей конфигурации grub у меня есть это:

linux /vmlinuz-2.6.32-26-pve root=UUID={iscsi-disk-uuid} ro  quiet bond=bond0:eth0,eth1:mode=802.3ad,lacp_rate=1,miimon=100,xmit_hash_policy=layer2+3 bridge=vmbr0:bond0 ip=192.168.15.4::192.168.15.1:255.255.0.0::vmbr0:off

Когда grub запускает ядро, я получаю следующие ошибки:

ipconfig: vmbr0: SIOCGIFINDEX: No such device
ipconfig: no devices to configure
... repeated 10 times...
/scripts/local-top/iscsi: .: line 426: can't open '/run/net-vmbr0.conf'

И меня бросили в оболочку initramfs, где я обнаружил, что bond0 совсем не настроен ( bonding модуль, однако загружен) и vmbr0 ни ( bridge модуль, по-видимому, встроенный).

Когда я уменьшаю объем, исключая конфигурацию склеивания, с помощью этой линии зацепления:

linux /vmlinuz-2.6.32-26-pve root=UUID={iscsi-disk-uuid} ro  quiet bridge=vmbr0:eth0 ip=192.168.15.4::192.168.15.1:255.255.0.0::vmbr0:off

Также здесь, vmbr0 не создается.

Поэтому мне кажется, что initramfs Debian Wheezy не настраивает одновременно связывание и мост. brctl доступен в initramfs, ifenslave с другой стороны нет.

Что с этим делать? Или мои параметры ядра (cmdline) не поддерживаются / не разрешены? Или мне следует рассмотреть другую последовательность загрузки?

Это определенно интересный вопрос, и вот как я сделал трюк. Моя конфигурация примерно такая же, как у вас: загрузка Proxmox через мостовой интерфейс iSCSI. Моя строка загрузки grub выглядит так:

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 ISCSI_INITIATOR=iqn.2007-08.com.example.client:client ISCSI_TARGET_NAME=iqn.2005-10.org.freenas.ctl:proxmox ISCSI_TARGET_IP=192.168.11.3 ISCSI_TARGET_PORT=3260 root=UUID=04709453-9d82-47d6-a898-81ea6408f88e ip=192.168.11.1:::255.255.255.0:client:vmbr2:off"

Чтобы загрузиться с этой конфигурацией grub, мне нужно запустить мост до того, как grub смонтирует root. Я делаю это, назначая скрипт в /etc/udev/rules.d/70-persistent-net.rules следующим образом:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:30:48:94:61:ec", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="ens6f0", RUN+="/bin/brctl-iscsi ens6f0 vmbr2"

этот сценарий / bin / brctl-iscsi выглядит так:

#!/bin/sh

ifconfig $1 mtu 9000 up
brctl addbr $2
brctl addif $2 $1
ip link set dev $2 type bridge forward_delay 0 stp_state 0

Мне также нужен хук initramfs, чтобы поместить этот скрипт в initrd:

root@proxmox-2:~# cat /usr/share/initramfs-tools/hooks/brctl_iscsi
#!/bin/sh -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /bin/brctl-iscsi    /bin

И, наконец, в / etc / network / interfaces у меня есть это для интерфейса iscsi и его моста:

no-auto-down ens6f0
no-auto-down vmbr2

iface ens6f0 inet manual

iface vmbr2 inet manual
    address  192.168.11.2
    netmask  255.255.255.0
    bridge-ports ens6f0
    bridge-stp off
    bridge-fd 0
    down ifconfig vmbr2 down; brctl delbr vmbr2
#iSCSI network

С уважением, Дмитрий