如果我在命令行上使用手动设置(按照内核说明),我可以正确设置我的网络连接:
# modprobe bonding mode=4 miimon=100
# ifconfig bond0 up
# ip link set eno1 master bond0
# ip link set eno2 master bond0
作为记录,使用的交换机是 Cisco Nexus 2248,我没有指定 IP 地址,因为还有一个额外的 802.1q 层(配置文件中存在或不存在对问题没有影响)。
问题是我无法创建正确的/etc/network/interfaces
文件以在启动时自动完成此操作。网上有很多关于 ifenslave 包的不同版本之间的混淆,尤其是它的文档,以及如何在使用 ifup 时避免竞争条件。任何适用于以前版本的 Ubuntu 的东西都不再适用了。如果 systemd 让事情变得更加混乱,我也不会感到惊讶。基本上,无论我尝试什么,我的脚本都会在启动时卡住,我必须等待一到五分钟才能完成启动过程。
这是我能做到的最好的:
auto lo
iface lo inet loopback
allow-bond0 eno1
iface eno1 inet manual
bond-master bond0
allow-bond0 eno2
iface eno2 inet manual
bond-master bond0
auto bond0
iface bond0 inet manual
bond-mode 4
bond-slaves eno1 eno2
bond-miimon 100
在启动时,bond0 停顿一分钟(因为 bond0 正在等待至少一个从属设备被启动,这永远不会发生,所以它超时),但是一旦系统启动,使用ifup eno1
works 和 bond0 启动好好工作。
如果我指定auto eno1
,那么启动过程会停止五分钟,bond0 永远不会正确启动,尝试使用ifdown eno1
会卡住,因为它正在等待一些锁定/run/network/wherever
(不记得确切的文件,并且经常重启这台机器已经),这似乎表明是的,我遇到了竞争条件,ifup 永远卡在 eno1 上。
有没有人在最新的 Ubuntu 上有一个可行的解决方案?