라즈베리 파이 3-eth0 이름이 'enx…'로 잘못 지정됨


28

최근에 새로운 RPi 3 장치 (yay)가 비활성화 된 이더넷으로 부팅되었습니다.

그래서 나는 /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어떻게 다시 변경할 수 있습니까?

추신 : 나는 70-persistent-net.rules파일 이 없습니다 . OS는 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

나는 라즈베리 파이 2 데비안 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"

대체 교류 : 6 층 : 65 : B8 31 : E5 하고 eth0를하게됩니다 eth0를 MAC 주소, 재부팅, 당신은 부팅 후 인터넷 접속이되지 않을 수 있습니다은 / etc / 네트워크 / 인터페이스가 잘못된 인터페이스를 정의하고, 단지 변화에 때문에 enx *eth0를

편집 : 이것은 문제가 아니라 새로운 인터페이스 명명 체계 "예상 가능한 인터페이스 이름"입니다. 이전 인터페이스로 되 돌리는 대신 이것을 사용하여 사용해야합니다.


3
@UnSined 덕분에 더 자세히 보았고 추가해야한다는 것을 알았습니다 ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. 기본적으로 이름 지정 기능을 비활성화합니다. 지금 작동합니다. 감사합니다!
Tom Siwik

사용자는 빨간 모자 문서의 행복 독자 @Ficertyn 지금 ... 명확하다
톰 Siwik

1
KERNEL=="eth*"이것이 작동 하려면 항목 을 제거 해야했습니다.
로저 듀크

23

이 솔루션은 대신 env{hwdaddress}실행시 와 같은 이상한 네트워크 인터페이스 장치가 표시되는 경우에만 작동합니다 . 규칙 추가에 대한 모든 일반적인 답변을 시도했지만이 수정 프로그램 만 작동했습니다.$ ifconfig -aeth0

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

다음과 같이 끝에 NAME을 변경하십시오.

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을 가리키고 있다고 가정하면 모든 것이 작동해야합니다.

편집 (2016 년 10 월 26 일) 향후 업데이트가이 수정 프로그램을 덮어 쓰지 못하게하려면 다음을 수행하십시오.

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

1
eth0Ubuntu Server 16.04를 사용하여 Pi를 안정적으로 유지하는 데까지 너무 오래 걸렸습니다. 고맙습니다. 답을 한 번만 수정하면 답을 시도하고 구현 한 다음 추가합니다. 73-usb-net-by-mac.rules파일을 /etc/udev/rules.d/디렉토리에 복사 하고 수정하십시오. 변경하면 /lib/udev/rules.d향후 OS 업데이트에서 덮어 쓰기 될 수 있습니다.
Kevin Teljeur

고마워요 또한 문제를 해결하기 위해 2 일 동안 보냈습니다. 업데이트로 인해 재부팅시 이더넷 작동이 중지되도록 pi3을 Python3 및 OpenCV와 함께 사용하도록 설정했습니다. 내 대답이 약간 유용하다는 것을 알게되어 기쁩니다.
Luis Godinez

1
왜 그런 일이 일어 났는지, 그리고 무엇을해야하는지, 왜 무엇을해야하는지 알아내는 데 시간이 걸렸습니다. (Ubuntu 버그-커밋 된 수정 프로그램이 작동하지 않는 것 같습니다. 동일한 파일을 편집 한 것입니다). 진행중인 전투는 다음과 같습니다. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379- 하지만 내 Raspberry Pi 2에서는 문제가 해결되지 않는 것 같습니다. x86 상자를 얻으려고 생각하고 있습니다. 이 지점에서.
Kevin Teljeur

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가 있습니까?
Steve Robillard

따라서 귀하의 답변은 적용되지 않습니다.
Steve Robillard

1
그러나 Raspbian과 동일한 문제를 봤다면이 질문이 먼저 발견되었습니다. 나는 그것을하고 연구에 시간이 걸리고 해결책을 찾았습니다. 나는 그것이 도움이 될 것이라고 생각합니다. 확인 답변을 편집하십시오.
Almas Dusal

1
답변이 승인 된 답변에 명확하게 쓰여지는 동안 사람들이 "연구"하는 것을 보는 것은 혼란스러워합니다. 우분투, 데비안, 라스베리 안 모두 동일합니다. Ubuntu Mate에 도구를 설치해도 raspberrypi.stackexchange.com/a/67084/42528 도 문제가되지 않습니다 (기본적으로 설치되어 있음) . 그러나 이것은 커튼 뒤에서 일어나는 일에 대한 설명이없는 대답입니다. 문제를 해결하는 동안 사람들이 실제로 무슨 일이 일어나고 있는지 이해하지 못하게합니다. 나는 모든 게으른 사람을 위해 이것을 +1 할 것이다.
Tom Siwik

1
시원한! 이 답변은 확실히 가장 쉬웠으며 고정 IP 주소로 작동하는 문제를 해결했습니다
vinyll

5

이것은 "버그"가 아니며 "기능" " 일관된 네트워크 장치 이름 지정 "입니다. (일관된 내용이 없습니다.)

이를 "고정"하는 방법은 여러 가지가 있지만 하드웨어가 변경되면 작동하지 않을 수 있습니다.

이전 동작을 복원하려면 끝에 "net.ifnames = 0 biosdevname = 0"을 추가하십시오 cmdline.txt.


이 기능은 기능이지만 기능이 작동하는 방식은 버그입니다. 특히 udev가 USB 이더넷 장치를 처리하는 방식에 있습니다. 무시합니다 net.ifnames=0. 대중적인 OS가 일반적인 하드웨어 구성으로 작동하게하려면 버그 보고서 토론을 따라야 할 필요는 없다고 생각합니다. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur

@KevinTeljeur와 제 의견은 풍자적입니다 . 이것은 컴퓨터 시스템에서 일반적인 문제입니다.
Milliways

Ha ha, 죄송합니다. 시간을 너무 많이 낭비한 후 조용히 문서화 된 버그 인 것을 발견하면 일관된 네트워크 장치 이름을 비롯해 일관성없는 네트워크 장치를 찾을 수 없습니다. 나는 당신의 따옴표를 집어 들었지만, 마법의 주문을 추가 config.txt하는 것은 Pi에서 문서화 된 버그로 실제로 작동하지 않습니다 (최종의 최신 udev 빌드가 릴리스 될 때). 놀랍게도 알려지지 않은 버그로, USB를 통한 이더넷이있는 모든 시스템에 영향을 미칩니다.
Kevin Teljeur

4

이름의 일부로 mac 주소와 특별히 일치하지는 않지만 일관된 네트워크 장치 이름 지정이라고합니다.

이것은 가능하기 때문에 변경되었으며, 네트워크 카드가 여러 개있는 일부 시스템에서는 카드가 고장 나고 eth0, eth1 등을 사용하는 경우가있을 수 있습니다. 이름 지정 체계를 사용하면 라우팅 규칙이 적용됩니다. 잘못된 인터페이스.

많은 Linux 배포판이 일종의 일관된 네트워크 장치 이름 지정으로 이동했습니다. 일반적으로 enp0s1PCI 버스와 버스에 대한 연결 지점을 식별합니다 (각각 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
내가 참조. 라즈베리 파이 3과 라즈베리 파이 2의 차이점에 유의하십시오. 설명해 주셔서 감사합니다.
Tom Siwik

파일 이름 의이 차이점은 최신 systemd / udev 버전의 데비안 8 Jessie 대 데비안 불안정에서 비롯된 것으로 가정합니다. 이 심볼릭 링크가없는 인터페이스의 실제 이름은 실제로 MAC 주소와 다를 수 있습니다. 그러나 적어도 이더넷 인터페이스의 enx경우 Raspi 2와 3 모두에서 이러한 인터페이스 이름 을 본 것을 기억합니다. 현재 WLAN 인터페이스의 이름이 Raspi 3에서 어떻게 지정되었는지 기억할 수 없습니다.
Axel

enx <MAC>는 위와 같이 Ubuntu Mate를 사용하여 문제를 해결했습니다. 데비안으로 전환했고 이름을 바꿀 필요가 없었습니다. 그래도 이상합니다 ... 당신이 옳습니다.
Tom Siwik

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

편집 : 실수를 poiting thx @ sparkie. 나는 항상 주문을 섞는다. :)


처음 언급 한 명령이 작동하지 않습니다. 적어도 src와 dst가 섞여 있습니다.
sparkie

0

나는이 질문이 오래되었다는 것을 알고 있지만이 문제에 부딪 쳤으며 지금까지 제안 된 해결책 중 어느 것도 내 문제를 해결하지 못했습니다. 나에게 rules.d 폴더 트릭은 아무것도하지 않는 것 같습니다.

내 솔루션은 단순히 이름에 관계없이 유선 이더넷 포트에 DHCP를 할당하기 위해 init.d 폴더에 들어가는 스크립트를 작성하는 것이 었습니다. 이것은 여러 개의 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"세그먼트를 편집 할 수 있습니다. 이 첫 번째 grep은 사용하려는 인터페이스의 전체 라인을 가져옵니다. 두 번째 grep은 해당 줄을 가져 와서 인터페이스 이름 만 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.