Linux下网卡命名规则
rename 规则
1 2 3 4 5 6 7 8 9 10 11
| step1 依据/usr/lib/udev/rules.d/60-net.rules, 查看是否有ifcfg-xx配置文件(路径在/etc/sysconfig/network-scripts/), 是否有定义了指定MAC地址的配置文件(ifcfg-xx ,xx必须和配置文件的内容DEVICE一致),如果有,则命名改网卡;
step2 依据/usr/lib/udev/rules.d/71-biosdevname.rules,如果biosdevname使能了(安装了biosdevname这个包,且内核启动参数显式设置为1), 且网卡没有在step1中定义,则按照biosdevname命名规则rename网卡;(注意,如果没有安装biosdevname这个包,就没有这个文件)
step3, 依据/lib/udev/rules.d/75-net-description.rules,将udev工具会根据device属性将填写网卡的属性命名,可能一个网卡会有多个维度的名称;
step4,udev 根据step3中的赋值,按照指定的scheme规则,去给在step1 step2中没有命名的网卡命名;
强调:这个step顺序是在我们没有自定义自己的rules的前提下,如果用户自定义了自己的rules,则用户自定义为优先级最高
|
传统命名
centos6之前采用的都是传统的命名方式,如eth0,1…
可预测的命名
cenos7之后提供了可预测性的网卡命名方式。
1 2 3 4 5
| 如果从BIOS中能够取到可用的,板载网卡的索引号,则使用这个索引号命名,例如: eno1,如不能则尝试2 如果从BIOS中能够取到可以用的,网卡所在的PCI-E热插拔插槽(注:pci槽位号)的索引号,则使用这个索引号命名,例如: ens1,如不能则尝试3 如果能拿到设备所连接的物理位置(PCI总线号+槽位号?)信息,则使用这个信息命名,例如:enp2s0,如不能则尝试4 传统的kernel命名方法,例如: eth0,这种命名方法的结果不可预知的,即可能第二块网卡对应eth0,第一块网卡对应eth1 使用网卡的MAC地址来命名,这个方法一般不使用
|
自定义规则
1 2 3 4 5 6 7
| 在用户没有自定义rules文件前提下,step1中的网卡命名方式也可认为是一种用户自定义的网卡命名, 即在/etc/sysconfig/network-scripts/ifcfg-xx 文件,xx就是这个网卡名称,文件内容中体现MAC_ADDRESS、NAME, 这种情况下,则会按照配置文件中指定的名称来命名网卡
如果用户自定义了rules文件,放在/etc/udev/rules.d/目录下,则这个优先级是最高的; 比1中ifcfg-xx方式优先级更高,但是如果两者不一致,则在重启network服务时,会依据ifcfg-xx, 所以用户不应该同时采用里两种方式给同一个网卡命不同的名称
|
udevadm info /sys/class/net/网卡名
可以显示此时这个网卡的pcie信息,vendor_id,idbus等等信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| root@Bai5gc:/sys/class/net/eth1# udevadm info /sys/class/net/eth1 P: /devices/pci0000:00/0000:00:02.2/0000:03:00.0/net/eth1 E: DEVPATH=/devices/pci0000:00/0000:00:02.2/0000:03:00.0/net/eth1 E: ID_BUS=pci E: ID_MODEL_FROM_DATABASE=Ethernet Connection X552 10 GbE Backplane E: ID_MODEL_ID=0x15ab E: ID_NET_DRIVER=ixgbe E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link E: ID_NET_NAME_MAC=enxb4a9fca897e7 E: ID_NET_NAME_ONBOARD=eno3 E: ID_NET_NAME_PATH=enp3s0f0 E: ID_PATH=pci-0000:03:00.0 E: ID_PATH_TAG=pci-0000_03_00_0 E: ID_PCI_CLASS_FROM_DATABASE=Network controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: ID_VENDOR_ID=0x8086 E: IFINDEX=3 E: INTERFACE=eth1 E: SUBSYSTEM=net E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/eth1 E: TAGS=:systemd: E: USEC_INITIALIZED=5061037 E: net.ifnames=0
|
ps:解释一下pci地址
/pci0000:00
:这是根 PCIe 控制器的地址,pci0000:00
表示根控制器。
/0000:00:02.2
:这是连接到根控制器的第一个 PCIe 设备的地址。0000:00:02.2
表示这个设备的总线号、设备号和功能号。
/0000:03:00.0
:这是连接到第一个 PCIe 设备的下一个 PCIe 设备的地址。0000:03:00.0
表示新设备的总线号、设备号和功能号。
命名rule.d
biosdevname和net.ifnames两种命名规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| net.ifnames的命名规范为:设备类型+设备位置+数字
设备类型:
en 表示Ethernet wl 表示WLAN ww 表示无线广域网WWAN
实际的例子:
eno1 板载网卡 enp0s2 pci网卡 ens33 pci网卡 wlp3s0 PCI无线网卡 wwp0s29f7u2i2 4G modem wlp0s2f1u4u1 连接在USB Hub上的无线网卡 enx78e7d1ea46da pci网卡
biosdevname的命名规范为: 要么是em开头,要么是p开头 实际的例子:
em1 板载网卡 p3p4 pci网卡 p3p4_1 虚拟网卡
|