我刚刚将虚拟 14.04 服务器升级到 16.04。重新启动虚拟机后,我看到以下错误:
[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.
虚拟有线网络设备本身仍像以前一样在虚拟机本身中配置。
ip link
还显示lo
-ens160
在ens160
vmware 中为单个配置的虚拟网络设备配置的 mac 地址在哪里。
更新
/etc/network/interfaces
如果我将 eth0 的所有引用更改为 ens160,我就能解决这个问题。
但- 我觉得这不对,原因如下:
- 我想了解这个问题
- 我想坚持使用 eth0,而不是 ens160
所以请有人解释一下这个变化,这个变化并没有发生在同一台服务器上的其他几台 14.04 机器上,我也将这些机器升级到了 16.04。
答案1
原因
该问题是由 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
应用解决方案
我确实创建了一个新文件并10-rename-network.rules
在/etc/udev/rules.d/
其中添加了以下内容:
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 地址
我建议完成此操作后重新启动以确保更改生效。
答案2
通过更改文件 /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
答案3
就我而言,这个问题与尝试启动我的桥有关br0
。我忘了这样做:
sudo apt-get install bridge-utils
所以我的适配器无法启动。
答案4
您可能想要删除/修改持久/一致网络接口名称的 udev 缓存,位于此处:
/etc/udev/rules.d/70-persistent-net.rules