Raspberry Pi 3 - eth0 помилково названо "enx ..."


28

Нещодавно мій новий пристрій RPi 3 завантажився деактивованою мережею.

Тож я спостерігав /etc/networks/interfacesі бачив рядок:

auto eth0
iface eth0 inet dhcp

На ifup eth0жаль, дзвінок надіслав таке повідомлення:

eth0 No such device
No hardware found

Тож я перевірив свій ifconfig -aі побачив дивний пристрій:

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

Спроба змінити /etc/networks/interfacesім'я призвела до роботи мережі. Як я можу змінити ім'я цього пристрою назад eth0?

PS: У мене немає 70-persistent-net.rulesфайлів fyi. ОС є Ubuntu MATE 15.10

Спасибі.


Перевірте файл> / etc / iftab Стани шахти: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Відповіді:


16

У мене була ця проблема під час запуску Debian armhf на Raspberry Pi 2, ви можете змінити ім'я інтерфейсу, створивши файл /etc/udev/rules.d/70-persistent-net.rules і помістивши це в

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

замініть b8: ac: 6f: 65: 31: e5 на вашу MAC-адресу eth0, перезавантажте систему і вона стане eth0, можливо, ви не матимете доступу до Інтернету після перезавантаження, оскільки в / etc / network / інтерфейси визначають неправильний інтерфейс, просто змініть enx * до eth0

Редагувати: це не проблема, а нова схема іменування інтерфейсу "Передбачувані імена інтерфейсу", вам слід адаптувати та використовувати це замість того, щоб намагатися повернути його до старих.


3
завдяки @UnSined я дивився далі і знайшов, що я повинен був додати: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Це в основному вимкнення іменування. Працює зараз .. дякую!
Том Сівік

Користувач @Ficertyn зараз ... ясність для щасливих читачів документів з червоного капелюха
Том Сівік

1
Мені довелося видалити KERNEL=="eth*"запис для цього.
Роджер Дуек

23

Це рішення працює лише в тому випадку, якщо ви бачите дивний пристрій мережевого інтерфейсу, як, наприклад, env{hwdaddress}під час $ ifconfig -aроботи eth0. Я спробував усі поширені відповіді щодо додавання правил, але працював лише цей виправлення.

Я запускаю Raspberry Pi 3 з попередньо встановленим сервером arhf Ubuntu 16.04. Довга коротка історія, $ apt-get updateдодані передбачувані імена мережевого інтерфейсу

Редагуйте такий файл:

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

Ви повинні побачити:

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}"

Змініть ім’я в кінці так:

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"

Зберегти зміни

Перезавантажте. Все має працювати зараз, якщо все вказує на eth0.

Редагувати (26.10.2016) Щоб запобігти перезапис цього виправлення будь-яким майбутнім оновленням, виконайте наступне:

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

1
Я витратив далеко, занадто довго намагаючись дістатись до того, щоб мати стійку eth0для мого Pi з Ubuntu Server 16.04. Дякую. Одна невелика модифікація вашої відповіді, яку я б запропонував спробувати, реалізувати, а потім додати до своєї відповіді: Скопіюйте 73-usb-net-by-mac.rulesфайл у /etc/udev/rules.d/каталог та змініть його; якщо ви змінили цей, /lib/udev/rules.dвін може бути перезаписаний у майбутньому оновлення ОС.
Кевін Тельєр

Дякую за голову вгору Я також витратив надійні 2 дні на вирішення проблеми. Я б мав pi все готово йти з Python3 та OpenCV лише для того, щоб Ethernet перестав працювати над перезавантаженням через оновлення. Радий бачити, що моя відповідь корисна.
Луїс Годінес

1
Мені знадобилось певний час, щоб зрозуміти, чому це відбувається, а потім потрібно розібратися, що робити і чому (помилка Ubuntu - виправлення як вчинене, здається, не працює, що є редагуванням того ж файлу). Ось що триває битва: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - Тим НЕ менше, ваше виправлення не з'являється на роботу на моєму Raspberry Pi 2. Я дійсно думав , щоб просто отримати коробку x86 в цей момент.
Кевін Тельєр

13

raspi-config - найпростіший метод.

Якщо ви перебуваєте на Raspbian, він встановлений за замовчуванням. Але якщо ви перебуваєте на Ubuntu, Mint або Mate, тоді ви можете встановити його за допомогою команди нижче:

sudo apt-get install raspi-config

Тоді ви можете зробити його налаштування за допомогою raspi-config.

sudo raspi-config
  1. Виберіть "2. Параметри мережі"
  2. Виберіть "Імена мережевого інтерфейсу N3"
  3. Виберіть "Ні". Зараз вимкнено передбачувані імена мережевого інтерфейсу.
  4. Натисніть «ОК» та «Готово». Тоді він перезапустить ваш малиновий пі.

Зроблено.


1
Чи має Ubuntu Mate (для чого використовується ОП) raspi-config?
Стів Робільярд

Тож ваша відповідь не стосується.
Стів Робіллард

1
Але якщо ви вирішили ту саму проблему з Raspbian, то це питання знайшлося спочатку. Я це зробив і знадобився час для досліджень і знайшов рішення. Я думаю, що це комусь допомагає. Гаразд я редагую відповідь зараз.
Алмас Дусал

1
Мене бентежить бачити, як люди «досліджують», поки відповідь чітко записана у схвалених відповідях. Ubuntu, debian, raspbian все одно. Установка інструменту на Ubuntu Mate також не є проблемою (навіть встановлена ​​за замовчуванням) raspberrypi.stackexchange.com/a/67084/42528 . Однак це відповідь без жодних пояснень, що відбувається за завісою. Хоча вона вирішує проблему, вона відштовхує людей насправді розуміти, що відбувається. Я поставив +1 цьому для всіх лінив там.
Том Сівік

1
Класно! Ця відповідь, безумовно, була найпростішою і вирішила моє питання щодо встановлення як діючої статичної IP-адреси
vinyll

5

Це НЕ "помилка", це "функція", " послідовне іменування мережевих пристроїв ". (Я нічого не бачу в цьому.)

Можливо, існує багато способів "виправити" це, але вони можуть не працювати, якщо апаратне забезпечення буде змінено.

Для відновлення попередньої поведінки до кінця додайте "net.ifnames = 0 biosdevname = 0" cmdline.txt.


Хоча ця функція - це, звичайно, особливість, спосіб її поведінки - це помилка - зокрема, у тому, як udev обробляє пристрої USB Ethernet. Це ігнорує net.ifnames=0. Я не вірю, що комусь потрібно слідкувати за дискусіями з повідомленнями про помилки, щоб популярна ОС працювала із загальною апаратною конфігурацією, але це життя. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Кевін Тельєр

@KevinTeljeur і мій коментар був сарказмом - це поширена проблема комп'ютерних систем.
Міллівей

Ха-ха, вибачте - після стількох годин, а потім, виявивши, що це тихо задокументована помилка, я не можу знайти жодного послідовного мережевого пристрою, що називає сарказм. Я підбирав ваші лапки, але додавання цих магічних закликів у config.txtсправжньому не працює на Pi як документально підтверджена помилка (можливо, зараз із випуском останнього збірника udev це нарешті є). Це напрочуд невідома помилка, яка впливає на всі системи з Ethernet на USB.
Кевін Тельєр

4

Я не стикався з ним конкретно з адресою mac як частиною імені, однак те, що ви відчуваєте, називається послідовним іменем мережевих пристроїв.

Це було внесено до змін, оскільки це можливо, а можливо, навіть у деяких системах, які мають декілька мережевих карт, можливо, що карти вийшли з ладу та використовуючи схему іменування eth0, eth1 тощо, ви в кінцевому підсумку застосували правила маршрутизації та інше до неправильного інтерфейсу.

Багато дистрибутивів Linux перейшли на якусь послідовну назву мережевих пристроїв, зазвичай це буде виглядати приблизно так enp0s1, ідентифікуючи шину PCI та точку приєднання до шини (0 та 1 відповідно).

Додаткову інформацію можна отримати за посиланням https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , а також про те, як змінити систему на старий спосіб роботи речі, якщо ви все ще хочете це зробити.


1
Хоча це інформаційний коментар, він не допоміг вирішити проблему, а також не відповів на це питання (прочитайте відповідь вручну). Однак це допомогло знайти невелике виправлення рішення вище. саме тому upvote заробив і подяку :)
Том Сівік



1

Створення цього файлу odroid вирішило мою проблему

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

У мене був той самий випуск на Raspberry Pi 2 з Ubuntu 16.04, і те, що працювало, було за посиланням #goutam та додаванням /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

Я знайшов цю пропозицію тут :

Змініть один рядок у 70-стійких-net.rules на

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

який видаляє атрибут KERNEL і змінює ІМ'Я з = на: =

Здається, примушують будь-яку MAC-адресу знайти до eth0. Працює над Raspberry Pi та системами завантаження uboot.


0

Для мене, запустивши Debian Unstable на Raspberry Pi 2, симпосилання, згадане в коментарі до першої відповіді, теж було правильною ідеєю, але його назва повинна бути іншою: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


Ні, ви вказали це ім'я файлу, але інше у вашому коментарі, тому я посилався на цей коментар і згадував, що він повинен бути для мене іншим ім'ям файлу.
Аксель Беккерт

1
Розумію. Зверніть увагу на різницю між малиною пі 3 та малиною пі 2. Навіть якщо вони технічно майже однакові, ця різниця у назві може стати однією з тих речей, які вводять людей в оману. Дякую за роз’яснення, хоча.
Том Сівік

Я припускаю, що ця різниця у назвах файлів походить від Debian 8 Jessie vs Debian Unstable з новою версією systemd / udev. Дійсна назва інтерфейсу без цього символьного посилання справді може відрізнятися від просто MAC-адреси. Але, принаймні, для інтерфейсу Ethernet, я думаю, що я пам’ятаю, що бачив ці enxімена інтерфейсів як на Raspi 2, так і на 3. Я, хоча зараз не можу згадати, як інтерфейс WLAN був названий на Raspi 3.
Axel

enx <MAC>, використовував Ubuntu Mate, виправлена ​​проблема, як показано вище. Перейшов на Debian і не потрібно було робити перейменування. Дивно, хоча ... ти маєш рацію.
Том Сівік

0

просто деактивуйте правила udev, відповідальні за процес перейменування інтерфейсу, тобто

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

або

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

EDIT: thx @ sparkie за виклад помилки. Я завжди змішую замовлення. :)


перша згадана команда не може працювати. Принаймні, src і dst змішані.
sparkie

0

Я розумію, що це питання давнє, але я потрапив у цю проблему, і жодне із запропонованих до цього часу рішень не вирішило мого питання. Для мене, напевно, хитрість папок Rules.d, здається, нічого не робить.

Моє рішення полягало в тому, щоб просто написати сценарій, який знаходиться у папці init.d, щоб призначити DHCP порту провідного Ethernet незалежно від назви. Це важливо, тому що у мене є кілька підрозділів Raspberry Pi, і всі вони зіткнулися з цим самим питанням. (дуже засмучує)

Моя проблема ускладнена, оскільки у мене є папка мережевого зберігання, яку потрібно встановити під час завантаження. Оскільки інтерфейс не з'явився, це кріплення не вдалося, і для мене все просто пішло від поганого до гіршого.

Ось моє рішення. Я сподіваюся, що це допоможе всім, хто не може знайти приєднання, використовуючи наведені вище відповіді.

Створіть файл /etc/init.d/raspi-init-network за допомогою улюбленого текстового редактора. Мені подобається використовувати vi.

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

Це код, який належить до файлу

#!/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

Переконайтеся, що сценарій виконується

sudo chmod 755 raspi-init-network

Активуйте код, щоб він виконувався під час процесу завантаження, виконавши команду update-rc.d.

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

Після цього у мене не було жодного випуску, і мені вдалося скопіювати код на всі мої Pi-одиниці з однаковими стійкими результатами.

ПРИМІТКА. Якщо ви не монтуєте диски, ви можете залишити рядок "mount -a".

ДВА ТЕКУ: Якщо ви користуєтесь своїм Wi-Fi, ви можете змінити рядок, що починається з "interface =", і відредагувати перший сегмент "grep". Цей перший греп захоплює весь рядок інтерфейсу, який ви хочете використовувати. Другий греп приймає цей рядок і повертає лише ім'я інтерфейсу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.