升级到16.04后无法启动升级网络接口
我刚刚将虚拟14.04服务器机器升级到16.04。 重新启动VM后,我看到以下错误:
[FAILED] Failed to start Raise network interfaces. See 'systemctl status networking.service' for details
登录后我可以运行上面提到的命令并获得以下输出(图像因为我无法连接):
/etc/network/interfaces
看起来很好 – 具有手动配置的eth0(此处不使用dhcp)
让我疑惑的是ifconfig -a
列表
- ens160
- 罗
我期待的地方
- 为eth0
- 罗
尝试通过提升eth0设备
sudo ifup -v eth0
输出:
... Cannot find device "eth0" Failed to bring up eth0.
虚拟有线网络设备本身仍然像以前一样在VM本身中配置。
ip link
显示了lo
和ens160
– 其中ens160
在vmware中为单个配置的虚拟网络设备配置了mac地址。
UPDATE
如果我将/etc/network/interfaces
中eth0的所有引用更改为ens160,我能够解决问题。
但是 – 由于以下几个原因,这对我来说是错误的:
- 我想了解这个问题
- 我想坚持eth0而不是ens160
所以请有人解释这个改变,这个改变并没有发生在同一台服务器上的其他几台14.04机器上,我也升级到了16.04。
原因
问题是由systemd / udev的Predictable-Network-Interface-Names引起的。
可能的方案
根据这个来源,您可以:
- 您禁用固定名称的分配,以便再次使用不可预测的内核名称。 为此,只需屏蔽udev的默认策略规则文件:ln -s / dev / null /etc/udev/rules.d/80-net-setup-link.rules
- 您可以创建自己的手动命名方案,例如通过命名接口“internet0”,“dmz0”或“lan0”。 为此,在/ etc / systemd / network /中创建自己的.link文件,为您的一个,部分或全部接口选择显式名称或更好的命名方案。 有关更多信息,请参见systemd.link(5)。
- 您在内核命令行上传递net.ifnames = 0
应用解决方案
我在/etc/udev/rules.d/
创建了一个新文件10-rename-network.rules
并添加了以下内容:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ff:ff:ff:ff:ff", NAME="eth0"
哪里
-
eth0
=所需的网络接口名称,在/etc/network/interfaces
-
ff:ff:ff:ff:ff:ff
=网络设备的硬件mac地址
我建议在完成此操作后重新启动,以确保更改是粘性的。
通过更改文件/etc/network/interfaces.d/setup解决了以下问题:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp
至:
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp
在我的情况下,这个问题与尝试启动我的桥梁br0
。 我忘记这样做了:
sudo apt-get install bridge-utils
之前,所以我的适配器无法启动。
您可能希望删除/修改udev缓存以获取持久/一致的网络接口名称,位于: /etc/udev/rules.d/70-persistent-net.rules