Raspberry Pi 3 - eth0 được đặt tên sai là 'enx Sự'


28

Thiết bị RPi 3 mới của tôi (yay) gần đây đã khởi động với ethernet bị vô hiệu hóa.

Vì vậy, tôi đã xem /etc/networks/interfacesvà thấy dòng:

auto eth0
iface eth0 inet dhcp

Gọi ifup eth0không may đã đưa ra thông báo sau:

eth0 No such device
No hardware found

Vì vậy, tôi đã kiểm tra ifconfig -avà thấy một thiết bị lạ:

enx*MACADDRESS* Link encap:Ethernet HWaddr **:**:**:**:**:**

Cố gắng thay đổi /etc/networks/interfacesthành tên dẫn đến một mạng làm việc. Làm thế nào tôi có thể thay đổi tên thiết bị trở lại eth0?

PS: tôi không có 70-persistent-net.rulestập tin fyi. HĐH là Ubuntu MATE 15.10

Cảm ơn.


Vui lòng kiểm tra tập tin> / etc / iftab bang Mine: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Câu trả lời:


16

Tôi đã gặp vấn đề này khi chạy Debian armhf trên Raspberry Pi 2, bạn có thể thay đổi tên giao diện bằng cách tạo tệp /etc/udev/rules.d/70-persistent-net.rules và đặt nó vào

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:ac:6f:65:31:e5", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

thay thế b8: ac: 6f: 65: 31: e5 bằng địa chỉ MAC eth0 của bạn, khởi động lại và nó sẽ trở thành eth0, bạn có thể không có quyền truy cập internet sau khi khởi động lại vì trong / etc / mạng / giao diện đang xác định giao diện sai, chỉ cần thay đổi enx * đến eth0

Chỉnh sửa: Đây không phải là một vấn đề mà là sơ đồ đặt tên giao diện mới "Tên giao diện có thể dự đoán", bạn nên điều chỉnh và sử dụng nó thay vì cố gắng hoàn nguyên nó về giao diện cũ.


3
cảm ơn @UnSined tôi đã tìm kiếm thêm và thấy rằng tôi phải thêm : ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Về cơ bản, nó vô hiệu hóa việc đặt tên. Hoạt động ngay bây giờ .. cảm ơn!
Tom Siwik 30/03/2016

Người dùng là @Ficertyn ngay bây giờ ... sự rõ ràng cho độc giả hạnh phúc về tài liệu mũ đỏ
Tom Siwik

1
Tôi đã phải loại bỏ các KERNEL=="eth*"mục để làm việc này.
Roger Dueck

23

Giải pháp này chỉ hoạt động nếu bạn thấy một thiết bị giao diện mạng kỳ lạ như env{hwdaddress}khi chạy $ ifconfig -athay vì eth0. Tôi đã thử tất cả các câu trả lời phổ biến về việc thêm quy tắc nhưng chỉ sửa lỗi này hoạt động.

Tôi đang chạy Raspberry Pi 3 với Ubuntu 16.04 cài đặt sẵn máy chủ armhf. Câu chuyện dài, chạy $ apt-get updatethêm Tên giao diện mạng có thể dự đoán

Chỉnh sửa tập tin sau:

$ vim /lib/udev/rules.d/73-usb-net-by-mac.rules

Bạn nên thấy:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
ATTR{address}=="?[014589cd]:*", \
TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}"

Thay đổi NAME ở cuối như sau:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
ATTR{address}=="?[014589cd]:*", \
TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
IMPORT{builtin}="net_id", NAME="eth0"

Lưu thay đổi

Khởi động lại. Bây giờ mọi thứ nên hoạt động với giả định mọi thứ đều trỏ đến eth0.

Chỉnh sửa (26/10/2016) Để ngăn mọi bản cập nhật trong tương lai ghi đè bản sửa lỗi này, hãy làm như sau:

cp /lib/udev/rules.d/73-usb-net-by-mac.rules /etc/udev/rules.d/

1
Tôi đã dành rất nhiều thời gian để cố gắng đạt đến mức ổn định eth0cho Pi của mình với Ubuntu Server 16.04. Cảm ơn bạn. Một sửa đổi nhỏ cho câu trả lời của bạn, mà tôi khuyên bạn nên thử, thực hiện và sau đó thêm vào câu trả lời của bạn: Sao chép 73-usb-net-by-mac.rulestệp vào /etc/udev/rules.d/thư mục và sửa đổi câu hỏi đó; nếu bạn thay đổi cái /lib/udev/rules.dđó thì nó có thể bị ghi đè trong bản cập nhật hệ điều hành trong tương lai.
Kevin Teljeur

Cảm ơn cho những người đứng đầu lên. Tôi cũng đã dành 2 ngày để khắc phục sự cố. Tôi sẽ cài đặt pi hoàn toàn với Python3 và OpenCV để Ethernet ngừng hoạt động khi khởi động lại vì cập nhật. Vui mừng khi thấy câu trả lời của tôi là một số sử dụng.
Luis Godinez

1
Tôi phải mất một thời gian để tìm hiểu tại sao nó lại xảy ra, và sau đó cần phải tìm ra phải làm gì và tại sao (lỗi Ubuntu - bản sửa lỗi như đã cam kết dường như không hoạt động, đó là một chỉnh sửa cho cùng một tệp). Đây là trận chiến đang diễn ra: bug.launchpad.net/ubfox/+source/systemd/+orms/1593379 - Tuy nhiên, bản sửa lỗi của bạn dường như không hoạt động trên Raspberry Pi 2. Tôi thực sự nghĩ rằng chỉ cần lấy một hộp x86 tại điểm này.
Kevin Teljeur

13

raspi-config là phương pháp dễ nhất.

Nếu bạn đang sử dụng Raspbian thì nó được cài đặt theo mặc định. Nhưng nếu bạn đang dùng Ubuntu, Mint hoặc Mate thì bạn có thể cài đặt nó bằng lệnh bên dưới:

sudo apt-get install raspi-config

Sau đó, bạn có thể cấu hình nó với raspi-config.

sudo raspi-config
  1. Chọn "2. Tùy chọn mạng"
  2. Chọn "Tên giao diện mạng N3"
  3. Chọn "Không". Bây giờ nó bị vô hiệu hóa tên giao diện mạng dự đoán.
  4. Nhấp vào "OK" và "Kết thúc". Sau đó, nó sẽ khởi động lại pi mâm xôi của bạn.

Làm xong.


1
Ubuntu Mate (đó là những gì OP đang sử dụng) có raspi-config không?
Steve Robillard

Vì vậy, câu trả lời của bạn không áp dụng.
Steve Robillard

1
Nhưng nếu bạn gặp vấn đề tương tự với Raspbian thì câu hỏi này được tìm thấy đầu tiên. Tôi đã làm điều đó và mất thời gian cho nghiên cứu và tìm ra giải pháp. Tôi nghĩ rằng nó giúp một số người. OK tôi chỉnh sửa câu trả lời ngay bây giờ.
Almas Dusal

1
Tôi bối rối khi thấy mọi người "nghiên cứu" trong khi câu trả lời được viết rõ ràng trong các câu trả lời được phê duyệt. Ubuntu, debian, raspbian đều giống nhau. Cài đặt công cụ trên Ubuntu Mate cũng không có vấn đề gì (thậm chí được cài đặt theo mặc định) raspberrypi.stackexchange.com/a/67084/42528 . Tuy nhiên đây là một câu trả lời mà không có bất kỳ lời giải thích nào đang xảy ra đằng sau bức màn. Trong khi nó giải quyết vấn đề, nó không khuyến khích mọi người thực sự hiểu chuyện gì đang xảy ra. Tôi sẽ +1 cái này cho tất cả những kẻ lười biếng ngoài kia.
Tom Siwik

1
Mát mẻ! Câu trả lời này chắc chắn là dễ nhất và đã giải quyết được vấn đề của tôi khi thiết lập làm địa chỉ IP tĩnh hoạt động
vinyll

5

Đây KHÔNG phải là "lỗi", đó là "tính năng" " đặt tên thiết bị mạng nhất quán ". (Tôi không thấy bất cứ điều gì nhất quán về nó.)

Có thể có nhiều cách để "sửa" cái này, nhưng chúng có thể không hoạt động nếu phần cứng bị thay đổi.

Để khôi phục hành vi trước đó, hãy thêm "net.ifnames = 0 biosdevname = 0" vào cuối cmdline.txt.


Mặc dù tính năng này là một tính năng, cách thức hoạt động của nó là một lỗi - cụ thể là cách udev xử lý các thiết bị ethernet USB. Nó mặc kệ net.ifnames=0. Tôi không tin rằng bất kỳ ai cũng cần theo dõi các cuộc thảo luận báo cáo lỗi để làm cho một hệ điều hành phổ biến hoạt động với cấu hình phần cứng phổ biến, nhưng đó là cuộc sống. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur

@KevinTeljeur và nhận xét của tôi là mỉa mai - đây là một vấn đề phổ biến trên các hệ thống máy tính.
Milliways

Ha ha, xin lỗi - sau rất nhiều giờ lãng phí, và sau đó phát hiện ra rằng đó là một lỗi được ghi lại một cách lặng lẽ, tôi không thể nhận ra bất kỳ sự mỉa mai nào đặt tên cho thiết bị mạng nhất quán. Tôi đã nhận được dấu ngoặc kép của bạn, nhưng việc thêm các câu thần chú đó config.txtthực sự không hoạt động trên Pi như một lỗi tài liệu (có thể bây giờ với việc phát hành bản dựng udev mới nhất cuối cùng cũng có). Đây là một lỗi đáng ngạc nhiên không biết có ảnh hưởng đến tất cả các hệ thống có ethernet trên USB.
Kevin Teljeur

4

Tôi chưa gặp phải địa chỉ mac cụ thể như một phần của tên, tuy nhiên những gì bạn gặp phải được gọi là đặt tên thiết bị mạng nhất quán.

Đây là một thay đổi được thực hiện bởi vì nó có thể, và thậm chí có thể xảy ra trên một số hệ thống có nhiều card mạng mà các thẻ sẽ không theo thứ tự và sử dụng lược đồ đặt tên eth0, eth1, v.v. bạn sẽ kết thúc việc áp dụng quy tắc định tuyến và không có gì đến giao diện sai.

Nhiều bản phân phối Linux đã chuyển sang một số loại đặt tên thiết bị mạng nhất quán, thông thường, nó sẽ trông giống như enp0s1, xác định bus PCI và điểm đính kèm với bus (tương ứng 0 và 1).

Bạn có thể nhận được thêm thông tin từ https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , cũng như làm thế nào để thay đổi hệ thống của bạn để theo cách cũ làm những điều nếu bạn vẫn muốn làm như vậy.


1
mặc dù đây là một nhận xét thông tin, nó không giúp giải quyết vấn đề và nó cũng không trả lời câu hỏi (đọc loại câu trả lời thủ công). Tuy nhiên, nó đã giúp tìm ra một sửa chữa nhỏ cho giải pháp trên. Đó là lý do phiếu bầu tán thành đạt và cảm ơn bạn :)
Tom Siwik



1

Với odroid tạo tập tin này đã khắc phục vấn đề của tôi

root@odroid:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"

1

Tôi gặp vấn đề tương tự trên Raspberry Pi 2 với Ubuntu 16.04 và những gì đã hoạt động là theo liên kết từ #goutam và thêm /etc/udev/rules.d/70-persistent-net.rules với nội dung sau:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"

1

Tôi tìm thấy gợi ý này ở đây :

Thay đổi một dòng trong 70-kiên trì-net.rules thành

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="98:90:96:e0:3c:e9", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME:="eth0"

đang bỏ thuộc tính KernEL và thay đổi NAME từ = thành: =

Dường như bắt buộc bất cứ địa chỉ MAC nào được tìm thấy là eth0. Hoạt động trên Raspberry Pi và hệ thống khởi động uboot.


0

Đối với tôi, chạy Debian Un Ổn định trên Raspberry Pi 2, liên kết tượng trưng được đề cập trong nhận xét cho câu trả lời đầu tiên cũng là ý tưởng đúng, nhưng tên của nó phải khác: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


Không, bạn đã đề cập đến tên tệp này nhưng một tên khác trong bình luận của bạn, đó là lý do tại sao tôi đề cập đến nhận xét đó và đề cập rằng nó phải là một tên tệp khác cho tôi.
Axel Beckert

1
Tôi hiểu rồi. Xin lưu ý sự khác biệt giữa mâm xôi pi 3 và mâm xôi pi 2. Mặc dù về mặt kỹ thuật chúng gần giống nhau, sự khác biệt về cách đặt tên này có thể là một trong những điều khiến mọi người hiểu lầm. Cảm ơn đã làm rõ mặc dù.
Tom Siwik

Tôi giả sử sự khác biệt này trong tên tệp đến từ Debian 8 Jessie so với Debian Không ổn định với phiên bản systemd / udev mới hơn. Tên thực tế của giao diện không có liên kết tượng trưng này thực sự có thể khác hơn so với chỉ địa chỉ MAC. Nhưng ít nhất là đối với giao diện ethernet, tôi nghĩ rằng tôi nhớ đã thấy các enxtên giao diện này trên cả hai, Raspi 2 và 3. Mặc dù hiện tại tôi không thể nhớ giao diện WLAN được đặt tên trên Raspi 3.
Axel Beckert

enx <MAC>, đã sử dụng Ubuntu Mate, đã khắc phục sự cố như được hiển thị ở trên. Chuyển sang Debian và không phải đổi tên. Mặc dù điều đó thật kỳ lạ ... bạn đã đúng.
Tom Siwik

0

chỉ cần hủy kích hoạt các quy tắc udev chịu trách nhiệm cho quá trình đổi tên giao diện, nghĩa là

sudo ln -s /dev/null /etc/udev/rules.d/73-usb-net-by-mac.rules

hoặc là

sudo touch /etc/udev/rules.d/73-usb-net-by-mac.rules

EDIT: thx @ sparkie vì đã viết ra một lỗi. Tôi luôn luôn trộn lẫn thứ tự. :)


lệnh được đề cập đầu tiên không thể làm việc. Ít nhất src và dst được trộn lẫn.
Sparkie

0

Tôi nhận ra rằng câu hỏi này đã cũ nhưng tôi đã gặp phải vấn đề này và không có giải pháp nào được đề xuất cho đến nay trên trang này đã giải quyết được vấn đề của tôi. Đối với tôi, thủ thuật thư mục Rules.d dường như không làm gì cả.

Giải pháp của tôi là chỉ cần viết một tập lệnh đi vào thư mục init.d để gán DHCP cho cổng ethernet có dây bất kể tên là gì. Điều này rất quan trọng vì tôi có một số đơn vị Raspberry Pi và tất cả chúng đều gặp vấn đề tương tự. (rất bực bội)

Vấn đề của tôi là phức tạp vì tôi có một thư mục lưu trữ mạng cần được gắn trong quá trình khởi động. Bởi vì giao diện không xuất hiện, việc gắn kết này thất bại và mọi thứ trở nên tồi tệ hơn với tôi.

Đây là giải pháp của tôi. Tôi hy vọng điều này sẽ giúp bất kỳ ai khác không thể tìm thấy tham gia bằng cách sử dụng các câu trả lời ở trên.

Tạo tệp /etc/init.d/raspi-init-network bằng trình soạn thảo văn bản yêu thích của bạn. Tôi thích sử dụng vi.

cd /etc/init.d
sudo vi raspi-init-network

Đây là mã thuộc về tập tin

#!/bin/sh
### BEGIN INIT INFO
# Provides:          boot-identify-myself
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: identify-myself
# Description:       identify this computer to the main server upon
### END INIT INFO
#
# when using predictible network names for the interfaces,
# the pi doesn't seem to activate the interface correctly so
# this script will force the issue.
#
# it works by getting the interface name of the wired network
# device and using that to initialize dhcp

start() 
{
    interface=`ifconfig -a | grep "encap:Ethernet" | grep -oh -E "^[^ ]+"`
    dhclient $interface
    mount -a
}

stop() 
{
    : # do nothing
}

uninstall() 
{
    : # do nothing
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  uninstall)
    uninstall
    ;;
  retart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|uninstall}"
esac

Hãy chắc chắn rằng tập lệnh có thể thực thi được

sudo chmod 755 raspi-init-network

Kích hoạt mã để nó sẽ thực thi trong quá trình khởi động bằng cách thực hiện lệnh update-rc.d.

sudo update-rc.d raspi-init-network defaults 90

Sau này, tôi không gặp vấn đề gì và tôi có thể sao chép mã vào tất cả các đơn vị Pi của mình với cùng kết quả ổn định.

GHI CHÚ: Nếu bạn không lắp ổ đĩa, bạn có thể bỏ dòng "mount -a".

TWEAKS: Nếu bạn đang sử dụng wifi, bạn có thể thay đổi dòng bắt đầu "interface =" và chỉnh sửa phân đoạn "grep" đầu tiên. Grep đầu tiên này lấy toàn bộ dòng giao diện bạn muốn sử dụng. Grep thứ hai lấy dòng đó và chỉ trả về tên giao diện.

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.