Chinaunix

标题: 多网卡识别顺序的问题【解决方法见1楼】 [打印本页]

作者: Godbach    时间: 2010-12-10 11:10
标题: 多网卡识别顺序的问题【解决方法见1楼】
本帖最后由 Godbach 于 2011-05-06 11:58 编辑

--------------
解决方法一:
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 地址


参考文档
Dell 工程师提供的方法: Linux_Enumeration_of_NICs.pdf (43.81 KB, 下载次数: 419)
Ethernet-HOWTO: Ethernet-HOWTO.pdf (311.33 KB, 下载次数: 468)

----------------
Linux系统,4张网卡,两张 82576的,两张 82571EB 的。
01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
04:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
04:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)


初始安装的系统是CentOS 5.5,内核版本是2.6.18-194.el5xen
/etc/modprobe.conf 文件中关于网卡的内容如下:
alias eth0 igb
alias eth1 igb
alias eth2 e1000e
alias eth3 e1000e

可见两张 82576 网卡对应 eth0 和 eth1,均使用 igb 驱动。
两张 82571EB 网卡对应 eth2 和 eth3,均使用 e1000e 驱动。

这里我重新制作了内核安装包,使用 2.6.24 的内核。由于该版本内核并没有 igb 驱动。我从 intel 官方下载 igb 驱动,并移植到内核中。
但是进入 2.6.24 的内核下,发现 eth2 网卡没有启动。
同时,检查其他三张网卡:
[root@xxx ~]# ethtool -i eth0
driver: igb
version: 2.4.8
firmware-version: 1.4-3
bus-info: 0000:01:00.0
[root@xxx ~]# ethtool -i eth1
driver: e1000
version: 7.3.20-k2-NAPI
firmware-version: 5.6-2
bus-info: 0000:04:00.1
[root@xxx ~]# ethtool -i eth3
driver: igb
version: 2.4.8
firmware-version: 1.4-3
bus-info: 0000:01:00.1
发现 eth0 和 eth3 使用的 igb 驱动,eth2 使用了 e1000 驱动。而且根据 bus-info 可以看出,新的内核下,对四张网卡识别的顺序和安装的发行版上有所不同。

同时,查看 /proc/net/dev
Inter-|   Receive                                                |  Transmit
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:7476419692 1424305    0    0    0     0          0         0 7476419692 1424305    0    0    0     0       0          0
__tmp358702611:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  eth1:51413066439 479078418    0  536    0     0          0         1 1146871974797 787610625    0    0    0     0       0          0
  eth0: 1825946   30420    0    0    0     0          0         0     1182      23    0    0    0     0       0          0
  eth3:48131386965 459275416    0    0    0     0          0         0 1147067104897 789553247    0    0    0     0       0          0
bond0:99544453404 938353834    0  536    0     0          0         1 2293939079694 1577163872    0    0    0     0       0          0

发现有一个 __tmp 开头的接口。我怀疑应该是 eth2,只是没有别正确识别。
另外,常见的 /proc/net/dev 是按照 eth 的编号顺序显示的,这里也发生变化了。
请大家帮忙看一下是什么原因。
作者: duanjigang    时间: 2010-12-10 11:16
参考:
使用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的驱动。
作者: chenyx    时间: 2010-12-10 11:19
2楼的回帖太明了了,收藏备用
作者: 程序c    时间: 2010-12-10 11:21
受教了,我也MARK一下,有时候我也遇到过这样的问题
作者: Godbach    时间: 2010-12-10 11:22
duanjigang 兄的资料非常实用啊,谢谢。

BTW,duanjigang 有没研究过这种现象的深层次的原因啊
作者: Godbach    时间: 2010-12-10 11:31
duan 兄的回复,也让我想起来了,以前的设备有更多网卡的情况下,生产系统时,有一个步骤就是要处理网卡顺序的工作。
本以为四张网卡不容易乱序,结果也出现了。
作者: duanjigang    时间: 2010-12-10 12:34
duanjigang 兄的资料非常实用啊,谢谢。

BTW,duanjigang 有没研究过这种现象的深层次的原因啊
Godbach 发表于 2010-12-10 11:22



    呵呵,我觉得通过内核代码的修改应该能正确处理网卡的乱序问题,最起码能够让它不出现随机名字。
我还没亲自研究这个代码,但是以前看过ifup和ifdown触发的那几个内核消息处理函数,不知道是不是在这块能做文章?抑或是register_netdevice那块能解决。
首要问题应该是搞清楚系统识别网卡,加载网卡配置的步骤吧
作者: 帅绝人寰    时间: 2010-12-10 12:39
这个可能是pci枚举时, 深度优先 or 广度优先造成的不同。

boot时加参数可以指定枚举用的方式。
作者: Godbach    时间: 2010-12-10 12:43
回复 7# duanjigang
嗯,有时间了研究一下内核代码
作者: Godbach    时间: 2010-12-10 12:44
这个可能是pci枚举时, 深度优先 or 广度优先造成的不同。

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

多谢提示。

如果我没有指定 boot 的参数。两个不同的内核版本,有没有可能使用不同的枚举方式
作者: wzypunk    时间: 2010-12-10 13:30
貌似和设备识别的先后有关系,比如板载网卡可能是eth0,如果禁用的话,那么外接网卡是eth0,如果这个时候启用板载网卡,就是eth1了,有资料说可以通过udev的/etc/udev/rules.d/70-persistent-net.rules来调整
作者: Godbach    时间: 2010-12-10 13:37
如果启用的 bond 接口的话,从属于 bond 的 eth 口的配置好像会被删除
作者: smalloc    时间: 2010-12-10 14:23
看起来像是双向循环连表的顺序问题.第一个按正向遍历初始化.第2个按反向遍历.
理由:假设射是深度/广度区别第2次也不应该在eth1和 eth2之间弄颠倒.
所以应该一直是一致的顺序.假设从来排序没有被颠倒.那么第2次的1 2 3 恰好是倒序.那么说明连表起始还是0.只不过这次反向遍历
作者: Godbach    时间: 2010-12-10 16:06
机器是多核的。
而且不同的机器,并不全都是这个一个顺序
作者: 流氓无产者    时间: 2010-12-13 09:22
这个问题也困扰我很久,理论上一样的算法一样的代码不应该出现这样的随机性啊
作者: stam0    时间: 2010-12-13 09:40
貌似和设备识别的先后有关系,比如板载网卡可能是eth0,如果禁用的话,那么外接网卡是eth0,如果这个时候启 ...
wzypunk 发表于 2010-12-10 13:30



赞一个,linux下,大部分设备的设备名称,都是可以通过udev规则来指定的,不同的发行版,规则稍有差异,但不大,参考一下manual应该就可以了。rh与suse的规则文件,都是放置于/etc/udev/rules.d/目录下,只需要更改对应文件中的配置,然后重启机器即可。
作者: Godbach    时间: 2010-12-13 09:49
这个问题也困扰我很久,理论上一样的算法一样的代码不应该出现这样的随机性啊
流氓无产者 发表于 2010-12-13 09:22


你现在解决了吗
作者: Godbach    时间: 2010-12-13 09:50
赞一个,linux下,大部分设备的设备名称,都是可以通过udev规则来指定的,不同的发行版,规则稍有差异,但不大,参考一下manual应该就可以了。rh与suse的规则文件,都是放置于/etc/udev/rules.d/目录下,只需要更改对应文件中的配置,然后重启机器即可。

多谢。我熟悉一下 udev
作者: xs3c    时间: 2010-12-13 13:18
本帖最后由 xs3c 于 2010-12-13 13:22 编辑

那个modprobe.conf文件没有必要改吧,alias eth0 forcedeth 只是个别名而已。而且另外一种方法就是通过udev 当然也是使用MAC地址来。我们现在也是用这种方式,不过在一台机器上绑定了MAC 用ghost备份后,拿到其他机子上恢复还是个麻烦问题?
作者: Godbach    时间: 2010-12-13 22:46
那个modprobe.conf文件没有必要改吧,alias eth0 forcedeth 只是个别名而已。而且另外一种方法就是通过udev ...
xs3c 发表于 2010-12-13 13:18

使用 MAC 地址也可能会有问题。
比如我又用了 bond 接口,把几个 eth 口都 bond 在一起了,那么这几个 NIC 的 MAC 都和 bond 接口一样了。
作者: 流氓无产者    时间: 2010-12-14 08:51
你现在解决了吗
Godbach 发表于 2010-12-13 09:49



    没有,应用程序在启动前,先做一个物理绑定,根据pci address
作者: zhengfish    时间: 2010-12-14 09:19
回复 5# Godbach


# cat /etc/udev/rules.d/70-persistent-net.rules
# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.

# PCI device 0x14e4:0x1677 (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:13:72:8d:11:22", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="d8:5d:4c:6f:33:44", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
作者: platinum    时间: 2010-12-14 09:26
早期的时候的确很头疼,先在都是通过 udev 绑定网卡名称和具体网卡 ID 号了
作者: Godbach    时间: 2010-12-14 10:51
回复 22# zhengfish
# cat /etc/udev/rules.d/70-persistent-net.rules
# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.

# PCI device 0x14e4:0x1677 (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:13:72:8d:11:22", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="d8:5d:4c:6f:33:44", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"


这里的 address 是网卡的 MAC 地址吧。如果启用了 bond 接口,从属于同一个 bond 的几个网卡就会变成同一个  MAC 了。
作者: Godbach    时间: 2010-12-14 10:52
先在都是通过 udev 绑定网卡名称和具体网卡 ID 号了

白金兄,你这里值的网卡 ID 号是 PCI 的 ID 编号吗
作者: Godbach    时间: 2010-12-14 10:53
BTW,白金兄能否也贴个你配置网卡的实例啊,谢谢了。
作者: Godbach    时间: 2010-12-14 11:41
从网上看到一些 udev 配置网卡的例子
This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x10ec:0x8139 (8139cp) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:db:6b:b0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:0x8139 (8139cp) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:32:ed:8d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x10ec:0x8139 (8139cp)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:eb:f5:b9", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x10ec:0x8139 (8139cp)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:36:18:14:51", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

# PCI device 0x10ec:0x8139 (8139cp)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:36:84:02:29", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4"

# PCI device 0x10ec:0x8139 (8139cp)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:36:63:ef:de", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth5"

感觉主要使用的特征就是判断 MAC 地址。这个和前面 duanjigang 兄回帖使用的绑定 MAC 地址的方式,就个人理解,应该是同一种思想的不同实现。
而我现在的情况,是设备已经启用了 bond0,有多个网卡都从属于 bond0, 其 MAC 地址都是一样的。
作者: xs3c    时间: 2010-12-14 13:55
从网上看到一些 udev 配置网卡的例子

感觉主要使用的特征就是判断 MAC 地址。这个和前面 duanjigang 兄回 ...
Godbach 发表于 2010-12-14 11:41



  ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:01:08.0",     NAME="eth1"
楼主用这个时候试试,
我的是两个网卡,开始的时候,这个网卡对应的名字的是eth0。我像上面这样改了,重启发现网卡名字修改为eth1了。
作者: Godbach    时间: 2010-12-14 14:20
回复 28# xs3c

多谢 LS 的。
我刚才也在测试新添加的 udev 规则。系统默认有个 60-net.rules
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"

其中蓝色加粗那一行是我添加上去的,写的比较简单,初步测试,已经可以正确工作。
作者: wolaiye05    时间: 2010-12-14 23:28
看到大家的分析,忍不住想收藏下,坐下懒人了。有机会再回复下
作者: bo8362    时间: 2010-12-15 08:27

作者: hw123    时间: 2010-12-16 09:33
QUOTE:alias eth0 igb
alias eth1 igb
alias eth2 e1000e
alias eth3 e1000e


网卡乱序解决方法:

(1)编辑文件/sbin/hwdown,将其中如下语句注释掉:
echo -n $HWD_BUSID > "$SYSFS_DRIVER_PATH/unbind
(2)将/etc/sysconfig/network/config中的FORCE_PERSISTENT_NAMES由yes改为no
(3)将/etc/udev/rules.d/30-net_persistent_names.rules文件中以SUBSYSTEM=="net"开头的行全部删除。
(4)在/etc/init.d/boot.local文件的最后添加四行:
rmmod igb
rmmod e1000e
modprobe e1000e
modprobe igb
(5)reboot重启系统
作者: fred_56    时间: 2010-12-16 13:43
udev是个好东西
作者: dreamice    时间: 2010-12-16 13:56
我的网卡情况:
[root@localhost ~]# ethtool -i eth0
driver: e1000e
version: 0.3.3.3-k2
firmware-version: 0.5-7
bus-info: 0000:01:00.0

[root@localhost ~]# cat /etc/modprobe.conf
alias eth0 e1000

按道理modprobe.conf应该是e1000e才对吧?
作者: Godbach    时间: 2010-12-16 16:32
你的 e1000e 驱动版本很低啊,现在都到 1.3.0 了
作者: yuhuohu    时间: 2010-12-17 14:27
收藏,那是必须的
作者: Godbach    时间: 2010-12-17 14:59
回复 36# yuhuohu

yuhuohu 兄也来了,荣幸之至啊。:wink:
作者: ricks_wu    时间: 2010-12-20 11:25
多网卡mark
作者: luoyan_xy    时间: 2010-12-24 18:54
回复 29# Godbach


     我现在也遇到了这个问题了,在两个不同的系统下,设备上四个网口的顺序和名称是不同的。

   你们所说的绑定ID,那个ID是什么ID呢,看你们的讨论没看太明白。。。
作者: waleliu    时间: 2011-02-25 22:20
终于能发言了。被这个问题困扰了好几天了。
作者: waleliu    时间: 2011-02-25 22:28
请教god版主:
我的主机有两个自带网口,和一块PCIE的intelpro1000网卡。用网口来做bonding,一开始也出现__tmp的设备名,后来按照提示修改udev后,ifconfig信息终于正常了。但是netstat -rn缺省路由却发现iface是eth1而不是boding,
# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
222.88.30.0     0.0.0.0         255.255.255.128 U         0 0          0 bond0
222.88.30.0     0.0.0.0         255.255.255.128 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 bond0
0.0.0.0         222.88.30.1     0.0.0.0         UG        0 0          0 eth1
从而造成拔开网线做切换测试的时候只能eth1能通过网关连到外网,另一个网卡生效的时候只能连通内网IP,不能连到外网。请高人们指点迷津。
作者: waleliu    时间: 2011-02-25 22:29
本帖最后由 waleliu 于 2011-02-25 22:48 编辑

请教god版主:
我的主机有两个自带网口,和一块PCIE的intelpro1000网卡。用网口来做主备形式的bonding,一开始也出现__tmp的设备名,后来按照提示修改udev后,ifconfig信息终于正常了。但是netstat -rn缺省路由却发现iface是eth1而不是boding,这个项目总共5台设备,其中一台的缺省路由就能加载到bond0上,断开active网线的切换后还能ping通外网。
# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
222.88.30.0     0.0.0.0         255.255.255.128 U         0 0          0 bond0
222.88.30.0     0.0.0.0         255.255.255.128 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 bond0
0.0.0.0         222.88.30.1     0.0.0.0         UG        0 0          0 eth1

其它4台主机情况如上,并且做断开网线切换测试的时候只能在eth1通过网关连到外网,另一个网卡生效的时候只能连通内网IP,不能连到外网。请高人们指点迷津。
作者: waleliu    时间: 2011-02-25 22:31
再附上我的配置和硬件信息
# more /etc/modprobe.conf
alias eth0 e1000e
alias eth1 bnx2
alias eth2 bnx2
alias scsi_hostadapter cciss
alias scsi_hostadapter1 ata_piix
alias bond0 bonding
options bond0 miimon=100 mode=1

# more /etc/sysconfig/network-scripts/ifcfg-b*
# Intel Corporation 82572EI Gigabit Ethernet Controller (Copper)
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETMASK=255.255.255.128
IPADDR=222.88.30.15
USERCTL=no
GATEWAY=222.88.30.1
TYPE=Ethernet

more /etc/sysconfig/network-scripts/ifcfg-e*
::::::::::::::
/etc/sysconfig/network-scripts/ifcfg-eth0
::::::::::::::
# Intel Corporation 82572EI Gigabit Ethernet Controller (Copper)
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
#HWADDR=00:22:64:2E:02:0A
USERCTL=yes
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
::::::::::::::
/etc/sysconfig/network-scripts/ifcfg-eth2
::::::::::::::
# Intel Corporation 82572EI Gigabit Ethernet Controller (Copper)
DEVICE=eth2
ONBOOT=yes
BOOTPROTO=none
#HWADDR=00:22:64:2E:02:0A
USERCTL=yes
MASTER=bond0
SLAVE=yes
TYPE=Ethernet


06:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
08:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
25:00.0 Ethernet controller: Intel Corporation 82572EI Gigabit Ethernet Controller (Copper) (rev 06)

# dmesg |grep eth
eth0: (PCI Express:2.5GB/s:Width x1) 00:18:71:ec:db:55
eth0: Intel(R) PRO/1000 Network Connection
eth0: MAC: 1, PHY: 4, PBA No: d70413-003
eth1: Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz found at mem f8000000, IRQ 169, node addr 0022642e0208
eth2: Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz found at mem fa000000, IRQ 177, node addr 0022642e020a
bonding: bond0: Adding slave eth0.
bonding: bond0: enslaving eth0 as a backup interface with a down link.
bonding: bond0: Adding slave eth2.
bnx2: eth2: using MSI
bonding: bond0: enslaving eth2 as a backup interface with a down link.
eth0: Link is Up 1000 Mbps Full Duplex, Flow Control: None
bonding: bond0: link status definitely up for interface eth0.
bonding: bond0: making interface eth0 the new active one.
bnx2: eth2 NIC Copper Link is Up, 1000 Mbps full duplex
bonding: bond0: link status definitely up for interface eth2.
bnx2: eth1: using MSI
ADDRCONF(NETDEV_UP): eth1: link is not ready
eth0: Link is Down
bonding: bond0: link status definitely down for interface eth0, disabling it
bonding: bond0: making interface eth2 the new active one.
eth0: Link is Up 1000 Mbps Full Duplex, Flow Control: None
bonding: bond0: link status definitely up for interface eth0.
bnx2: eth2 NIC Copper Link is Down
bonding: bond0: link status definitely down for interface eth2, disabling it
bonding: bond0: making interface eth0 the new active one.


# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 200

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:18:71:ec:db:55

Slave Interface: eth2
MII Status: down
Link Failure Count: 1
Permanent HW addr: 00:22:64:2e:02:0a

# ifconfig
bond0     Link encap:Ethernet  HWaddr 00:18:71:ECB:55  
          inet addr:222.88.30.15  Bcast:222.88.30.127  Mask:255.255.255.128
          inet6 addr: fe80::218:71ff:feec:db55/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:4275 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1217 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:408001 (398.4 KiB)  TX bytes:129185 (126.1 KiB)

eth0      Link encap:Ethernet  HWaddr 00:18:71:ECB:55  
          inet addr:222.88.30.15  Bcast:222.88.30.127  Mask:255.255.255.128
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:4025 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1159 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:385505 (376.4 KiB)  TX bytes:121566 (118.7 KiB)
          Memory:fdfe0000-fe000000

eth1      Link encap:Ethernet  HWaddr 00:22:64:2E:02:08  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:169 Memory:f8000000-f8012100

eth2      Link encap:Ethernet  HWaddr 00:18:71:ECB:55  
          UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:250 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:22496 (21.9 KiB)  TX bytes:7619 (7.4 KiB)
          Interrupt:177 Memory:fa000000-fa012100

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1357 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1357 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2225488 (2.1 MiB)  TX bytes:2225488 (2.1 MiB)

# ethtool -i eth*
Cannot get driver information: No such device
[root@WAP etc]# ethtool -i eth0
driver: e1000e
version: 0.3.3.3-k4
firmware-version: 5.11-10
bus-info: 0000:25:00.0
[root@WAP etc]# ethtool -i eth1
driver: bnx2
version: 1.7.9-1
firmware-version: 1.9.6
bus-info: 0000:06:00.0
[root@WAP etc]# ethtool -i eth2
driver: bnx2
version: 1.7.9-1
firmware-version: 1.9.6
bus-info: 0000:08:00.0
作者: Godbach    时间: 2011-02-25 23:03
LS 给的配置是想说明什么呢
作者: waleliu    时间: 2011-02-26 19:01
回复 44# Godbach


    我想问的就是,我做了bonding后,用netstat -rn看缺省网关的iface是一个物理网口而不是bond0,这造成我做断网测试的时候,只有一个网口能联通外网,另一个网口active的时候只能连到内网不能通过网关连到外网。
   我已经反复修改modprobe.conf和Ifc-ethx的配置多次,思路已经混乱了。希望各位高手能够指点迷津。
作者: Godbach    时间: 2011-02-26 19:35
  我想问的就是,我做了bonding后,用netstat -rn看缺省网关的iface是一个物理网口而不是bond0,这造成我做断网测试的时候,只有一个网口能联通外网,另一个网口active的时候只能连到内网不能通过网关连到外网。

这个要搜索一下, bonding 我没有深入研究过。
作者: wzhuzhu    时间: 2011-02-26 19:57
确定网卡顺序其实可以利用文件:
/etc/udev/rules.d/70-persistent-net.rules
利用udev来确定网卡顺序的。
作者: waleliu    时间: 2011-02-26 21:21
回复 47# wzhuzhu


    项目有5台一样配置的主机,都安装的是AS 5.3。目前只有一台主机完全正常。有一台主机我参考god版的写法在60-net.rules文件添加了bus和eth的对应关系,
但是缺省路由还是不正确,感觉问题不是出在设备顺序上了。
   路由的加载那位继续指点一下。
作者: Godbach    时间: 2011-02-27 07:06
回复 48# waleliu

cat /proc/net/dev 看一下。
另外,modprobe.confg 也查一下
作者: waleliu    时间: 2011-02-27 09:06
回复 49# Godbach

因为我采用的是failover的bond,如果只是在内网使用的话已经到达bond的效果(断开任意一根网线,网络不会断)。但问题就出在机器要通过网关访问外网的时候只能在某一个口才行。
我可以在登录到系统后手工执行route add添加网关后就能连到外网了。于是我在rc.local里添加了route add default gw x.x.x.x也没有效果。总不能每次重启都去手工添加一下吧,太郁闷了。
dev文件每行后面还有很多为0的信息感觉没有就没贴出来。

     cat /proc/net/dev
Inter-|   Receive|  Transmit
face |bytes    packets
    lo: 2428752    1585
  eth1:       0       0
  eth0:  119975    1255
  eth2:  101603    1074
  sit0:       0       0
bond0:  221578    2329


more /etc/modprobe.conf
alias eth0 bnx2
alias eth1 bnx2
alias eth2 e1000e
alias scsi_hostadapter cciss
alias scsi_hostadapter1 ata_piix
alias bond0 bonding
options bond0 miimon=100 mode=1
作者: Godbach    时间: 2011-02-27 09:43
ethtool -i ethX
查看一下这几个设备是否和对应的驱动一致。
感觉你的网卡顺序乱了
作者: waleliu    时间: 2011-02-27 12:34
我能否在udev里指定好eth,然后删除modprobe里eth的alias,再在network-srcipts里做好相应bonding就行了呢? 感觉都做设置的话互相影响了。
作者: waleliu    时间: 2011-02-27 13:00
我添加了这几句:
SUBSYSTEM=="net",ACTION=="add",BUS=="pci", ID=="0000:25:00.0",DRIVER=="e1000e",NAME="eth0"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci", ID=="0000:06:00.0",DRIVER=="bnx2",NAME="eth1"
SUBSYSTEM=="net",ACTION=="add",BUS=="pci", ID=="0000:08:00.0",DRIVER=="bnx2",NAME="eth2"
作者: waleliu    时间: 2011-02-27 13:03
# ethtool -i eth0
driver: e1000e
version: 0.3.3.3-k4
firmware-version: 5.11-10
bus-info: 0000:25:00.0
[root@CMS ~]# ethtool -i eth1
driver: bnx2
version: 1.7.9-1
firmware-version: 1.9.6
bus-info: 0000:06:00.0
[root@CMS ~]# ethtool -i eth2
driver: bnx2
version: 1.7.9-1
firmware-version: 1.9.6
bus-info: 0000:08:00.0
作者: waleliu    时间: 2011-02-27 13:07
netstat -rn
0.0.0.0         222.88.30.1     0.0.0.0         UG        0 0          0 eth2
作者: Godbach    时间: 2011-02-27 16:35
我添加了这几句:
SUBSYSTEM=="net",ACTION=="add",BUS=="pci", ID=="0000:25:00.0",DRIVER=="e1000e",NAM ...
waleliu 发表于 2011-02-27 13:00


udev 中固定 PCI ID, driver 和 ifname 应该就可以了
作者: xiaozhenggang    时间: 2011-03-03 12:58

作者: rhjdragon    时间: 2011-03-28 10:16
机器批量备份还原怎么办?还要每台机器还原后都再修改一次配置文件么?
作者: Godbach    时间: 2011-04-20 16:17
1 楼中添加了解决方法
作者: Godbach    时间: 2011-04-21 11:03
本帖最后由 Godbach 于 2011-04-21 11:05 编辑

系统有四个网口,eth0~eth3
其中 bond0 包括 eth1 ~eth3
eth0 和 bond0 都配有 IP。

如果按照 1楼的 rules编写,生成四个网口的规则
# cat /etc/udev/rules.d/60-net.rules
ACTION=="add", SUBSYSTEM=="net", IMPORT{program}="/lib/udev/rename_device"
SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/net.hotplug"
DRIVER=="e1000e",ID=="0000:03:00.0",NAME="eth0"
DRIVER=="e1000e",ID=="0000:03:00.1",NAME="eth1"
DRIVER=="e1000e",ID=="0000:06:00.0",NAME="eth2"
DRIVER=="e1000e",ID=="0000:07:00.0",NAME="eth3"

我的系统是 CentOS 5.5,直接编辑了 60-net.rules
重启系统后发现,bond0 可以 ping 通,eth0 却 ping 不同, 抓包发现 eth0 收到 ping 包,但没有发包。
如果删除 eth0 对应的这条规则,重启系统后, eth0 和 bond0 都可 ping 通

ifcfg-eth0 指定了 MAC 地址
作者: Godbach    时间: 2011-05-06 11:59
1 楼增加了两篇参考文档
作者: dreamice    时间: 2011-05-06 12:03
感谢分享!
作者: preorder69    时间: 2015-11-02 21:30
我也遇到了该类似的问题,是suse 11.1的系统,我本来有4张1G的网卡,分别是eth0~3,然后在增加了一张10G的网卡后,eth的顺序会被打乱,原来的网卡连续的,现在中间会空出一个eth2或者eth3.修改/etc/udev/rules.d/70-persistent-net.rules然后reboot确实可以起作用。但是要重启系统,总不是那么方便的。 SUSE的网卡设备命名规则 (链接我发不了),这篇文章倒是讲得很清楚,只不过我不知道它里面移除网卡是个什么动作,是卸载驱动,还是。。,有人能回答下我吗?
作者: Godbach    时间: 2015-11-03 11:11
回复 63# preorder69


不是 LZ 顶起来这篇文章,我都没印象自己发过这个帖子了。

至于你说移出网卡,我觉得是不是卸载驱动应该就可以到达目标了。

   
作者: Godbach    时间: 2015-11-03 11:11
回复 63# preorder69


不是 LZ 顶起来这篇文章,我都没印象自己发过这个帖子了。

至于你说移出网卡,我觉得是不是卸载驱动应该就可以到达目标了。

   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2