Penggunaan Nama Antarmuka Jaringan yang Dapat Diprediksi dengan kernel alternatif


12

Hampir selalu, saya menggunakan kernel dari PPA kernel Ubuntu , atau kernel yang telah saya kompilasi sendiri, menggunakan konfigurasi kernel Ubuntu.

Masalahnya adalah ketika saya menggunakan kernel saham tampaknya default untuk menggunakan nama antarmuka jaringan yang dapat diprediksi (yaitu "p4p1"), tetapi ketika saya menggunakan kernel alternatif tampaknya default untuk menggunakan metode lama (yaitu "eth0").

Meskipun tidak benar-benar relevan dengan pertanyaan ini, saya mengalami kegagalan hard disk pada komputer uji saya dan sedang melakukan instalasi baru Ubuntu Server 14.04.2.

Saya belum bisa menentukan apa perbedaan antara kernel. Saya menduga parameter konfigurasi kernel, tetapi tidak dapat mengidentifikasi yang mana.

Pertanyaan saya: Bagaimana saya bisa membuat nama antarmuka jaringan yang dapat diprediksi bekerja secara konsisten di semua kernel?

Catatan tambahan: Di suatu tempat saya melihat untuk menonaktifkan nama antarmuka jaringan yang dapat diprediksi untuk menambahkan ini ke grub:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

jadi, saya pikir yang sebaliknya mungkin membantu:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"

tetapi tidak ada bedanya. Sebenarnya, saya tidak pernah bisa mendapatkan kernel non-stok untuk menggunakan biosdevname, tidak peduli pengaturannya. Dan saya tidak pernah bisa mendapatkan stock kernel untuk menghasilkan /etc/udev/rules.d/70-persistent-net.rulesfile (walaupun, bukan itu yang saya inginkan), tidak peduli pengaturannya net.ifnames. Jika sudah net.ifnames=1, maka paling tidak kernel non-stock tidak menghasilkan /etc/udev/rules.d/70-persistent-net.rulesfile yang salah .

Kutipan dari /var/log/udev:
stock kernel:

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

Dari Ubuntu PPA kernel 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

Catatan: Untuk sementara saya telah melewati masalah ini dengan mengizinkan /etc/udev/rules.d/70-persistent-net.rulesfile dibuat, dan kemudian mengeditnya untuk nama perangkat yang tepat. Pada akhirnya, saya ingin menyingkirkan file tersebut.

Jawaban:


33

Anda perlu membedakan antara 3 hal:

  • Nama antarmuka yang dapat diprediksi
  • biosdevname
  • 70-persistent.rules udev rule

Anda memilih untuk menggunakan salah satu dari solusi ini tetapi Anda tidak menggunakan 2 atau 3 pada saat yang bersamaan. (Bahkan, Anda bisa tetapi yang satu akan diutamakan dan menutupi yang lain)

Pengantar yang baik untuk situasi saat ini adalah posting di milis dev ubuntu

Nama antarmuka yang dapat diprediksi

Nama-nama antarmuka diprediksi adalah udevd hal sejak v197 dihasilkan di/lib/udev/rules.d/80-net-setup-link.rules

systemd menggunakan secara default nama antarmuka yang dapat diprediksi baru. Namun , kecuali upstream systemd, di Ubuntu, Anda harus ikut serta dengan menggunakannet.ifnames=1

Tidak masalah versi kernel yang Anda jalankan. Tetapi Anda perlu menggunakan baris perintah kernel untuk mengkonfigurasinya dengan mengubah konfigurasi grub /etc/default/grub, seperti:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

dan lari

sudo update-grub

Dalam 14.04 atau 14.10, tanpa systemd, itu harus cukup untuk menghapus 70-persitent-net.rules, seperti dijelaskan di bawah ini dalam catatan.

Biosdevname

biosdevname adalah upaya untuk memecahkan masalah yang sama dari nama antarmuka yang dapat diprediksi di systemd. Ini adalah default di server ubuntu . Anda dapat memilikinya dengan menginstal paketbiosdevname

sudo apt-get install biosdevname

Catatan

Anda dapat menonaktifkannya dengan menggunakan baris perintah kernel di grub config:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

dan lari

sudo update-grub

atau cukup hapus paketnya.

sudo apt-get purge biosdevname
sudo update-initramfs -u

aturan udev

Ini adalah default di desktop Ubuntu . The udev aturan /lib/udev/rules.d/75-persistent-net-generator.rulesmenciptakan selama boot aturan adat pertama /etc/udev/rules.d/70-persistent-net.rulesdengan alamat MAC antarmuka untuk mendapatkan nama gigih untuk antarmuka Anda.

Catatan

Jika Anda sudah menggunakan aturan udev, Anda harus menghapus /etc/udev/rules.d/70-persistent-net.rulesdan menghindarinya dibuat ulang pada setiap boot yang Anda perlukan untuk menjalankan

sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

Setelah itu, jika Anda menggunakan systemd , maka Anda perlu memilih nama antarmuka yang dapat diprediksi, seperti dijelaskan di atas.


1
Terima kasih atas jawaban anda. Komputer saya adalah edisi server, bukan edisi desktop. Saya akan mengirimkan hasil edit ke jawaban Anda untuk mengatasi perbedaan (biosdevname diinstal secara default dan karenanya harus dinonaktifkan secara khusus melalui grub). Kesalahan dalam pemikiran saya adalah bahwa saya mengharapkan nama antarmuka yang berbeda dengan net.ifnames=1dan biosdevname=0, seperti yang dijelaskan dalam tautan yang Anda berikan, tetapi saya mendapatkan eth0 dan eth1 lama. Bagaimanapun, ini bekerja untuk kernel apa pun sekarang (tanpa /etc/udev/rules.d/70-persistent-net.rules), setelah saya edit /etc/network/interfacesuntuk mencerminkan nama antarmuka yang tepat.
Doug Smythies

Saya di ubuntu 15.10 desktop, dan saya tidak berpikir udev adalah default lagi. Perangkat jaringan saya diberi nama wlp4s0dan enp0s31f6, dan file /etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.rulestidak ada.
Jonathan Hartley

Di Ubuntu 16.04 (khusus systemd 220-7 ), 75-persistent-net-generator.rulesfile tidak digunakan lagi net.ifnames.
200_sukses

4
  1. Di Ubuntu Server 16.04LTS yang saya lakukan adalah menjalankan:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Kemudian buat file menggunakan

    sudo vi /etc/systemd/network/10-internet.link
    

    dan tambahkan yang berikut ini

    [Match]
    Path=pci-0000:(your device mac address)
    
    [Link]
    Name=eth0 (or whatever you want to name it)
    

    :wq untuk menyimpan file

  3. kemudian reboot dan sesuaikan /etc/network/interfacesfile Anda .. lalu reboot lagi

Semoga ini bisa membantu seseorang

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.