Öngörülebilir Ağ Arabirimi Adlarının alternatif çekirdeklerle kullanımı


12

Neredeyse sürekli olarak, Ubuntu çekirdek PPA'sından veya Ubuntu çekirdek yapılandırmasını kullanarak kendim derlediğim çekirdekleri kullanıyorum.

Ben stok çekirdeği kullandığımda sorun, tahmin edilebilir ağ arabirimi adları (yani "p4p1") kullanmak için varsayılan gibi görünüyor, ancak herhangi bir alternatif çekirdek kullandığınızda eski yöntemi (yani "eth0") varsayılan görünüyor.

Bu soru ile gerçekten ilgili olmasa da, test bilgisayarımda bir sabit disk hatası vardı ve yeni bir Ubuntu Server 14.04.2 yüklemesi yapıyorum.

Çekirdekler arasındaki farkın ne olduğunu belirleyemedim. Bir çekirdek yapılandırma parametresinden şüpheleniyorum, ancak hangisini tanımlayamadım.

Sorum: Öngörülebilir ağ arabirimi adlarının tüm çekirdeklerde tutarlı bir şekilde çalışmasını nasıl sağlayabilirim?

Ek notlar: Bir yere bunu gruba eklemek için öngörülebilir ağ arabirimi adlarını devre dışı bıraktığımı gördüm:

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

yani, bunun tersinin yardımcı olabileceğini düşündüm:

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

ama hiçbir fark yaratmadı. Aslına bakılırsa, ayar ne olursa olsun stok dışı çekirdeği biosdevname kullanmam. Ve stok çekirdeğini hiçbir zaman bir /etc/udev/rules.d/70-persistent-net.rulesdosya oluşturmak için alamıyorum (rağmen, istediğim bu değil), ayarı ne olursa olsun net.ifnames. Varsa net.ifnames=1, en azından stok olmayan çekirdek yanlış bir /etc/udev/rules.d/70-persistent-net.rulesdosya oluşturmaz .

Alıntılar /var/log/udev:
stok çekirdeği:

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 çekirdeği 4.1RC5'ten:

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

Not: Bir /etc/udev/rules.d/70-persistent-net.rulesdosyanın oluşturulmasına izin vererek ve ardından uygun cihaz adları için düzenleyerek bu sorunu geçici olarak aştım . Sonuçta, dosyadan kurtulmak istiyorum.

Yanıtlar:


34

3 şeyi ayırt etmeniz gerekir:

  • Öngörülebilir arayüz adları
  • biosdevname
  • 70-persistent.rules udev kuralı

Bu çözümlerden birini kullanmayı tercih edersiniz, ancak aynı anda 2 veya 3 kullanmazsınız. (Aslında, biri önceliğe sahip olacak ve diğerini maskeleyecektir)

Mevcut duruma iyi bir giriş ubuntu dev posta listesindeki gönderi

Öngörülebilir arayüz adları

Öngörülebilir arabirim adları , v197'de oluşturulduğundan beri bir udevd şeyidir/lib/udev/rules.d/80-net-setup-link.rules

systemd varsayılan olarak yeni öngörülebilir arabirim adını kullanır. Ancak , yukarı akış sistemd değilse, Ubuntu'da şunu kullanarak kaydolmanız gerekir:net.ifnames=1

Bu çekirdek sürümü fark etmez Çalıştırdığınız. Ancak /etc/default/grub, grub yapılandırmasını değiştirerek yapılandırmak için çekirdek komut satırını kullanmanız gerekir , örneğin:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

ve koş

sudo update-grub

14.04 veya 14.10'da, systemd olmadan, aşağıda notta açıklandığı gibi 70 persitent-net.rule'ları kaldırmak yeterli olacaktır.

Biosdevname

biosdevname , systemd'deki öngörülebilir arabirim adından benzer bir sorunu çözmeye yönelik bir dell girişimidir. Ubuntu sunucusunda varsayılan değerdir . Paketi kurarak alabilirsinizbiosdevname

sudo apt-get install biosdevname

Not

Grub config içindeki çekirdek komut satırını kullanarak devre dışı bırakabilirsiniz:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

ve koş

sudo update-grub

veya sadece paketi kaldırın.

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

udev kuralları

Bu, Ubuntu masaüstünde varsayılan ayardır . Udev kuralı /lib/udev/rules.d/75-persistent-net-generator.rulesilk önyükleme özel kurallar sırasında yaratır /etc/udev/rules.d/70-persistent-net.rulessizin arayüzü için kalıcı isim almak için arabirimin MAC adresi ile.

Not

Zaten udev kurallarını kullanıyorsanız, kaldırmanız /etc/udev/rules.d/70-persistent-net.rulesve çalıştırmanız gereken her önyüklemede yeniden oluşturulmasını önlemek için

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

Bundan sonra, systemd kullanıyorsanız , yukarıda açıklandığı gibi öngörülebilir arabirim adını seçmeniz gerekir.


1
Cevabınız için teşekkürler. Bilgisayarım masaüstü sürümü değil, sunucu sürümü. Farkla başa çıkmak için cevabınıza bir düzenleme göndereceğim (biosdevname varsayılan olarak yüklendi ve bu nedenle grub aracılığıyla özellikle devre dışı bırakılması gerekiyor). Düşüncemdeki hata, verdiğiniz bağlantıda açıklandığı gibi net.ifnames=1ve ile farklı arayüz adları beklememdi biosdevname=0, ancak eski eth0 ve eth1'i alıyorum. Her neyse, doğru arayüz adlarını yansıtacak şekilde /etc/udev/rules.d/70-persistent-net.rulesdüzenlendikten sonra, şimdi (hayır ile ) herhangi bir çekirdek için çalışır /etc/network/interfaces.
Doug Smythies

Ubuntu 15.10 masaüstündeyim ve sanmıyorum udev'in varsayılan . Ağ aygıtlarım adlandırıldı wlp4s0ve enp0s31f6dosyalar var /etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.rulesyok.
Jonathan Hartley

Ubuntu 16.04'te (özellikle systemd 220-7 ), 75-persistent-net-generator.rulesdosya lehine kaldırılmıştır net.ifnames.
200_success

4
  1. Ubuntu Server 16.04LTS'de tek yaptığım:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Sonra kullanarak dosyayı oluşturun

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

    ve aşağıdakileri ekleyin

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

    :wq dosyayı kaydetmek için

  3. sonra yeniden başlatın ve /etc/network/interfacesdosyanızı ayarlayın .. sonra yeniden başlatın

Umarım bu birine yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.