更新到 15.10 后网络接口名称更改 - udev 更改

Jef*_*Son 56 networking 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或其他东西。

kyo*_*ake 58

在 Ubuntu 15.10 (Wily Werewolf) 中,从 systemd/udev 开始会自动为所有本地以太网、Wlan 和 Wwan 接口()分配可预测的、稳定的网络接口名称。

udev 现在原生支持以下不同的网络接口命名方案:

  1. 掺入固件/ BIOS名字车载设备提供的索引号(例如:eno1
  2. 掺入固件/ BIOS名提供的PCI Express插槽热插拔索引号(例如:ens1
  3. 结合了硬件的连接器的物理/地理位置名称(例如:enp2s0
  4. 结合了接口的MAC地址的名称(例如:enx78e7d1ea46da
  5. 经典的、不可预测的内核原生 ethX 命名(例如:)eth0- 已弃用

默认情况下,systemd 现在将按照策略命名接口:

  1. 如果固件中的信息适用且可用,则回退到
  2. 如果固件中的信息适用且可用,则回退到
  3. 如果适用,回退到
  4. 默认情况下不使用,但如果用户选择使用,则可用。
  5. 在所有其他情况下。

你如何禁用这个?

您基本上有以下选择:

  • 创建您自己的手动命名方案,例如将您的接口命名为 internet0 或 lan0。为此,创建您自己的 udev 规则文件并设置设备的名称属性。确保在默认策略文件之前对其进行排序,例如通过命名它/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在内核命令行上传递。

  • [this](http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/) 是来源吗?您能否添加一个指向 Ubuntu 官方发行说明页面的链接(我确定它在某个地方,找不到!) (6认同)
  • 完全没有意义的是他进行了升级,而不是全新安装。这听起来像是一个实际的 Ubuntu 错误,因为升级应该使系统处于工作状态。 (4认同)
  • 是的,这就是来源。 (2认同)

小智 40

ArchWiki 初学者指南提供了一种更简单的方法。

首先通过以下方式获取您的设备 MAC 地址

$ ip link
Run Code Online (Sandbox Code Playgroud)

输出显示为

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
Run Code Online (Sandbox Code Playgroud)

您的设备 MAC 地址是

20:68:9d:xx:xx:xx
Run Code Online (Sandbox Code Playgroud)

只需创建文件(只需在文本编辑器中使用 sudo 权限打开)

$ nano /etc/udev/rules.d/10-network.rules    
Run Code Online (Sandbox Code Playgroud)

添加以下行

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"
Run Code Online (Sandbox Code Playgroud)

将 name 替换为您想要的名称,将 aa:bb:cc:dd:ee:ff 替换为您的设备 MAC 地址。

现在只需重新启动计算机,设备名称应该已更改。


小智 18

试试这个: 编辑你的/etc/default/grub. 改变线从

GRUB_CMDLINE_LINUX=""
Run Code Online (Sandbox Code Playgroud)

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
Run Code Online (Sandbox Code Playgroud)

最后运行:

# update-grub
Run Code Online (Sandbox Code Playgroud)

以 root 身份,然后重新启动系统。


Kei*_*ton 5

我知道这可能有点晚了,添加 10-network.rules 似乎有所帮助,但并不完全。我必须添加设备的内核名称才能重命名。这是我如何让 /etc/udev/rules.d/10-network.rules 工作......

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC:ADDRESS",KERNEL=="enp4s8", NAME="eth0"
Run Code Online (Sandbox Code Playgroud)

并将 KERNEL=="" 更改为您的内核在启动时为设备命名的名称。

HTH

凯里