Linux

分配給物理 NIC 映射的邏輯設備名稱

  • July 14, 2021

我正在尋找一個腳本解決方案,它將顯示哪些邏輯網路介面映射到哪些物理 NIC。

也就是說,如果一個伺服器有 2+ 個介面和 2+ 個 NIC,我怎麼知道哪個 NIC 包含哪個介面?即,ethX 介面映射到底層______ NIC 硬體。

我現在能得到的最接近的方法是使用兩個命令,然後比較結果。我正在努力尋找最通用的 *nix 命令,因為我希望這些命令能夠在廣泛的 Linux 安裝中工作,而無需依賴任何其他已安裝的工具/包。(通常,我沒有安裝任何東西的權利或許可)

命令 1 返回介面名稱和 MAC 地址。MAC 地址通常是不可變的,因此它們提供了一個可靠的參考點。介面名稱是一個標籤,收集起來供參考

> ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
       link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
       link/ether 14:18:77:27:c1:32 brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
       link/ether 14:18:77:27:c1:33 brd ff:ff:ff:ff:ff:ff
4: sci0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
       link/ether 14:18:77:27:c1:34 brd ff:ff:ff:ff:ff:ff
5: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether 14:18:77:27:c1:35 brd ff:ff:ff:ff:ff:ff

命令 2:

>lspci -vd ::0200
   
01:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM5720 Gigabit Ethernet PCIe
       Subsystem: Dell Device 1f5b
       Flags: bus master, fast devsel, latency 0, IRQ 55, NUMA node 0
       Memory at 91b30000 (64-bit, prefetchable) [size=64K]
       Memory at 91b40000 (64-bit, prefetchable) [size=64K]
       Memory at 91b50000 (64-bit, prefetchable) [size=64K]
       Expansion ROM at 92700000 [disabled] [size=256K]
       Capabilities: [48] Power Management version 3
       Capabilities: [50] Vital Product Data
       Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
       Capabilities: [a0] MSI-X: Enable+ Count=17 Masked-
       Capabilities: [ac] Express Endpoint, MSI 00
       Capabilities: [100] Advanced Error Reporting
       Capabilities: [13c] Device Serial Number 00-00-14-18-77-27-c1-32
       Capabilities: [150] Power Budgeting <?>
       Capabilities: [160] Virtual Channel
       Kernel driver in use: tg3
       Kernel modules: tg

01:00.1 Ethernet controller: Broadcom Limited NetXtreme BCM5720 Gigabit Ethernet PCIe
       Subsystem: Dell Device 1f5b
       Flags: bus master, fast devsel, latency 0, IRQ 57, NUMA node 0
       Memory at 91b00000 (64-bit, prefetchable) [size=64K]
       Memory at 91b10000 (64-bit, prefetchable) [size=64K]
       Memory at 91b20000 (64-bit, prefetchable) [size=64K]
       Expansion ROM at 92740000 [disabled] [size=256K]
       Capabilities: [48] Power Management version 3
       Capabilities: [50] Vital Product Data
       Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
       Capabilities: [a0] MSI-X: Enable+ Count=17 Masked-
       Capabilities: [ac] Express Endpoint, MSI 00
       Capabilities: [100] Advanced Error Reporting
       Capabilities: [13c] Device Serial Number 00-00-14-18-77-27-c1-33
   ...

從這兩個輸出中,我可以使用介面 MAC 地址和設備序列號將 eth0 上的介面映射到物理 NIC。

有沒有更直接的方法可以看到這個?

我們需要一種腳本方法來將其作為遠端發現來處理。

由於某些限制,該命令不能使用任何輸出管道。所以不用grep、awk等。我們可以在程式碼中截斷比較結果。

謝謝你。

您可以使用/sys文件系統中的資訊。我的盒子沒有使用“可預測的設備名稱”,但這是您在我的系統上看到的:

$ ll /sys/class/net
total 0
lrwxrwxrwx 1 root root 0 Jul 14 18:26 eth0 -> ../../devices/pci0000:00/0000:00:1c.4/0000:06:00.0/net/eth0
lrwxrwxrwx 1 root root 0 Jul 14 18:26 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Jul 14 18:26 wlan0 -> ../../devices/pci0000:00/0000:00:1c.3/0000:04:00.0/0000:05:00.0/net/wlan0
lrwxrwxrwx 1 root root 0 Jul 14 18:26 wlan1 -> ../../devices/pci0000:00/0000:00:1c.1/0000:02:00.0/net/wlan1

因此,您可以通過符號連結直接查看哪些介面屬於哪些物理卡。

如果您不需要這個特定的映射,而是需要一個不同的映射,/sys請查看文件系統,看看是否找到了更好的映射。

引用自:https://unix.stackexchange.com/questions/658095