การใช้ชื่ออินเตอร์เฟสเครือข่ายที่คาดการณ์ได้กับเมล็ดสำรอง


12

เกือบตลอดเวลาฉันใช้เมล็ดจากเคอร์เนล Ubuntu PPAหรือเมล็ดที่ฉันรวบรวมเองโดยใช้การตั้งค่าเคอร์เนล Ubuntu

ปัญหาคือเมื่อฉันใช้เคอร์เนลหุ้นดูเหมือนว่าจะเริ่มต้นการใช้ชื่อเครือข่ายอินเทอร์เฟซที่คาดเดาได้ (เช่น "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"

แต่มันก็ไม่ได้สร้างความแตกต่าง ที่จริงแล้วฉันไม่เคยได้รับเคอร์เนลที่ไม่ใช่หุ้นที่จะใช้ 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 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

หมายเหตุ: ฉันได้ย้ายที่ผ่านมาปัญหานี้ชั่วคราวโดยการอนุญาตให้สร้าง/etc/udev/rules.d/70-persistent-net.rulesไฟล์แล้วแก้ไขสำหรับชื่ออุปกรณ์ที่เหมาะสม ท้ายที่สุดฉันต้องการกำจัดไฟล์

คำตอบ:


34

คุณต้องแยกแยะระหว่าง 3 สิ่ง:

  • ชื่ออินเตอร์เฟสที่คาดการณ์ได้
  • biosdevname
  • 70-persistent.rules กฎ udev

คุณเลือกที่จะใช้หนึ่งในโซลูชันเหล่านี้แต่คุณไม่ได้ใช้ 2 หรือ 3 ในเวลาเดียวกัน (อันที่จริงแล้วคุณสามารถทำได้ แต่คนหนึ่งจะเป็นผู้นำและปิดบังอีกคน)

การแนะนำที่ดีเกี่ยวกับสถานการณ์ปัจจุบันคือโพสต์ในรายการส่งเมลของ ubuntu dev

ชื่ออินเตอร์เฟสที่คาดการณ์ได้

ชื่ออินเทอร์เฟซที่คาดการณ์ได้เป็นสิ่งที่udevdนับตั้งแต่ v197 สร้างขึ้น/lib/udev/rules.d/80-net-setup-link.rules

systemdใช้เป็นค่าเริ่มต้นชื่ออินเทอร์เฟซใหม่ อย่างไรก็ตามยกเว้นว่า upstream systemd ใน Ubuntu คุณต้องเลือกใช้โดยใช้net.ifnames=1

มันไม่สำคัญว่ารุ่นเคอร์เนลที่คุณกำลังทำงาน แต่คุณต้องใช้เคอร์เนลบรรทัดคำสั่งเพื่อกำหนดค่าโดยการเปลี่ยนการตั้งค่าด้วง/etc/default/grubเช่น:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

และเรียกใช้

sudo update-grub

ใน 14.04 หรือ 14.10 โดยไม่มี systemd ควรจะเพียงพอที่จะลบ 70-persitent-net.rules ดังที่อธิบายไว้ด้านล่างในบันทึกย่อ

Biosdevname

biosdevnameเป็นความพยายามของ dell ในการแก้ปัญหาที่คล้ายกันกว่าชื่ออินเตอร์เฟสที่คาดเดาได้ใน systemd มันเป็นค่าเริ่มต้นบนเซิร์ฟเวอร์อูบุนตู คุณสามารถมีได้โดยการติดตั้งแพคเกจbiosdevname

sudo apt-get install biosdevname

บันทึก

คุณสามารถปิดการใช้งานโดยใช้เคอร์เนลบรรทัดคำสั่งในการตั้งค่าด้วง:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

และเรียกใช้

sudo update-grub

หรือเพียงถอนการติดตั้งแพ็คเกจ

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

กฎ udev

นี้จะเริ่มต้นบนเดสก์ทอปอูบุนตู udevกฎ/lib/udev/rules.d/75-persistent-net-generator.rulesสร้างในระหว่างการบูตแรกกฎที่กำหนดเอง/etc/udev/rules.d/70-persistent-net.rulesที่มีอยู่ MAC ของอินเตอร์เฟซของคุณจะได้รับชื่อถาวรสำหรับอินเตอร์เฟซของคุณ

บันทึก

หากคุณใช้กฎ udev อยู่แล้วคุณต้องลบ/etc/udev/rules.d/70-persistent-net.rulesและหลีกเลี่ยงการสร้างใหม่ในการบู๊ตแต่ละครั้งที่คุณต้องรัน

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

หลังจากนั้นถ้าคุณใช้systemdคุณจะต้องเลือกใช้ชื่ออินเทอร์เฟซที่คาดเดาได้ดังที่อธิบายไว้ข้างต้น


1
ขอบคุณสำหรับคำตอบ. คอมพิวเตอร์ของฉันเป็นรุ่นเซิร์ฟเวอร์ไม่ใช่รุ่นเดสก์ท็อป ฉันจะส่งการแก้ไขคำตอบของคุณเพื่อจัดการกับความแตกต่าง (ติดตั้ง biosdevname เป็นค่าเริ่มต้นและดังนั้นจึงจำเป็นต้องปิดใช้งานโดยเฉพาะผ่านทางด้วง) ข้อผิดพลาดในการคิดของฉันคือฉันคาดว่าจะมีชื่ออินเทอร์เฟซที่แตกต่างกันnet.ifnames=1และbiosdevname=0ตามที่อธิบายไว้ในลิงก์ที่คุณให้ แต่ฉันได้รับ eth0 และ eth1 เก่า อย่างไรก็ตามมันใช้งานได้กับเคอร์เนลใด ๆ ในตอนนี้ (ไม่ใช้/etc/udev/rules.d/70-persistent-net.rules) หลังจากที่ฉันแก้ไข/etc/network/interfacesเพื่อแสดงชื่ออินเตอร์เฟสที่เหมาะสม
Doug Smythies

ฉันอยู่บนเดสก์ท็อปของ Ubuntu 15.10 และฉันไม่คิดว่า udev จะเป็นค่าเริ่มต้นอีกต่อไป อุปกรณ์เครือข่ายของฉันมีชื่อwlp4s0และenp0s31f6และไฟล์/etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.rulesไม่มีอยู่
Jonathan Hartley

ใน Ubuntu 16.04 (เฉพาะsystemd 220-7 ) ที่ไฟล์จะเลิกในความโปรดปรานของ75-persistent-net-generator.rules net.ifnames
200_success

4
  1. ใน Ubuntu Server 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ไฟล์ของคุณ.. จากนั้นรีบูตอีกครั้ง

หวังว่านี่จะช่วยใครซักคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.