Почти постоянно я использую ядра из PPA ядра Ubuntu , или ядра, которые я сам скомпилировал, используя конфигурацию ядра 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
чтобы отразить правильные имена интерфейсов.