我有以下问题。我的电脑很旧,它有一个无法工作的内置以太网端口,不是因为配置错误,我认为它是物理损坏的。它在 Ubuntu 甚至 Windows 上都不起作用。我有一张我使用的以太网 PCI 卡。问题是,出于某种奇怪的原因,可以正常工作的卡有时会从eth0
到eth1
,我必须运行dhcpd
,因为我并不总是通过 DHCP 获得 IP。现在,实际的问题是,是否有某种方法可以禁用使用其 MAC 地址或其他东西不起作用的卡?我不能禁用任何一个,eth0
或者eth1
我确定它并不总是“指向”同一张卡。
4 回答
它们是同一种芯片组还是不同的芯片组?
如果它们不同,那么最简单的解决方案可能就是将该以太网芯片组的模块列入黑名单。
您首先需要找到模块名称(这是用于 eth0):
dmesg | grep eth0
看看你是否有类似以下的东西:
[ 2.209295] r8169 0000:05:00.0: eth0: RTL8168d/8111d at 0xffffc90000c6e000, 00:24:1d:11:b6:64, XID 081000c0 IRQ 44
在我的情况下,“r8169”是模块名称。您还可以使用“lsmod”查看当前加载的模块列表,因此请检查它是否出现在其中。
接下来,您需要将模块列入黑名单。Arch wiki 上有一个条目。
这里的弓箭手;我有一种方法可以根据其硬件 pci id 禁用我的 nVidia 显卡的 HDMI 端口音频芯片;也许您可以对您的网卡应用相同的方法:
查找以太网的 pci id:
$ lspci | grep Eth
00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network Connection (rev 05)
找到对应的目录:
$ find /sys/devices -name *00:19.0
/sys/devices/pci0000:00/0000:00:19.0
该目录中应该有一个名为“remove”的文件。您可以通过编辑 /etc/rc.local 在启动时禁用设备
echo 1 > /sys/devices/pci0000:00/0000:00:19.0/remove
再三考虑;如果在 /etc/rc.local 完成之前加载模块,这可能不适用于您的情况......将 /dev/eth0 和 /dev/eth1 以“错误”顺序分配然后再分配对您没有什么好处/etc/rc.conf 禁用其中一个...您仍然可以将首选 nic 设置为 eth1。这曾经是多个声卡上的 alsa 的问题,因此设计了方法来通过模块参数分配卡的编号。也许模块本身允许这样做?
我在板载 NIC 中从您的描述中收集。最好的解决方案是在主板 BIOS 而不是操作系统中禁用它。此方法因制造商而异,但我相信您可以在某处在线找到您的模型的手册。