在使用维护过程中,经常因为添加更换网卡导致网卡的顺序产生不一至的现象
1、启动流程
1)linux内核一般会在rc.sysinit里执行/sbin/udevd -d开始执行udev程序
2)执行udev的过程中会检测所有设备,并根据不同的设备来加载不同的驱动
3)加载完相应设备的驱动后,udev会收到一个该设备的内核事件,udev会根据相应的事件来匹配相应的规则,或者是执行某些脚本修改设备名重新书写规则(rules)
4)当规则生成后,当再次产生此设备的内核事件时,则首先会匹配这些规则
这里要注意udev的两点:
1)我们可以通过udev来修改任何设备的名字
2)在我们没修改名字之前,内核已经给给设备分配了名字(值得注意这点,否则修改的名字和内核给其他设备分配的名字冲突,则会修改失败)
2、不同的网卡设备
目前为止我已知的网卡有如下几种(都是intel的):
网卡型号 所用驱动
8086:1502 e1000e
8086:10d3 e1000e
8086:150e igb
8086:105e e1000e
8086:1521 igb
这只是我接触的几种网卡,不同种类的驱动对网卡端口的命名还是会有影响的
3.pci接口的bus id号
-bash-3.2# lspci -n –D grep 0200
0000:00:19.0 0200: 8086:1502 (rev 05)
0000:01:00.0 0200: 8086:150e (rev 01)
0000:01:00.1 0200: 8086:150e (rev 01)
0000:01:00.2 0200: 8086:150e (rev 01)
0000:01:00.3 0200: 8086:150e (rev 01)
0000:03:00.0 0200: 8086:105e (rev 06)
0000:03:00.1 0200: 8086:105e (rev 06)
0000:04:00.0 0200: 8086:10d3
我们通过lspci -n -D可以查看所有的连在pci接口上的设备的busid号(第一列)和设备型号(最后一列)的对应列表,这里的0200代表的是网卡设备,通过大量的实验发现,无论网口的名字(eth*)怎么变化,在同一台机器上,他们的busid号是不变的。这里的8086:1502,8086:10d3是主板自带的两个端口,8086:150e是一个4口的Intel网卡,8086:105e是一个两口的intel网卡。由此,在这一型号的机器上,这一型号的网卡上,可已通过busid号,网卡型号来固定网口名。
2、shell编写过程
- 查看目录/etc/udev/rules.d/70-persistent-net.rules
问题发现:没有这个文件,自己手动创建也不好使,重启的时候不会执行
/lib/udev/write_net_rules这个脚本都不存在,应该是生成不了。
编写文件
命名完规则之后,网卡名称和pci的对应关系地方
----------暂时未完成还差一些测试和总结,以后有机会在继续研究------------------------------