panmeng
作者panmeng·2023-09-01 15:37
系统工程师·成都农商银行

Centos7 网卡命名逻辑

字数 2502阅读 2514评论 1赞 9

1、获取网卡信息

# udevadm info /sys/class/net/ens37
P: /devices/pci0000:00/0000:00:11.0/0000:02:05.0/net/ens37
E: DEVPATH=/devices/pci0000:00/0000:00:11.0/0000:02:05.0/net/ens37
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
E: ID_MODEL_ID=0x100f
E: ID_NET_DRIVER=e1000
E: ID_NET_NAME_MAC=enx000c293b31aa
E: ID_NET_NAME_PATH=enp2s5
E: ID_NET_NAME_SLOT=ens37
E: ID_OUI_FROM_DATABASE=VMware, Inc.
E: ID_PATH=pci-0000:02:05.0
E: ID_PATH_TAG=pci-0000_02_05_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=ens37
E: MAJOR=0
E: MINOR=0
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/ens37 /sys/subsystem/net/devices/ens37
E: TAGS=:systemd:
E: USEC_INITIALIZED=277347903

2、Udev的配置

udev中有3条与网卡名称有关的缺省规则(目录/usr/lib/udev/rules.d/),按顺序匹配

60-net.rules

使用/lib/udev/rename_device去查詢/etc/sysconfig/network-scripts/ifcfg*配置文件,修改HWADDR=xx:xx:xx:xx:xx:xx 的网卡名称为 DEVICE=yyyy中的"yyyy"

71-biosdevname.rules

缺省关闭,可通过内核开关biosdevname=1打开,当前无法获取名称

# biosdevname -i ens37
#

80-net-name-slot.rules

缺省打开,可通过内核开关net.ifnames=0关闭
按照以下顺序匹配

  1. ID_NET_NAME_ONBOARD
  2. ID_NET_NAME_SLOT
  3. ID_NET_NAME_PATH

如果匹配此条,则名称为ens37

3、修改内核开关

# cat /etc/default/grub  
GRUB_TIMEOUT=5  
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"  
GRUB_DEFAULT=saved  
GRUB_DISABLE_SUBMENU=true  
GRUB_TERMINAL_OUTPUT="console"  
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 spectre_v2=retpoline rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"  
GRUB_DISABLE_RECOVERY="true" 
# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot

4、总结:

  1. biosdevname获取不到信息,所以是否开启没有用
  2. net.ifname开启则为ens37,不开启则为随机eth0
  3. 使用ifcfg* rename优先级更高,但是需要注意修改名称与随机生成名称可能出现冲突,比如想交换eth0和eth1的名称,则无法实现

    # cat /var/log/messages | grep rename
    Sep 1 02:52:56 centos7_1 systemd-udevd: could not rename interface '2' from 'eth0' to 'eth1': File exists
    Sep 1 02:52:56 centos7_1 systemd-udevd: could not rename interface '3' from 'eth1' to 'eth0': File exists
  4. 自定义规则/etc/udev/rules.d/70-persistent-net.rules拥有比ifcfg*规则更高的优先级

    cat >> /etc/udev/rules.d/70-persistent-net.rules << EOF
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:3b:31:a0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:3b:31:aa", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    EOF
  5. 如果net.ifname=0,无论使用何种方式,都无法实现eth1和eth0名称交换

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

9

添加新评论1 条评论

热心冰块热心冰块项目经理浪潮INSPUR
2023-09-15 15:53
先赞一个没准啥时候用得上
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广