CentOS 7 또는 RHEL 7의 네트워크 인터페이스 이름 "eno16777736"에서 eno는 무엇을 의미합니까?

CentOS 7 또는 RHEL 7의 네트워크 인터페이스 이름 "eno16777736"에서 eno는 무엇을 의미합니까?

eno16777736일관된 네트워크 장치 명명 체계에서 CentOS 7 또는 RHEL 7의 네트워크 인터페이스 이름에서 "eno"는 무엇을 의미합니까?

답변1

이것은예측 가능한 네트워크 인터페이스 장치 이름행동 중.

  • en이더넷용
  • o보트에 사용하기 위해
  • 이 숫자는 펌웨어/BIOS에서 제공하는 인덱스입니다.

자세한 내용은 소스에서udev-내장-net_id.c

답변2

음. 나는 "en"과 "o"보다 "16777736"에 더 관심이 있습니다.

실수로 Google에 접속하여 사용자 정의 PCI 아키텍처가 있는 서버에 앉아 있지 않는 한 16777736이 가능한 값이라는 것을 정말로 이해하지 못합니다. 이는 더 심각한 문제를 암시할 수 있습니다.

현재 아키텍처에서 시스템은 256개 이상의 PCI 버스(버스당 32개 장치, 장치당 최대 8개 기능)를 처리할 수 없습니다. 이를 버스:장치.기능 주소 지정이라고도 합니다. 최신 시스템은 Domain:Bus:Device.Function을 사용하여 256개 버스 제한을 극복합니다. 하지만 어쨌든, 질문으로 돌아가서...

다음을 수행할 수 있습니다.

ls -la /sys/class/net | grep eno16777736

다음과 매우 유사한 내용이 표시되는 경우:

eno16777736 -> ../.../devices/pci0000:00/0000:00:11.0/0000:1000208:01.0/net/eno16777736

글쎄요, Google이 귀하가 서버를 망쳤다는 사실을 발견하기 전에 빨리 실행하는 것이 좋습니다.

위의 /(0000:1000208:01.0)/은 Domain:Bus:Device.Function 주소이고, 버스 값은 "1000208"로 16777736을 16진수로 표현한 것입니다. 단, "0x100"(256)은 "버스"에서 사용할 수 있는 최대값이어야 합니다.

반면에 "bus" 값이 0x100보다 작은 경우, 예를 들면 다음과 같습니다.

eno16777736 -> ../.../devices/pci0000:00/0000:00:11.0/0000:1c:01.0/net/eno16777736

그렇다면 문제는 BIOS/펌웨어가 부팅 시 udev(systemd)에 정보를 보내는 방식과 관련이 있다고 생각합니다. 잠재적인 원인을 식별하려면 먼저 udev에서 반환된 값을 검사하세요.

PIN(예측 가능한 인터페이스 이름)을 생성하기 위한 udev 쿼리는 일반적으로 세 곳에서 이루어집니다.

  1. ACPI_DSM
  2. SMBIOS 테이블 [특정 레코드 유형 "슬롯" [9] 및 유형 41]
  3. PCI IRQ 라우팅 테이블

[그와 같은 순서로]

(1)을 다음과 같이 테스트할 수 있습니다.

udevadm info --path=/sys/class/net/eno16777736 --attribute-walk | grep acpi

16777736이 표시되면 시스템이 ACPI_DSM을 지원하는 데 필요한 PCI 펌웨어 사양 3.1을 지원하지 않을 가능성이 높습니다.

이제 (2)를 테스트해야 합니다. 따라서 먼저 SMBIOS 테이블에서 레코드 유형 41을 확인해 보겠습니다(유형 41이 가장 관련성이 높음).

dmidecode -t 41 | more

아무것도 표시되지 않거나 SMBIOS 버전이 "2.62"보다 낮은 경우 udev가 PCI IRQ 라우팅 테이블을 사용하여 PIN을 생성한다는 의미입니다.

그래서 우리는 확인해야합니다 (3)

biosdecode

최대 슬롯 항목에 세심한 주의를 기울이십시오. 형식은 다음과 같아야 합니다.

Slot Entry X: ID 00:00, (slot number X| status)

설명을 위해 X가 25인 경우 NIC는 25보다 작거나 같은 슬롯에 있어야 합니다. 그렇지 않은 경우 udev는 계속해서 자리 표시자 값 16777736을 참조합니다.

대부분의 경우 다음 방법으로 네트워크 카드의 슬롯 번호를 확인할 수 있습니다.

lspci -bv | grep -i -A10 ether

또한 대부분의 경우 BDF(Bus:Device.Function)에서 장치는 물리적 포트 번호(16진수에서 10진수로 변환한 후)와 동일해야 합니다. 그렇지 않은 경우(그렇지 않은 경우) lspci는 위의 lspci 명령 실행 출력에서 ​​별도의 줄에 물리적 슬롯을 나열합니다.

따라서 나열된 물리적 슬롯 번호가 X(PCI IRQ 라우팅 테이블에서 찾은 가장 높은 번호)보다 큰 경우 문제가 격리되었을 가능성이 높습니다.

이 상황에서 가능한 해결책은 5가지가 있습니다.

  1. 커널 해킹...새로운 PCI IRQ 라우팅 테이블로 커널을 재구축하세요. /arch/x86/pci/irq.c를 살펴보십시오.

[시간을 더 잘 활용하기 위한 해결책을 찾아야 합니다.]

  1. 새 규칙을 생성하여 장치를 다른 이름으로 매핑

통과:

vi /etc/udev/rules.d/70-my-net-names.rules

그런 다음 다음을 추가합니다.

ACTION=="add", SUBSYSTEM=="net", ENV{ID_BUS}=="pci", 
KERNELS=="{Domain:Bus:Device.Function}", NAME="{name: i.e. eno1 or eth0}" 

[저는 이것을 문제를 무시하고 예쁘게 보이게 하는 솔루션이라고 부릅니다.]

  1. 커널 부팅 옵션에 net.ifnames=0을 추가하여 기능을 완전히 비활성화할 수 있습니다.

[물론 '고장나면 전원을 끄고 혼자 울어라'는 해결방안이다](실제 해결방안은 아님)…

  1. VM...VMWare/VirtualBox 등을 실행 중인 경우 구성 파일을 열고 "pciSlotNumber"를 X보다 낮은 값으로 수정하세요.

[그러나 이것은 내 소프트웨어가 솔루션으로 업데이트될 때까지 임시 해킹입니다.]

  1. 새 컴퓨터를 구입하세요. [마지막으로 "이길 수 없다면 합류하세요" 솔루션]

답변3

이전 답변에 세부 정보를 추가하려면 다음을 수행하십시오.

인터페이스 유형에 따른 두 자리 접두사:

*   en -- ethernet
*   sl -- serial line IP (slip)
*   wl -- wlan
*   ww -- wwan
*   ib -- Infiniband

이름 유형:

*   b<number>                             -- BCMA bus core number
*   ccw<name>                             -- CCW bus group name
*   o<index>                              -- on-board device index number
*   s<slot>[f<function>][d<dev_port>]     -- hotplug slot index number
*   x<MAC>                                -- MAC address
*   [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
                                          -- PCI geographical location
*   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..]1[i<interface>]
                                          -- USB port number chain

원천:http://ask.xmodulo.com/change-network-interface-name-centos7.html

관련 정보