Raspberry Pi 3 - eth0 ошибочно назван «enx…»

28

Мое новое устройство RPi 3 (yay) недавно загрузилось с деактивированной сетью Ethernet.

Итак, я посмотрел /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файлов. ОС 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 / interfaces определяется неправильный интерфейс, просто измените enx * к eth0

Редактировать: это не проблема, а новая схема именования интерфейсов «Предсказуемые имена интерфейсов», вы должны адаптировать ее и использовать вместо того, чтобы пытаться вернуть ее к старым.

SandPox
источник
3
благодаря @UnSined я смотрел дальше и нашел, что я должен был добавить: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Это в основном отключение именования. Работает сейчас .. спасибо!
Том Сивик
Пользователь @Ficertyn сейчас ... ясность для счастливых читателей документации по
Red Hat
1
Я должен был удалить KERNEL=="eth*"запись для этого, чтобы работать.
Роджер Дуек
23

Это решение работает только в том случае, если вы видите странное устройство сетевого интерфейса, например, env{hwdaddress}при запуске $ ifconfig -aвместо eth0. Я попробовал все распространенные ответы о добавлении правил, но сработало только это исправление.

Я использую Raspberry Pi 3 с предустановленным сервером Ubuntu 16.04 armhf. Короче говоря, запущены $ 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

Распи-конфиг это самый простой способ.

Если вы используете Raspbian, то он установлен по умолчанию. Но если вы работаете в Ubuntu, Mint или Mate, вы можете установить его командой ниже:

sudo apt-get install raspi-config

Затем вы можете настроить его с помощью raspi-config.

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

Выполнено.

Алмас Дусал
источник
1
Есть ли в Ubuntu Mate (который использует OP) raspi-config?
Стив Робиллард
Так что ваш ответ не относится.
Стив Робиллард
1
Но если вы погуглили ту же проблему с Распбианом, то этот вопрос был найден первым. Я сделал это и занял время для исследования и нашел решение. Я думаю, что это помогает кому-то. ОК, я редактирую ответ сейчас.
Алмас Дусал
1
Меня смущает то, что люди «исследуют», а ответ четко прописан в утвержденных ответах. Убунту, дебиан, распбиан все таки. Установка инструмента на Ubuntu Mate также не является проблемой (даже установлена ​​по умолчанию) raspberrypi.stackexchange.com/a/67084/42528 . Однако это ответ без объяснения того, что происходит за кулисами. Хотя он решает проблему, он не дает людям по-настоящему понять, что происходит. Я +1 это для всех ленивых там, хотя.
Том Сивик
1
Круто! Этот ответ был определенно самым простым и решил мою проблему,
указав
5

Это НЕ «ошибка», это «особенность» « согласованное именование сетевых устройств ». (Я не вижу ничего последовательного в этом.)

Есть, вероятно, много способов «исправить» это, но они могут не работать, если меняется оборудование.

Чтобы восстановить предыдущее поведение, добавьте "net.ifnames = 0 biosdevname = 0" в конец cmdline.txt.

Milliways
источник
Хотя эта функция, в общем-то, является функцией, ее поведение является ошибкой, особенно в том, как 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 , а также о том, как изменить свою систему на старый способ работы вещи, если вы все еще хотите сделать это.

Ficertyn
источник
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-persistent-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 и изменяет NAME с = на: =

Кажется, он принудительно устанавливает любой найденный MAC-адрес в eth0 Работает на Raspberry Pi и загрузочных системах Uboot.

user855443
источник
0

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

Аксель Бекерт
источник
Нет, вы упомянули это имя файла, но другое в вашем комментарии, поэтому я сослался на этот комментарий и упомянул, что это должно быть другое имя файла для меня.
Аксель Бекерт,
1
Понимаю. Обратите внимание на разницу между raspberry pi 3 и raspberry pi 2. Несмотря на то, что они технически почти одинаковы, эта разница в наименовании может быть одной из тех, которые вводят людей в заблуждение. Спасибо за разъяснения, хотя.
Том Сивик
Я предполагаю, что это различие в именах файлов происходит от Debian 8 Jessie против Debian Unstable с более новой версией systemd / udev. Фактическое имя интерфейса без этой символической ссылки действительно может отличаться от MAC-адреса. Но, по крайней мере, для интерфейса Ethernet, я помню, что видел эти enxимена интерфейсов на Raspi 2 и 3. Я в настоящее время не могу вспомнить, как интерфейс WLAN был назван на Raspi 3.
Аксель Бекерт,
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

РЕДАКТИРОВАТЬ: thx @ sparkie за выявление ошибки. Я всегда путаю заказ. :)

DarwinsBuddy
источник
Первая упомянутая команда не может работать. По крайней мере src и dst перепутаны.
Спарка
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».

TWEAKS: Если вы используете свой Wi-Fi, вы можете изменить строку, которая начинается с «interface =», и отредактировать первый сегмент «grep». Этот первый grep захватывает всю строку интерфейса, который вы хотите использовать. Второй grep берет эту строку и возвращает только имя интерфейса.

Гленн Дж. Шворак
источник