Raspberry Pi 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อย่างไร

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 arp 1

คำตอบ:


16

ผมมีปัญหานี้เมื่อทำงาน Debian armhf ในราสเบอร์รี่ 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

แก้ไข: นี่ไม่ใช่ปัญหา แต่รูปแบบการตั้งชื่ออินเทอร์เฟซใหม่ "Predictable Interface Names" คุณควรปรับเปลี่ยนและใช้สิ่งนี้แทนการพยายามเปลี่ยนกลับเป็นชื่อเดิม


3
ขอบคุณที่ @UnSined ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rulesผมมองต่อไปและพบว่าฉันได้เพื่อเพิ่ม: มันเป็นพื้นปิดการใช้งานการตั้งชื่อสิ่งของ ทำงานได้แล้ว .. ขอบคุณ!
Tom Siwik

ผู้ใช้คือ @Ficertyn ตอนนี้ ... ความชัดเจนสำหรับผู้อ่านที่มีความสุขในเอกสารหมวกแดง
Tom Siwik

1
ฉันต้องลบKERNEL=="eth*"รายการเพื่อให้ทำงานได้
Roger Dueck

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"

บันทึกการเปลี่ยนแปลง

Reboot ตอนนี้ทุกอย่างควรใช้งานได้สมมติว่าทุกอย่างชี้ไปที่ eth0

แก้ไข (10/26/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นั้นอาจถูกเขียนทับในการปรับปรุงระบบปฏิบัติการในอนาคต
Kevin Teljeur

ขอบคุณสำหรับหัวขึ้น. ฉันใช้เวลา 2 วันในการแก้ไขปัญหา ฉันจะให้ pi ทั้งหมดตั้งค่าให้ใช้งานกับ Python3 และ OpenCV เท่านั้นเพื่อให้ Ethernet หยุดทำงานเมื่อรีบูตเนื่องจากการอัปเดต ดีใจที่ได้เห็นคำตอบของฉันมีประโยชน์
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
แต่ถ้าคุณ googled ปัญหาเดียวกันกับ Raspbian แล้วคำถามนี้พบก่อน ฉันทำอย่างนั้นและใช้เวลาในการวิจัยและหาวิธีแก้ปัญหา ฉันคิดว่ามันช่วยได้บ้าง ตกลงฉันจะแก้ไขคำตอบทันที
Almas Dusal

1
มันทำให้ฉันสับสนเมื่อเห็นคน "ค้นคว้า" ในขณะที่คำตอบนั้นเขียนไว้อย่างชัดเจนในคำตอบที่ได้รับการอนุมัติ Ubuntu, debian, raspbian เหมือนกันทั้งหมด การติดตั้งเครื่องมือบน 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มันไม่สนใจ ฉันไม่เชื่อว่าทุกคนควรต้องติดตามการรายงานข้อผิดพลาดเพื่อให้ระบบปฏิบัติการที่เป็นที่นิยมใช้งานได้กับการกำหนดค่าฮาร์ดแวร์ทั่วไป แต่นั่นคือชีวิต bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur

@KevinTeljeur และความคิดเห็นของฉันคือการเสียดสี - นี่เป็นปัญหาที่พบบ่อยในระบบคอมพิวเตอร์
Milliways

ฮ่า, เสียใจด้วย - หลังจากผ่านไปหลายชั่วโมงแล้วก็พบว่ามันเป็นข้อผิดพลาดที่บันทึกไว้อย่างเงียบ ๆ , ฉันไม่สามารถรับการตั้งชื่ออุปกรณ์เครือข่ายที่สอดคล้องกันได้ ฉันหยิบเครื่องหมายคำพูดของคุณขึ้นมา แต่การเพิ่มคาถาเวทมนตร์เหล่านั้นconfig.txtอย่างแท้จริงไม่ได้ทำงานบน Pi เป็นข้อผิดพลาดที่มีการบันทึกไว้ มันเป็นข้อผิดพลาดที่ไม่รู้จักที่น่าประหลาดใจซึ่งส่งผลกระทบต่อทุกระบบด้วยอีเธอร์เน็ตบน USB
Kevin Teljeur

4

ฉันไม่ได้พบมันโดยเฉพาะกับที่อยู่ mac เป็นส่วนหนึ่งของชื่ออย่างไรก็ตามสิ่งที่คุณกำลังประสบอยู่เรียกว่าการตั้งชื่ออุปกรณ์เครือข่ายที่สอดคล้องกัน

นี่เป็นการเปลี่ยนแปลงที่เกิดขึ้นเพราะเป็นไปได้และอาจเป็นไปได้ว่าในบางระบบที่มีการ์ดเครือข่ายหลายอย่างที่การ์ดจะออกมาตามลำดับและใช้รูปแบบการตั้งชื่อ eth0, eth1 ฯลฯ คุณจะจบลงด้วยการใช้กฎการกำหนดเส้นทาง ผิดอินเตอร์เฟส

ลีนุกซ์หลายรุ่นได้ย้ายไปใช้การตั้งชื่ออุปกรณ์เครือข่ายที่สอดคล้องกัน, โดยทั่วไปจะมีลักษณะคล้าย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 ได้รับและขอบคุณ :)
ทอม Siwik



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 ระบบการบูต


0

สำหรับฉันแล้วการใช้ Debian Unstable บน Raspberry Pi 2 symlink ที่กล่าวถึงในความคิดเห็นต่อคำตอบแรกนั้นเป็นความคิดที่ถูกต้องเช่นกัน แต่ชื่อของมันต้องแตกต่างกัน: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


ไม่คุณพูดถึงชื่อไฟล์นี้ แต่ชื่ออื่นในความคิดเห็นของคุณซึ่งเป็นสาเหตุที่ฉันอ้างถึงความคิดเห็นนั้นและกล่าวว่าต้องเป็นชื่อไฟล์อื่นสำหรับฉัน
Axel Beckert

1
ฉันเห็น. โปรดสังเกตความแตกต่างระหว่างราสเบอร์รี่ pi 3 และราสเบอร์รี่ pi 2 แม้ว่าพวกเขาจะมีเทคนิคเกือบจะเหมือนกันความแตกต่างของการตั้งชื่อนี้อาจเป็นหนึ่งในสิ่งที่ทำให้คนเข้าใจผิด ขอบคุณสำหรับการชี้แจงว่า
Tom Siwik

ฉันถือว่าความแตกต่างของชื่อไฟล์มาจาก Debian 8 Jessie กับ Debian Unstable กับ systemd / udev เวอร์ชั่นใหม่กว่า ชื่อจริงของอินเตอร์เฟสที่ไม่มี symlink นี้อาจแตกต่างจากที่อยู่ MAC แต่อย่างน้อยสำหรับอินเตอร์เฟส ethernet ฉันคิดว่าฉันจำได้ว่าเคยเห็นenxชื่ออินเตอร์เฟสเหล่านี้ทั้ง Raspi 2 และ 3 ฉันยังจำไม่ได้ว่ามีการตั้งชื่ออินเตอร์เฟส WLAN ใน Raspi 3 อย่างไร
Axel Beckert

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

แก้ไข: ขอบคุณ @ 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 ตัวที่สองรับบรรทัดนั้นและส่งคืนชื่ออินเตอร์เฟสเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.