问题描述
我将运行Ubuntu服务器15.04的虚拟机更新为刚刚发布的新稳定版15.10。
没有明显的问题,但重启后机器失去了网络连接。 lspci
显示正确的卡,lsmod
证明驱动程序已加载。
关于编辑或删除/etc/udev/rules.d/70-persistent-net.rules
的提示没有成功(仍然没有网络,没有新文件),着名的/lib/udev/write_net_rules
甚至都不存在。
我对udev和systemd没有太多线索,所以我花了一些时间在/sys /class /net中找到网络接口名称发生了变化。它变成了ens32
,它是从eth0
重新命名的。我改变了/etc/network/interfaces
网络通信后再次启用。
但是 – 为什么会发生这种情况呢?如果发生这种情况,接口文件是否应该自动更新?
现在我删除了虚拟网卡并创建了另一个,eth0
变成了eno16777728
,不是这样,嗯,很好。
这种行为(至少是升级过程的行为)应该报告为错误吗?
此外,/etc/udev/rules.d/70-persistent-net.rules
现在已经过时了吗?而且(虽然只是部分相关)/etc/udev/rules.d/70-persistent-cd.rules
怎么样?)
编辑 – 附加问题(在接受的答案之后)/etc/network/interfaces
与实际接口名称的依赖关系困扰了我。我在另一个虚拟机中尝试了新的* ubuntu安装。令我惊讶的是,/etc/network/interfaces
仅包含对环回设备的引用。但是,使用我的原始VM,此更改阻止了网络出现。那我还需要改变什么呢?
编辑好吧,从另一个测试我发现新的Ubuntu服务器在/etc/network/interfaces
中有网络接口卡,而XUbuntu没有。也许它正在使用network-manager
或其他东西。
最佳解决办法
在Ubuntu 15.10(Wily Werewolf)中,从systemd /udev开始,将自动为所有本地以太网,Wlan和Wwan接口(source)分配可预测,稳定的网络接口名称。
现在,udev本身支持以下不同的网络接口命名方案:
-
包含固件/BIOS的名称为on-board设备提供了索引号(例如:
eno1
) -
包含固件/BIOS的名称提供了PCI Express热插拔插槽索引号(例如:
ens1
) -
包含硬件连接器的物理/地理位置的名称(例如:
enp2s0
) -
包含接口MAC地址的名称(例如:
enx78e7d1ea46da
) -
经典,不可预测的kernel-native ethX命名(例如:
eth0
) – 已弃用
默认情况下,systemd现在将命名遵循策略的接口:
-
如果固件中的信息适用且可用,则回退到
-
如果固件中的信息适用且可用,则回退到
-
如果适用,请回到
-
默认情况下不使用,但如果用户选择,则可用。
-
在所有其他情况下。
你怎么禁用这个?
您基本上有以下选择:
-
创建自己的手动命名方案,例如通过命名接口internet0或lan0。为此,创建自己的udev规则文件并设置设备的name属性。确保在默认策略文件之前对其进行排序,例如通过命名为
/etc/udev/rules.d/70-my-net-names.rules
-
更改默认策略文件,以选择不同的命名方案,例如,默认情况下在其MAC地址后命名所有接口名称:
cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules
,然后在那里编辑文件并根据需要更改行。 -
在内核命令行上传递
net.ifnames=0
。
次佳解决办法
ArchWiki Beginnersguide提供了一种更简单的方法。
首先获取您的设备MAC地址
$ ip link
输出显示为喜欢
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 20:68:9d:xx:xx:xx brd ff:ff:ff:ff:ff:ff
您的设备MAC地址是
20:68:9d:xx:xx:xx
只需创建文件(只需在文本编辑器中使用sudo权限打开)
$ nano /etc/udev/rules.d/10-network.rules
添加以下行
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"
将名称替换为您想要的名称和aa:bb:cc:dd:ee:ff与您的设备MAC地址。
现在只需重新启动计算机,设备名称应该已更改。
第三种解决办法
试试这个:编辑你的/etc/default/grub
。改变行
GRUB_CMDLINE_LINUX=""
至
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
最后运行:
# update-grub
以root用户身份重新启动系统。
第四种办法
我知道这可能有点晚了,10-network.rules的添加似乎有所帮助但并非完全。我必须添加要重命名的设备的内核名称。这是我如何让/etc/udev/rules.d/10-network.rules工作……
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC:ADDRESS",KERNEL=="enp4s8", NAME="eth0"
并将KERNEL ==“”更改为内核在引导时命名设备的内容。
HTH
K.C.
第五种办法
如果您有全新的安装
apt-get remove biosdevname
然后
update-initramfs -u
检查您是否有udev net ruels文件。如果是这样,请将其删除。
rm /etc/udev/rules.d/70-persistent-net.rules
现在编辑/etc /network /interfaces,将接口重命名为eth0,eth1,…等。
重启
第六种办法
我通过创建文件来完成这项工作:
root@odroid:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"