데비안 버스터 업그레이드는 모든 인터페이스의 이름을 renameX로 바꿉니다.

데비안 버스터 업그레이드는 모든 인터페이스의 이름을 renameX로 바꿉니다.

업그레이드 전에는 다음과 같이 이름이 지정되었습니다.

iface ens2f0
iface ens2f1

원본에서 설치하십시오. 이제 그들은 다음과 같습니다:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: rename2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:1e:67:7c:84:2b brd ff:ff:ff:ff:ff:ff
3: eno0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:1e:67:7c:84:2c brd ff:ff:ff:ff:ff:ff
4: rename4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:1e:67:7c:84:2d brd ff:ff:ff:ff:ff:ff
5: rename5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:1e:67:7c:84:2e brd ff:ff:ff:ff:ff:ff

Intel Gigabit I350 어댑터이므로 lshw에서 다음을 얻었습니다.

           *-network:0 DISABLED
            description: Ethernet interface
            product: I350 Gigabit Network Connection
            vendor: Intel Corporation
            physical id: 0
            bus info: pci@0000:02:00.0
            logical name: rename2
            version: 01
            serial: 00:1e:67:7c:84:2b
            size: 1Gbit/s
            capacity: 1Gbit/s
            width: 32 bits
            clock: 33MHz
            capabilities: pm msi msix pciexpress vpd bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
            configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.4.0-k duplex=full firmware=1.48, 0x800006e7 latency=0 link=no multicast=yes port=twisted pair speed=1Gbit/s
            resources: irq:26 memory:d0960000-d097ffff ioport:2060(size=32) memory:d09b0000-d09b3fff memory:d0aa0000-d0abffff memory:d0a80000-d0a9ffff
       *-network:1 DISABLED
            description: Ethernet interface
            product: I350 Gigabit Network Connection
            vendor: Intel Corporation
            physical id: 0.1
            bus info: pci@0000:02:00.1
            logical name: eno0
            version: 01
            serial: 00:1e:67:7c:84:2c
            size: 1Gbit/s
            capacity: 1Gbit/s
            width: 32 bits
            clock: 33MHz
            capabilities: pm msi msix pciexpress vpd bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
            configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.4.0-k duplex=full firmware=1.48, 0x800006e7 latency=0 link=no multicast=yes port=twisted pair speed=1Gbit/s
            resources: irq:39 memory:d0940000-d095ffff ioport:2040(size=32) memory:d09a0000-d09a3fff memory:d0a60000-d0a7ffff memory:d0a40000-d0a5ffff
       *-network:2 DISABLED
            ...

펌웨어 문제가 있을 경우를 대비해 Firmware-linux-nonfree를 설치했는데 Debian Stretch에서는 잘 작동합니다. 여기서 논리적 이름이 어떻게 생성되어야 하는지 이해가 되지 않습니다. int rename2를 고정 IP로 구성하고 사용할 수 있을까요? 지금은 왜 eno0이라고 불리나요? lshw에서는 4개의 인터페이스가 모두 비활성화된 것으로 나타납니다.

편집: 자세한 내용을 추가했습니다.

나는 또한 udevadmin에게 그가 어떻게 생각하는지 물었습니다.

udevadm test-builtin net_id /sys/class/net/eno0 2>/dev/null
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx001e677c842c
ID_OUI_FROM_DATABASE=Intel Corporate
ID_NET_NAME_ONBOARD=eno0
ID_NET_LABEL_ONBOARD=enPowerVille
ID_NET_NAME_PATH=enp2s0f1
ID_NET_NAME_SLOT=ens2f1

그렇다면 데비안은 왜 이 인터페이스를 eno0 대신 ens2f1로 처리하지 않습니까?

편집 2: @telcoM의 솔루션 추가

vi /etc/systemd/network/20-builtins.link 
 [Match]
 Path=pci-0000:02:*

 [Link]
 NamePolicy=slot

그런 다음 다시 시작하면 다음을 얻습니다.

kernel: [  107.897834] igb 0000:02:00.1 ens2f1: igb: ens2f1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Mar 30 11:56:45 host1 kernel: [  107.897978] br1: port 1(ens2f1) entered blocking state
Mar 30 11:56:45 host1 kernel: [  107.897981] br1: port 1(ens2f1) entered forwarding state
Mar 30 11:56:45 host1 kernel: [  107.898129] IPv6: ADDRCONF(NETDEV_CHANGE): br1: link becomes ready
Mar 30 11:56:46 host1 kernel: [  108.093815] igb 0000:02:00.0 ens2f0: igb: ens2f0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Mar 30 11:56:46 host1 kernel: [  108.093957] br0: port 1(ens2f0) entered blocking state
Mar 30 11:56:46 host1 kernel: [  108.093960] br0: port 1(ens2f0) entered forwarding state

네트워크를 시작할 때 여전히 오류가 발생하고 syslog에서 특정 오류를 찾을 수 없지만 이제 인터페이스와 브리지가 작동됩니다! @telcoM 정말 감사합니다.

답변1

프로덕션 빌드에서 베타 버전 9로 이동할 때 Red Hat EL에서 동일한 동작을 보았습니다. 사용된 시스템 버전에 따라 동작이 다른 것 같습니다.

문제는 실제로 이전 버전이 eno0 대신 enp2f0과 같은 이름을 사용하는 이유입니다. 시스템의 PCI 슬롯에 대한 SMBIOS 레코드의 출력을 보지 않고는 dmidecode -t 9원래 포스터에 ens2f0과 같은 이름이 표시된 이유를 설명할 수 없습니다. 이는 SMBIOS가 온보드 장치에도 물리적 슬롯 번호가 있음을 표시한다는 의미입니다.

예전처럼 eno0이전 버전의 자바스크립트에서 이름이 반환되지 않는 이유를 알아냈습니다 . systemd함수는 dev_pci_onboard​<= 0 값을 확인하고 오류를 반환합니다. 최신 버전에는 더 복잡한 논리가 있습니다. systemd 250은 SMBIOS에서 반환된 인스턴스 번호 0을 허용합니다. 따라서 원래 질문에 답하기 위해 enp업데이트 후 스타일 이름을 반환하는 것에서 systemd이제 펌웨어의 데이터를 받아들이는 것으로 전환한 것 같습니다.

어제 내 답변에 대한 업데이트 내용은 다음과 같습니다.

eno스타일 이름은 SMBIOS(DMI) 또는 ACPI가 장치가 온보드 NIC임을 나타내는 정보를 반환할 때 사용됩니다. ACPI 사례를 자세히 살펴본 적은 없지만 SMBIOS 사례의 경우 유형 41 레코드가 이전 유형 10 레코드를 대체합니다. 아래 예를 참조하세요.

이전 버전의 systemd함수 dev_pci_onboard에서는 udev/udev-builtin-net_id.c반환된 인덱스 번호를 확인한 <= 0다음 오류가 반환됩니다. 따라서 a를 수행 dmidecode -t 41하고 0이 표시 되면 Type Instance이러한 이전 버전의 systemd는 SMBIOS를 무시하므로 PCI 슬롯 또는 주소의 ens또는 스타일 이름을 사용합니다. enp. systemd 250의 경우 함수의 논리가 더 복잡하지만 이는 0개의 SMBIOS 장치 인스턴스를 수용할 수 있음을 의미합니다.

아래는 제가 이 사실을 알기 전에 어제 쓴 글인데, 데이터의 출처를 보여주고 SMBIOS 인스턴스 번호에 대한 일반적인 설명을 하고 있습니다.

Red Hat에서도 동일한 동작이 나타나는데 왜 장치의 펌웨어 인스턴스 번호가 1부터 시작해야 하는지 궁금합니다. 스타일 이름의 번호는 enoSMBIOS(DMI) 유형 41 레코드에서 가져올 수 있습니다.

[root@ml110c ~]# dmidecode -t 41
# dmidecode 3.2

Getting SMBIOS data from sysfs.
SMBIOS 2.6 present.

Handle 0x2900, DMI type 41, 11 bytes
Onboard Device
        Reference Designation: NIC Port 1
        Type: Ethernet
        Status: Enabled
        Type Instance: 0
        Bus Address: 0000:02:00.0

Handle 0x2901, DMI type 41, 11 bytes
Onboard Device
        Reference Designation: NIC Port 2
        Type: Ethernet
        Status: Enabled
        Type Instance: 1
        Bus Address: 0000:03:00.0

[root@ml110c ~]#

이 시스템에서 HP ProLiant ml110 g7 NIC 포트에는 인스턴스 번호 0과 1이 있습니다. NIC 포트 2의 인스턴스 번호는 1이고 예측 가능한 이름이 할당됩니다 eno1. 그러나 enp2s0해당 PCI 주소에 대한 유형 9 레코드가 없기 때문에 인스턴스 번호가 0인 장치는 결국 호출됩니다 .

[root@ml110c ~]# ethtool -i enp2s0
driver: e1000e
version: 3.2.6-k
firmware-version: 2.1-2
expansion-rom-version:
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
[root@ml110c ~]#

첫 번째 유형 41 레코드로 식별된 장치의 PCI 주소를 기록해 두십시오.

10G NIC가 있는 HP gen9 서버에서 온보드 장치 인스턴스 번호는 1이 아닌 49에서 시작하며 다양한 온라인 게시물에 따르면 일부 Dell 서버에서도 마찬가지입니다. 이러한 NIC에 액세스할 수 있는 HP 시스템에서는 "예측 가능한 이름"으로 나타납니다 eno49. eno50이러한 이름을 어떻게 예측할 수 있는지 잘 모르겠습니다. 최신 10세대 HPE 서버는 이를 수행하지 않으며 처음부터 시작합니다 eno1.

답변2

유사한 네트워크 인터페이스 이름은 rename2시스템이 인터페이스 이름을 바꾸지만 어떤 이유로 충돌이 발생했음을 나타냅니다.

/etc/udev/rules.d이전 Stretch 시대 udev의 NIC 명명 규칙을 확인 하고 주석 처리하거나 가능하면 완전히 제거하십시오. 또한 적용 가능한 파일이 있는지 확인하십시오 /etc/systemd/network/*.link. 이는 NIC에 이름을 할당하는 최신 방법입니다.

이와 같은 이름은 eno0내장 네트워크 인터페이스의 "물리적" 번호를 식별하는 펌웨어 정보(아마도 DMI 데이터?)를 기반으로 합니다. 분명히 시스템 펌웨어는 PCI 경로가 있는 NIC가 0000:02:00.1시스템 보드에서 "0번째"로 표시되어 있음을 의미합니다. .

나는 enoX이름 지정이 어디서 시작되어야 하는지 eno1, 숫자가 어디서 시작되어야 하는지 알고 있습니다. eno0가능한 펌웨어 정의 오류: 현재 시스템 펌웨어에 네트워크 인터페이스가 내장되어 있다고 나와 있지만 인터페이스 수가 정의되어 있지 않을 수 있습니다. 두 개 이상의 NIC에서 상황이 동일한 경우 시스템은 여러 인터페이스의 이름을 지정하려고 시도하지만 작동 eno0하지 않습니다.

/etc/systemd/network/20-builtins.link다음 내용으로 파일을 생성하여 명명 체계를 재정의할 수 있습니다.

[Match]
Path=pci-0000:02:*

[Link]
NamePolicy=slot

다른 두 인터페이스의 PCI 경로가 그렇지 않은 경우 모든 인터페이스와 일치하도록 라인을 0000:02:*.*조정해야 할 수도 있습니다 . Path=이렇게 하면 시스템에 en0스타일 "내장 NIC" 이름 할당 시도를 중지하고 이전에 사용했던 슬롯 스타일 이름을 사용하라는 메시지가 전달됩니다.

관련 정보