アップグレード前に、次のように名前が付けられました。
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
では、Debian はなぜこのインターフェイスを 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
以前のバージョンのJavaScriptから名前が返されない理由がわかりました。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の場合、関数のロジックはより複雑ですが、これはゼロのSMBIOSデバイスインスタンスを受け入れることができることを意味します。
以下は私がこの事実を知る前に昨日書いた文ですが、データのソースを示し、SMBIOSインスタンス番号の一般的な説明をしています。
Red Hatでも同じ動作が現れますが、なぜデバイスのファームウェアインスタンス番号が1から始まるのか疑問に思います。スタイル名の番号は、eno
SMBIOS(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
他の2つのインターフェイスのPCIパスがそうでない場合は、すべてのインターフェイスと一致するようにラインを0000:02:*.*
調整する必要があります。Path=
これにより、システムにen0
スタイル「組み込みNIC」名を割り当てようとしないで、以前に使用したスロットスタイル名を使用するように求められます。