Sử dụng tên giao diện mạng có thể dự đoán với các nhân thay thế


12

Hầu như liên tục, tôi sử dụng hạt nhân từ PPA kernel Ubuntu , hoặc hạt nhân tôi đã tự biên dịch, sử dụng cấu hình kernel Ubuntu.

Vấn đề là khi tôi đang sử dụng kernel stock, nó dường như mặc định sử dụng tên giao diện mạng có thể dự đoán được (tức là "p4p1"), nhưng khi tôi sử dụng bất kỳ kernel thay thế nào, nó dường như mặc định sử dụng phương thức cũ (ví dụ "eth0").

Mặc dù không thực sự liên quan đến câu hỏi này, tôi đã gặp lỗi đĩa cứng trên máy tính thử nghiệm của mình và đang thực hiện cài đặt mới Ubuntu Server 14.04.2.

Tôi chưa thể xác định được sự khác biệt giữa các hạt nhân là gì. Tôi nghi ngờ một tham số cấu hình kernel, nhưng không thể xác định được cái nào.

Câu hỏi của tôi: Làm thế nào tôi có thể làm cho tên giao diện mạng có thể dự đoán hoạt động ổn định trên tất cả các hạt nhân?

Ghi chú bổ sung: Ở đâu đó tôi đã thấy vô hiệu hóa tên giao diện mạng có thể dự đoán để thêm tên này vào grub:

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

Vì vậy, tôi nghĩ ngược lại có thể giúp:

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

nhưng nó không có gì khác biệt Trên thực tế, tôi không bao giờ có thể lấy kernel không có chứng khoán để sử dụng tên miền sinh học, bất kể cài đặt. Và tôi không bao giờ có thể lấy kernel stock để tạo một /etc/udev/rules.d/70-persistent-net.rulestập tin (mặc dù, đó không phải là điều tôi muốn), bất kể cài đặt là gì net.ifnames. Nếu tôi có net.ifnames=1, thì ít nhất hạt nhân không có chứng khoán không tạo ra một /etc/udev/rules.d/70-persistent-net.rulestệp không chính xác .

Đoạn trích từ /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

Từ 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

Lưu ý: Tôi đã tạm thời chuyển qua vấn đề này bằng cách cho phép một /etc/udev/rules.d/70-persistent-net.rulestệp được tạo và sau đó chỉnh sửa nó cho tên thiết bị phù hợp. Cuối cùng, tôi muốn thoát khỏi tập tin.

Câu trả lời:


33

Bạn cần phân biệt 3 điều sau:

  • Tên giao diện dự đoán
  • tên sinh học
  • 70-kiên trì.rules quy tắc udev

Bạn có thể chọn sử dụng một trong những giải pháp này nhưng bạn không sử dụng 2 hoặc 3 cùng một lúc. (Trong thực tế, bạn có thể nhưng một người sẽ được ưu tiên và che dấu (các) người khác)

Giới thiệu tốt về tình hình hiện tại là bài đăng trên danh sách gửi thư của nhà phát triển Ubuntu

Tên giao diện dự đoán

Tên giao diện có thể dự đoán là một udevd điều kể từ v197 tạo ra trong/lib/udev/rules.d/80-net-setup-link.rules

systemd sử dụng theo mặc định tên giao diện dự đoán mới. Tuy nhiên , trừ khi hệ thống ngược dòng, trong Ubuntu, bạn phải chọn tham gia bằng cách sử dụngnet.ifnames=1

không quan trọng phiên bản kernel bạn đang chạy. Nhưng bạn cần sử dụng dòng lệnh kernel để cấu hình nó bằng cách thay đổi cấu hình grub /etc/default/grub, như:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

và chạy

sudo update-grub

Trong 14.04 hoặc 14.10, không có systemd, nó sẽ đủ để loại bỏ 70-Persitent-net.rules, như được mô tả dưới đây trong ghi chú.

Tên sinh học

biosdevname là một nỗ lực dell để giải quyết vấn đề tương tự như tên giao diện dự đoán trong systemd. Nó là mặc định trên máy chủ Ubuntu . Bạn có thể có nó bằng cách cài đặt góibiosdevname

sudo apt-get install biosdevname

Ghi chú

Bạn có thể vô hiệu hóa nó bằng cách sử dụng dòng lệnh kernel trong cấu hình grub:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

và chạy

sudo update-grub

hoặc đơn giản là gỡ cài đặt gói.

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

quy tắc udev

Đây là mặc định trên máy tính để bàn Ubuntu . Các udev quy tắc /lib/udev/rules.d/75-persistent-net-generator.rulestạo ra trong quá trình khởi động một quy tắc tùy chỉnh đầu tiên /etc/udev/rules.d/70-persistent-net.rulesvới địa chỉ MAC của giao diện của bạn để có được tên dai dẳng cho giao diện của bạn.

Ghi chú

Nếu bạn đã sử dụng quy tắc udev, bạn cần xóa /etc/udev/rules.d/70-persistent-net.rulesvà để tránh nó được tạo lại ở mỗi lần khởi động, bạn cần chạy

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

Sau đó, nếu bạn sử dụng systemd , thì bạn cần chọn tham gia cho tên giao diện có thể dự đoán được, như mô tả ở trên.


1
Cảm ơn câu trả lời của bạn. Máy tính của tôi là phiên bản máy chủ, không phải phiên bản máy tính để bàn. Tôi sẽ gửi một chỉnh sửa cho câu trả lời của bạn để đối phó với sự khác biệt (tên sinh học được cài đặt theo mặc định và do đó cần phải được vô hiệu hóa cụ thể thông qua grub). Lỗi trong suy nghĩ của tôi là tôi mong đợi các tên giao diện khác nhau net.ifnames=1biosdevname=0, như được mô tả trong liên kết bạn đưa ra, nhưng tôi nhận được eth0 và eth1 cũ. Dù sao, nó hoạt động cho bất kỳ kernel nào bây giờ (không có /etc/udev/rules.d/70-persistent-net.rules), sau khi tôi chỉnh sửa /etc/network/interfacesđể phản ánh tên giao diện thích hợp.
Doug Smythies

Tôi đang sử dụng máy tính để bàn ubfox 15.10 và tôi không nghĩ udev là mặc định nữa. Các thiết bị mạng của tôi được đặt tên wlp4s0enp0s31f6, và các tệp /etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.ruleskhông tồn tại.
Jonathan Hartley

Trong Ubuntu 16.04 (cụ thể là systemd 220-7 ), 75-persistent-net-generator.rulestệp không được dùng nữa net.ifnames.
200_success

4
  1. Trong Ubuntu Server 16.04LTS, tất cả những gì tôi đã làm là chạy:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Sau đó tạo tập tin bằng cách sử dụng

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

    và thêm vào như sau

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

    :wq lưu tập tin

  3. sau đó khởi động lại và điều chỉnh /etc/network/interfacestập tin của bạn .. sau đó khởi động lại

Hy vọng điều này sẽ giúp ai đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.