Proxmox VEを使っていると、新しいデバイスを追加した際にネットワークが接続できなくなることがあります。この問題は、DebianベースのOSがデバイスを認識する際のデバイス名の決定方法に起因します。ここでは、新しいデバイスが追加された際にどのようにデバイス名が決定され、なぜネットワーク接続ができなくなるのか、そしてその対処方法について詳しく説明します。
デバイス名の決定方法
DebianベースのOSでは、デバイス名は通常、以下の要素に基づいて決定されます:
- PCIバスの順序:PCIバスの順序に基づいてデバイス名が決定されます。新しいデバイスが追加されると、既存のデバイス名が変更されることがあります。
- udevルール:udevルールはデバイス名を固定するために使用されます。特定のデバイスに対してカスタムの名前を割り当てることができます。
NVMeストレージ追加によるデバイス名の変更
特にNICとは無関係のNVMeストレージを追加した際にもネットワークデバイス名が変更されることがあります。例えば、ネットワークデバイス名がenp7s0
からenp8s0
に変更されることがあるのは、PCIバスの順序が変わるためです。
なぜこのような変更が起こるのか?
NVMeストレージや他のPCIeデバイスを追加すると、PCIバスのアドレスが再計算され、新しいデバイス名が割り当てられることがあります。このため、既存のネットワークデバイスの名前が変わってしまい、設定ファイルで指定されたデバイス名と一致しなくなります。
PCIデバイスの認識順を確認する方法
PCIデバイスの認識順を確認するには、lspci
コマンドを使用します。このコマンドを使うことで、PCIデバイスの順序とアドレスを確認できます。
lspci
以下は、lspci
コマンドの実行結果の例です:
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne Root Complex
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
00:01.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
00:02.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge
00:08.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
00:08.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 51)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 5
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 6
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 7
01:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)
02:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] 500 Series Chipset USB 3.1 XHCI Controller
02:00.1 SATA controller: Advanced Micro Devices, Inc. [AMD] 500 Series Chipset SATA Controller
02:00.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] 500 Series Chipset Switch Upstream Port
03:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
03:06.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
03:07.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
03:08.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
04:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)
05:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)
06:00.0 Ethernet controller: Intel Corporation Ethernet Controller X550 (rev 01)
06:00.1 Ethernet controller: Intel Corporation Ethernet Controller X550 (rev 01)
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
09:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c9)
09:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller
09:00.2 Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor
09:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
09:00.4 USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
09:00.6 Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h/19h HD Audio Controller
このリストは、システム内の全てのPCIデバイスを表示しており、それぞれのデバイスがどのバスアドレスにあるかを示しています。ネットワークデバイス(例えばEthernet controller
)のバスアドレスが変わると、それに伴ってデバイス名も変更されることがあります。
ネットワークデバイスの確認方法
次のコマンドを使用して、システムに存在するすべてのネットワークインターフェイスを一覧表示することが出来ます。
ip link show
以下は、ip link show
コマンドの実行結果の例です:
root@pve:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP mode DEFAULT group default qlen 1000
link/ether a8:a1:59:a5:06:74 brd ff:ff:ff:ff:ff:ff
3: enp6s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr1 state UP mode DEFAULT group default qlen 1000
link/ether a0:36:9f:20:60:00 brd ff:ff:ff:ff:ff:ff
4: enp6s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether a0:36:9f:20:60:02 brd ff:ff:ff:ff:ff:ff
省略
デバイス名の変更の実例
以下のような状況を考えてみます:
- OSインストール時にはネットワークデバイスのバスアドレスが
07:00.0
で、デバイス名がenp7s0
となっている。 - NVMeストレージデバイスを追加すると、ネットワークデバイスのバスアドレスが
08:00.0
に変更され、デバイス名がenp8s0
になる。
実行結果の確認
デバイス追加前:
root@pve:/etc# lspci | grep "Realtek"
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
デバイス追加後:
root@pve:/etc# lspci | grep "Realtek"
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
これにより、バスアドレスが変更され、それに伴いネットワークデバイス名も変更されたことが確認できます。
デバイス名の確認と設定ファイルの修正方法
新しいデバイスを追加した後にネットワークが接続できなくなった場合、以下の手順で問題を解決できます:
1. デバイス名の確認
まず、新しいデバイス名を確認します。以下のコマンドを使用して、現在のネットワークデバイス名を確認できます。
ip link show
2. ネットワーク設定ファイルの修正
ネットワーク設定ファイル(/etc/network/interfaces
)を修正して、新しいデバイス名を反映させます。enp7s0
がenp8s0
に変更された場合、以下のように修正します。
root@pve:/etc/network# diff -ruN interfaces.20240709 interfaces
--- interfaces.20240709 2024-01-27 06:50:56.735458961 +0900
+++ interfaces 2024-07-09 23:20:49.794636816 +0900
@@ -12,24 +12,24 @@
auto lo
iface lo inet loopback
-iface enp7s0 inet manual
+iface enp8s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.11.45/24
gateway 192.168.11.1
- bridge-ports enp7s0
+ bridge-ports enp8s0
bridge-stp off
bridge-fd 0
3. ネットワークの再起動
設定ファイルを修正した後OSの再起動を行うか、以下の通りネットワークを再起動します。
systemctl restart networking