वैकल्पिक कर्नेल के साथ प्रिडिक्टेबल नेटवर्क इंटरफ़ेस नामों का उपयोग


12

लगभग लगातार, मैं उबंटू कर्नेल पीपीए से गुठली का उपयोग करता हूं , या गुठली मैंने खुद को संकलित किया है, उबंटू कर्नेल कॉन्फ़िगरेशन का उपयोग कर रहा है।

समस्या यह है कि जब मैं स्टॉक कर्नेल का उपयोग कर रहा हूं, तो यह अनुमानित नेटवर्क इंटरफेस नाम (यानी "p4p1") का उपयोग करने के लिए डिफ़ॉल्ट रूप से लगता है, लेकिन जब मैं किसी वैकल्पिक कर्नेल का उपयोग करता हूं तो यह पुरानी पद्धति (यानी "eth0") का उपयोग करने के लिए डिफ़ॉल्ट लगता है।

इस प्रश्न के लिए वास्तव में प्रासंगिक नहीं होने के दौरान, मुझे अपने परीक्षण कंप्यूटर पर हार्ड डिस्क की विफलता हुई और मैं Ubuntu Server 14.04.2 की एक नई स्थापना कर रहा हूं।

मैं यह निर्धारित नहीं कर पाया कि गुठली में क्या अंतर है। मुझे कर्नेल कॉन्फ़िगरेशन पैरामीटर पर संदेह है, लेकिन यह पहचानने में असमर्थ है कि कौन सा है।

मेरा प्रश्न: मैं सभी कर्नल्स में अनुमानित नेटवर्क इंटरफ़ेस नाम कैसे काम कर सकता हूं?

अतिरिक्त नोट्स: कहीं न कहीं मैंने इसे ग्रब में जोड़ने के लिए अनुमानित नेटवर्क इंटरफ़ेस नामों को अक्षम करने के लिए देखा था:

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

तो, मैंने सोचा कि विपरीत मदद कर सकता है:

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

लेकिन इससे कोई फर्क नहीं पड़ा। वास्तव में, मैं कभी भी बायोसदेवनाम का उपयोग करने के लिए नॉन-स्टॉक कर्नेल प्राप्त नहीं कर सकता, कोई फर्क नहीं पड़ता। और मैं /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फ़ाइल बनाने की अनुमति देकर अस्थायी रूप से इस मुद्दे को पिछले ले गया हूं , और फिर इसे उचित डिवाइस नामों के लिए संपादित कर रहा हूं । अंततः, मैं फ़ाइल से छुटकारा पाना चाहूंगा।

जवाबों:


34

आपको 3 चीजों में अंतर करना होगा:

  • नाम बदलने योग्य इंटरफेस
  • biosdevname
  • ०-लगातार.रुल्स udev नियम

आप या तो इनमें से किसी एक समाधान का उपयोग करना चाहते हैं, लेकिन आप एक ही समय में 2 या 3 का उपयोग नहीं करते हैं। (वास्तव में, आप कर सकते हैं लेकिन एक पूर्वता लेगा और दूसरे को नकाब उतार देगा)

वर्तमान स्थिति के लिए एक अच्छा परिचय ubuntu देव मेलिंग सूची पर पोस्ट है

प्रिडिक्टेबल इंटरफ़ेस नाम

जब से v197 उत्पन्न होता है, तो पूर्वनिर्धारित इंटरफ़ेस नाम एक udvd चीज है/lib/udev/rules.d/80-net-setup-link.rules

systemd डिफ़ॉल्ट नई उम्मीद के मुताबिक इंटरफ़ेस नाम से उपयोग। हालांकि , जब तक अपस्ट्रीम सिस्टमड, उबंटू में, आपको उपयोग करके ऑप्ट-इन करना होगाnet.ifnames=1

यह कर्नेल संस्करण कोई फर्क नहीं पड़ता कि आप चल रहे हैं। लेकिन आपको ग्रब कॉन्फ़िगरेशन को बदलकर इसे कॉन्फ़िगर करने के लिए कर्नेल कमांड लाइन का उपयोग करने की आवश्यकता है /etc/default/grub, जैसे:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

और भाग खड़ा हुआ

sudo update-grub

14.04 या 14.10 में, सिस्टमड के बिना, नोट में नीचे वर्णित के रूप में, 70-पर्सिटेंट-नेट.लू को हटाने के लिए पर्याप्त होना चाहिए।

biosdevname

biosdevname सिस्टमड में प्रेडिक्टेबल इंटरफ़ेस नाम की तुलना में एक समान समस्या को हल करने का एक गहन प्रयास है। यह ubuntu सर्वर पर डिफ़ॉल्ट है । आप इसे पैकेज स्थापित करके प्राप्त कर सकते हैंbiosdevname

sudo apt-get install biosdevname

ध्यान दें

आप इसे grub config में कर्नेल कमांड लाइन का उपयोग करके अक्षम कर सकते हैं:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

और भाग खड़ा हुआ

sudo update-grub

या बस पैकेज की स्थापना रद्द करें।

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

udv नियम

यह उबंटू डेस्कटॉप पर डिफ़ॉल्ट है । Udev नियम /lib/udev/rules.d/75-persistent-net-generator.rulesपहले बूट एक कस्टम नियमों के दौरान बनाता है /etc/udev/rules.d/70-persistent-net.rulesअपने इंटरफेस के लिए लगातार नाम पाने के लिए अपने इंटरफेस के मैक पता के साथ।

ध्यान दें

यदि आप पहले से ही udv नियमों का उपयोग कर रहे हैं, तो आपको हटाने की आवश्यकता है /etc/udev/rules.d/70-persistent-net.rulesऔर इसे प्रत्येक बूट पर पुनर्जीवित होने से बचने के लिए आपको चलाने की आवश्यकता है

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

उसके बाद, यदि आप सिस्टमड का उपयोग करते हैं , तो आपको ऊपर बताए अनुसार, अनुमानित इंटरफ़ेस नाम के लिए ऑप्ट-इन करना होगा।


1
आपके उत्तर के लिए धन्यवाद। मेरा कंप्यूटर सर्वर संस्करण है, न कि डेस्कटॉप संस्करण। मैं अंतर से निपटने के लिए आपके उत्तर के लिए एक संपादन प्रस्तुत करूँगा (biosdevname डिफ़ॉल्ट रूप से स्थापित किया गया था और इसलिए विशेष रूप से ग्रब के माध्यम से अक्षम होने की आवश्यकता है)। मेरी सोच में त्रुटि है कि मैं के साथ विभिन्न इंटरफेस नामों की उम्मीद थी net.ifnames=1और biosdevname=0लिंक आप दे दी है में वर्णित है, है, लेकिन मैं पुराने eth0 और eth1 मिलता है। वैसे भी, यह किसी भी कर्नेल के लिए काम करता है (नहीं /etc/udev/rules.d/70-persistent-net.rules) के साथ , जब मैंने /etc/network/interfacesउचित इंटरफ़ेस नामों को प्रतिबिंबित करने के लिए संपादित किया ।
डग स्माइथीज

मैं ubuntu 15.10 डेस्कटॉप पर हूं, और मुझे नहीं लगता कि udv किसी भी डिफ़ॉल्ट है। मेरे नेटवर्क उपकरणों नाम हैं wlp4s0और enp0s31f6, और फ़ाइलों /etc/udev/rules.d/70-persistent-net.rulesऔर /lib/udev/rules.d/75-persistent-net-generator.rulesमौजूद नहीं हैं।
जोनाथन हार्टले

उबंटू 16.04 (विशेष रूप से सिस्टमड 220-7 ) में, 75-persistent-net-generator.rulesफ़ाइल के पक्ष में पदावनत किया जाता है net.ifnames
२००

4
  1. उबंटू सर्वर 16.04LTS में मैंने जो कुछ भी किया था:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. फिर फ़ाइल का उपयोग करके बनाएँ

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

    और निम्नलिखित जोड़ें

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

    :wq फ़ाइल को बचाने के लिए

  3. फिर रिबूट करें और अपनी /etc/network/interfacesफ़ाइल को समायोजित करें .. फिर पुन: रिबूट करें

आशा है कि यह किसी की मदद करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.