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文件。操作系统是Ubuntu MATE 15.10

谢谢。


请检查文件> / etc / iftab矿山状态:enxb827 .... mac xx:xx:xx:xx:xx:xx arp 1 wlan0 mac xx:xx:xx:xx:xx:xx:xx arp 1

Answers:


16

在Raspberry Pi 2上运行Debian armhf时确实出现了此问题,您可以通过创建文件/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"

用您的eth0 MAC地址替换b8:ac:6f:65:31:e5,重新启动,它将变成eth0,重新启动后您可能无法访问Internet,因为在/ etc / network / interfaces中定义了错误的接口,只需更改enx *eth0

编辑:这不是问题,而是新的接口命名方案“可预测的接口名称”,您应该适应并使用它,而不是尝试将其还原为旧的接口。


3
感谢@UnSined,我进一步查找并发现必须添加:ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules。基本上是在禁用事物名称。现在工作..谢谢!
Tom Siwik '16

用户是@Ficertyn现在......清晰的红帽文档的快乐读者
汤姆Siwik

1
我必须删除该KERNEL=="eth*"条目才能正常工作。
Roger Dueck

23

仅当您看到像env{hwdaddress}运行时这样的奇怪网络接口设备$ ifconfig -a而不是时,此解决方案才有效eth0。我尝试了有关添加规则的所有常见答案,但只有此修复程序有效。

我正在运行预装了Ubuntu 16.04服务器armhf的Raspberry Pi 3。长话短说,正在运行$ 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,现在一切都应该正常工作。

编辑(10/26/2016) 为防止将来有任何更新覆盖此修复程序,请执行以下操作:

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

1
我花了很长的时间来尝试使eth0带有Ubuntu Server 16.04的Pi 稳定下来。谢谢。对您的答案进行一个小的修改,我建议您尝试,实施然后添加到答案中:将73-usb-net-by-mac.rules文件复制到/etc/udev/rules.d/目录并对其进行修改;如果您更改了它,/lib/udev/rules.d则它可能会在以后的操作系统更新中被覆盖。
凯文·泰勒

感谢您的注意。我还花了整整2天的时间对问题进行故障排除。我将pi全部设置为与Python3和OpenCV一起使用,只是因为更新导致以太网在重启时停止工作。很高兴看到我的回答有用。
Luis Godinez '16

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(OP正在使用)是否具有raspi-config?
史蒂夫·罗比拉德

因此,您的答案不适用。
史蒂夫·罗比拉德

1
但是,如果您用Raspbian搜索相同的问题,则首先发现此问题。我这样做了,花了一些时间进行研究并找到解决方案。我认为这会有所帮助。好的,我现在编辑答案。
Almas Dusal '18

1
看到人们在“研究”,而答案却清楚地写在批准的答案中,这使我感到困惑。Ubuntu,debian,raspbian都一样。在Ubuntu Mate上安装该工具也没有问题(即使默认情况下也已安装)raspberrypi.stackexchange.com/a/67084/42528。但是,这是一个答案,没有任何解释。在解决问题的同时,它却使人们不敢真正了解正在发生的事情。我会为那里所有的懒惰者+1。
汤姆·西维克

1
凉!此答案绝对是最简单的方法,解决了我将其设置为工作静态IP地址的问题
Vinyl

5

这不是“ bug”,而是“功能”“ 一致的网络设备命名 ”。(我看不出有任何不一致的地方。)

可能有很多“修复”此问题的方法,但是如果更改了硬件,它们可能无法工作。

要恢复以前的行为,请在末尾添加“ net.ifnames = 0 biosdevname = 0” cmdline.txt


尽管该功能很好,但是它的行为方式是一个错误-特别是udev如何处理USB以太网设备。它无视net.ifnames=0。我不认为任何人都应该关注bug报告讨论以使流行的OS与通用的硬件配置一起工作,但这就是生活。bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur

@KevinTeljeur,我的评论很讽刺 -这是计算机系统上的常见问题。
Milliways '16

哈哈,对不起-经过这么多小时的浪费,然后发现它是一个静默记录的错误,我无法接受任何一致的网络设备命名嘲讽。我确实接过您的引号,但是在config.txtPi上添加这些魔咒的确没有作为记录的bug起作用(也许现在有了最新的udev构建,它终于可以了)。这是一个令人惊讶的未知错误,它会影响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
尽管这是一个有用的评论,但它无助于解决问题,也没有回答问题(请阅读手册的答案)。但是,它有助于找到上述解决方案的较小解决方案。这就是为什么赢得
投票



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

我在具有Ubuntu 16.04的Raspberry Pi 2上遇到了相同的问题,有效的方法是跟随#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引导系统上工作。


0

对我来说,在Raspberry Pi 2上运行Debian Unstable,注释中提到的第一个答案的符号链接也是正确的主意,但其名称必须不同: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


不,您确实提到了该文件名,但是注释中使用了另一个文件名,这就是为什么我提到该注释并提到它对我来说必须是一个不同的文件名。
Axel Beckert

1
我懂了。请注意raspberry pi 3和raspberry pi 2之间的差异。尽管它们在技术上几乎相同,但这种命名差异可能是误导人们的原因之一。不过感谢您的澄清。
Tom Siwik '16

我认为文件名的这种差异来自Debian 8 Jessie与Debian Unstable以及较新的systemd / udev版本。实际上,没有此符号链接的接口的实际名称可能确实比仅MAC地址有所不同。但至少对于以太网接口,我想我还记得在看到这enx两个接口名,Raspi 2和3。我虽然现在不记得WLAN接口是如何命名的Raspi 3
阿克塞尔贝克特

enx <MAC>,使用的是Ubuntu Mate,已修复如上所示的问题。切换到Debian,不必重命名。不过这很奇怪...您是对的。
Tom Siwik '16

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指出错误。我总是把订单弄混。:)


第一个提到的命令不起作用。至少src和dst混合在一起。
sparkie

0

我意识到这个问题很旧,但是我遇到了这个问题,到目前为止,本页上没有提出的解决方案能够解决我的问题。对我而言,rules.d文件夹技巧似乎没有任何作用。

我的解决方案是简单地编写一个位于init.d文件夹中的脚本,以将DHCP分配给有线以太网端口,而不管其名称如何。这很重要,因为我有几个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:如果您使用的是wifi,则可以更改以“ interface =”开头的行,并编辑第一个“ grep”段。第一个grep抓取您要使用的界面的整个行。第二个grep接受该行,仅返回接口名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.