Linux改网卡乱序的脚本,解决多网卡,网卡顺序漂移错乱的问题

使用linux系统时会出现这样的情况,当你安装了某个网卡的驱动程序时,或者安装了与网卡相关的程序后。

网卡会出现所谓的漂移现象。(注意:不是飘逸)。可能的表象为:

(1):网卡顺序颠倒,比如之前你的网线连接的网口为eth0,当安装某个网卡的驱动后,可能它的名字变为eth0或者eth3,等等情况。

(2):网卡名字改变,这种情况倒不是eth0到eth1的改变,而是很诡异的变化,比如eth0找不到了,多了个网卡名字叫 __tmp3183921382193__

这个确实让人很恼火。因为有人可能会通过ifconfig | grep eth来获取信息从而完成一些开发工作,如果网卡名字变得乌七八糟了,程序肯定会出错。

(3):光口网卡和电口网卡顺序乱了,或者交叉。

总之我们的目的就是:能够指定某个网卡的名字为我们想要的物理设备。做法如下:

第一步,识别谁是谁。

要使用网卡,首现要知道哪个名字对应的哪个物理设备,做法为:从交换机拉一根网线,从上到下挨个接到网卡上面,注意每次只能接一个网卡,接上后通过ethtool命令来查看是否连着网线,比如

[root@AS5 ~]# ethtool eth0

Settings for eth0:

Supported ports: [ MII ]

Supported link modes:   10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

1000baseT/Full

Supports auto-negotiation: Yes

Advertised link modes:  10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

1000baseT/Full

Advertised auto-negotiation: Yes

Speed: 100Mb/s

Duplex: Full

Port: MII

PHYAD: 2

Transceiver: external

Auto-negotiation: on

Supports Wake-on: g

Wake-on: d

Link detected: yes

看到了eth0的状态为连接着网线。如果Linked detected:no,则说明没有连接网线。

如此区分开哪个设备的名字是什么,标注好。

第二步:获取每个网卡的MAC地址

ifconfig -a能看到所有网络设备。

通过 ifconfig -a | grep HWaddr 来获取每个设备的MAC地址。

比如:

[root@AS5 ~]# ifconfig  -a | grep HWaddr

eth0      Link encap:Ethernet  HWaddr 00:30:48:7F:B5:CA

eth1      Link encap:Ethernet  HWaddr 00:30:48:7F:B5:CB

eth2      Link encap:Ethernet  HWaddr 00:04:23:A6:81:E0

eth3      Link encap:Ethernet  HWaddr 00:04:23:A6:81:E1

拿到了每个网卡的MAC地址。

第三步:进行MAC和网卡名称绑定。

我们都知道,对于RedHat的系统,网络的配置文件在:/etc/sysconfig/network-scripts/ifcfg-ethX

中存着,N=0,1,2。。。

比如:root@AS5 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

# nVidia Corporation MCP55 Ethernet

DEVICE=eth0

ONBOOT=yes

HWADDR=00:30:48:7f:b5:ca

TYPE=Ethernet

NETMASK=255.255.255.0

IPADDR=192.168.42.231

GATEWAY=192.168.42.1

BOOTPROTO=static

#NAMESERVER=202.106.0.20

这个文件是对网卡进行初始化的配置文件。

比如如果我们想指定网卡MAC地址为MAC1的设备名称为ethn,那么,修改文件

/etc/sysconfig/network-scripts/ifcfg-ethn

在里面添加MAC地址绑定和名字的配置信息

DEVICE=ethn

HWADDR=MAC1(比如00:30:48:7f:b5:ca)

其它配置信息不受影响。

当对所有网卡实现绑定后,reboot系统,应该就可以了。

还有一点需要注意,就是驱动对应关系的文件:

/etc/modprobe.conf

要在该文件中修改,确保某个设备使用的就是对应它的驱动,比如:

cat /etc/modprobe.conf

alias eth0 forcedeth

alias eth1 forcedeth

alias scsi_hostadapter aic79xx

alias scsi_hostadapter1 sata_nv

alias scsi_hostadapter2 usb-storage

alias eth2 e1000

alias eth3 e1000

说明eth0和eth1用的forcedeth的驱动,eth2和eth3用的是e1000的驱动。

造成这种问题的原因分析:

1,添加或移除网卡时,因为设备的变化,内核在pci枚举时,设备的识别顺序跟着变化,设备名称也跟着变化。

2,更新内核时,由于内核驱动的变化,可能是由于深度优先 or 广度优先造成的pci枚举的不同。

boot时加参数可以指定枚举用的方式。

其他解决方法:

解决方法一:

ACTION=="add", SUBSYSTEM=="net", IMPORT{program}="/lib/udev/rename_device"

SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/net.hotplug"

DRIVER=="e1000",ID=="0000:02:02.0",NAME="eth1"

如上面蓝色一行所示,将 drivername ,pci-id, 显示的名字做一个对应,就可以了。

初步测试没有问题。

解决方法二:

将网卡的真实 MAC 地址写入网卡的静态配置文件中 ifcfg-ethX,添加一行内容:

HWADDR=xx:xx:xx:xx:xx:xx

其中,xx:xx:xx:xx:xx:xx 为网卡的 MAC 地址

参考:

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,如果电网卡和光网卡的驱动程序没有按照相同的顺序加载,就会导致网卡顺序错乱问题。这可能会导致网络配置错误,无法正常连接网络等问题。为了解决这个问题,可以通过以下两种方式之一来确保网卡顺序正确: 1. 使用固定的名称:在Linux系统中,可以通过为网卡设置固定的名称来确保网卡顺序正确。可以通过在 /etc/udev/rules.d/ 目录下创建一个规则文件来实现。例如,可以创建一个名为 70-persistent-net.rules 的文件,其中包含类似以下内容的规则: ``` SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:22:33:44:55", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" ``` 这里的 ATTR{address} 属性是网卡的 MAC 地址,可以通过 ifconfig 命令获取。通过设置这样的规则,可以为每个网卡分配固定的名称,从而确保网卡顺序正确。 2. 禁用某个网卡:如果不需要某个网卡,可以将其禁用,从而避免网卡顺序错乱问题。可以通过修改 /etc/modprobe.d/blacklist.conf 文件来实现。例如,可以在文件末尾添加以下内容: ``` blacklist bnx2 ``` 这里的 bnx2 是某个网卡的驱动程序,通过将其禁用,可以避免该网卡出现在电和光网卡之间,从而确保网卡顺序正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值