分配给物理 NIC 映射的逻辑设备名称

分配给物理 NIC 映射的逻辑设备名称

我正在寻找一个脚本化的解决方案,它将显示哪些逻辑网络接口映射到哪些物理网卡。

也就是说,如果一台服务器有2+个接口和2+个网卡,我如何知道哪个网卡包含哪个接口?即,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等。我们可以在代码中截断并比较结果。

谢谢。

答案1

您可以使用文件系统中的信息/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文件系统,看看是否找到更好的映射。

相关内容