更新到15.10后,网络接口名称会更改 – udev更改
我将运行Ubuntu服务器15.04的虚拟机更新为刚刚发布的新稳定版15.10。
没有明显的问题,但重启后机器失去了网络连接。 lspci
显示正确的卡, lsmod
certificate驱动程序已加载。
关于编辑或删除/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接口( 源 )分配可预测,稳定的网络接口名称。
现在,udev本身支持以下不同的网络接口命名方案:
- 包含固件/ BIOS的名称为板载设备提供了索引号(例如:
eno1
) - 包含固件/ BIOS的名称提供PCI Express热插拔插槽索引号(例如:
ens1
) - 包含硬件连接器的物理/地理位置的名称(例如:
enp2s0
) - 包含接口MAC地址的名称(例如:
enx78e7d1ea46da
) - 经典,不可预测的内核本地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初学者指南提供了一种更简单的方法。
首先获取您的设备MAC地址
$ ip link
输出显示为喜欢
3: wlan0: 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
KC
如果您有全新的安装
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"