Linux
分配給物理 NIC 映射的邏輯設備名稱
我正在尋找一個腳本解決方案,它將顯示哪些邏輯網路介面映射到哪些物理 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
請查看文件系統,看看是否找到了更好的映射。