几乎一直以来,我都使用Ubuntu内核PPA中的内核,或者使用Ubuntu内核配置自己编译的内核。
问题是当我使用标准内核时,它似乎默认使用可预测的网络接口名称(即“ p4p1”),但是当我使用任何替代内核时,它似乎默认使用旧方法(即“ eth0”)。
虽然与该问题并不十分相关,但是我的测试计算机上出现了硬盘故障,并且正在重新安装Ubuntu Server 14.04.2。
我还无法确定内核之间的区别。我怀疑有一个内核配置参数,但无法确定是哪个。
我的问题:如何使可预测的网络接口名称在所有内核中始终如一地工作?
附加说明:在某处我看到禁用可预测的网络接口名称以将其添加到grub:
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
因此,我认为相反的做法可能会有所帮助:
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"
但这没什么区别。实际上,无论设置如何,我永远都无法让非常规内核使用biosdevname。而且/etc/udev/rules.d/70-persistent-net.rules
,无论的设置如何,我都永远无法使库存内核生成文件(即使那不是我想要的)net.ifnames
。如果我有net.ifnames=1
,那么至少非储备内核不会生成不正确的/etc/udev/rules.d/70-persistent-net.rules
文件。
摘录自/var/log/udev
:
股票内核:
KERNEL[9.216730] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV [9.241073] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1
从Ubuntu PPA内核4.1RC5:
KERNEL[10.772566] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV [11.185866] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227
注意:通过允许/etc/udev/rules.d/70-persistent-net.rules
创建文件,然后编辑它以获取正确的设备名称,我暂时解决了此问题。最终,我想摆脱该文件。
net.ifnames=1
和提供不同的接口名称biosdevname=0
,如您提供的链接中所述,但是我得到了旧的eth0和eth1。无论如何,/etc/udev/rules.d/70-persistent-net.rules
在我编辑/etc/network/interfaces
以反映适当的接口名称之后,它现在适用于任何内核(不带)。