hvt*_*org 5 iscsi bridge bonding initramfs debian-wheezy
我正在尝试构建我的个人圣杯:从 iSCSI 目标无盘启动我的 Debian Wheezy KVM 服务器,无盘服务器上唯一需要的配置是 NIC ROM 中的 iSCSI 参数。其余的配置应该都在 iSCSI LUN 的“内部”。
系统有两个 NIC,它们连接到支持 LACP 的交换机。所以,我想通过绑定接口启动机器,这也在桥内vmbr0。虽然这种组合并不完全有效。
因为我读到 iSCSI 连接不应在启动后中断(例如通过重新配置接口),所以我尝试在启动前设置所有 IP 配置(在内核参数/cmdline 中)。
iSCSI 引导部分由我的 Broadcom 双端口 NIC 的 ROM 处理。这似乎工作得很好: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
Run Code Online (Sandbox Code Playgroud)
当 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'
Run Code Online (Sandbox Code Playgroud)
我被放到了 initramfs shell 中,我发现它bond0根本没有配置(但是bonding模块已加载),vmbr0也没有(bridge模块显然是内置的)。
当我使用以下 grub 行通过排除绑定配置来缩小范围时:
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
Run Code Online (Sandbox Code Playgroud)
也在这里,vmbr0没有创建。
所以在我看来 Debian Wheezy 的 initramfs 没有同时配置绑定和桥接。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"
Run Code Online (Sandbox Code Playgroud)
要使用此 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"
Run Code Online (Sandbox Code Playgroud)
这个 /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
Run Code Online (Sandbox Code Playgroud)
我还需要一个 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
Run Code Online (Sandbox Code Playgroud)
最后在 /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
Run Code Online (Sandbox Code Playgroud)
就这样,德米特里
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |