当前位置: 首页>>技术教程>>正文


更新到15.10后,网络接口名称会更改 – udev更改

, ,

问题描述

我将运行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本身支持以下不同的网络接口命名方案:

  1. 包含固件/BIOS的名称为on-board设备提供了索引号(例如:eno1)

  2. 包含固件/BIOS的名称提供了PCI Express热插拔插槽索引号(例如:ens1)

  3. 包含硬件连接器的物理/地理位置的名称(例如:enp2s0)

  4. 包含接口MAC地址的名称(例如:enx78e7d1ea46da)

  5. 经典,不可预测的kernel-native ethX命名(例如:eth0) – 已弃用

默认情况下,systemd现在将命名遵循策略的接口:

  1. 如果固件中的信息适用且可用,则回退到

  2. 如果固件中的信息适用且可用,则回退到

  3. 如果适用,请回到

  4. 默认情况下不使用,但如果用户选择,则可用。

  5. 在所有其他情况下。

你怎么禁用这个?

您基本上有以下选择:

  • 创建自己的手动命名方案,例如通过命名接口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"

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1758.html,未经允许,请勿转载。