银河麒麟系统修改网卡为eth0和网卡命名规则介绍

​ 前言:系统中提供在网络接口中使用一致且可预期的网络设备命名方法。这些功能会更改系统中的网络接口名称,以便定位和区分这些接口。在系统中,udev 支持大量不同的命名方案。默认是根据固件、拓扑及位置信息分配固定名称。这样做的优点是命名可完全自动进行,并可预期,即使添加或删除硬件后也会保留其名称(不会出现重复枚举的情况),同时可顺利更换损坏的硬件。

一 命名层级介绍

1 命名方案层级结构

默认情况下,systemd 会使用以下策略,采用支持的命名方案为接口命名:

方案1:
如果固件或 BIOS 信息适用且可用,则使用整合了为板载设备提供索引号的固件或 BIOS 的名称(例如:eno1),否则请使用方案 2。

方案2:
如果固件或 BIOS 信息适用且可用,则使用整合了为 PCI 快速热插拔插槽提供索引号的固件或 BIOS 名称(例如 ens1),否则请使用方案 3。 

方案3:
如果硬件连接器物理位置信息可用,则使用整合了该信息的名称(例如:enp2s0),否则请使用方案 5。 

方案4:
默认不使用整合接口 MAC 地址的名称(例如:enx78e7d1ea46da),但用户可选择使用此方案。

方案5:
传统的不可预测的内核命名方案,在其他方法均失败后使用biosdevname,net.ifnames两个参数均为0(例如: eth0),则会使用该方案。

2 自定义udev规则读取顺序

用户已添加udev规则,该规则比内核设备名称优先级更高,则会优先使用这些规则。

systemd中的实际执行顺序,按照如下顺序执行udev的规则

1./usr/lib/udev/rules.d/60-net.rules
2./usr/lib/udev/rules.d/71-biosdevname.rules
3./lib/udev/rules.d/75-net-description.rules
4./usr/lib/udev/rules.d/80-net-name-slot.rules

(1)/lib/udev/rules.d/60-net.rules 文件中的规则会让udev 帮助工具 /lib/udev/rename_device 查看所有 /etc/sysconfig/network-scripts/ifcfg-suffix 文件。如果发现包含 HWADDR 条目的 ifcfg 文件与某个接口的 MAC 地址匹配,它会将该接口重命名为 ifcfg 文件中由 DEVICE 指令给出的名称。

(2)/usr/lib/udev/rules.d/71-biosdevname.rules 中的规则让 biosdevname 根据其命名策略重命名该接口,即在上一步中没有重命名该接口、已安装 biosdevname**、**且在 boot 命令行中将 biosdevname=0 作为内核命令给出。

(3)/lib/udev/rules.d/75-net-description.rules 中的规则让 udev 通过检查网络接口设备,填写内部 udev 设备属性值 ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。注:有些设备属性可能处于未定义状态。

(4)/usr/lib/udev/rules.d/80-net-name-slot.rules 中的规则让 udev 重命名该接口,优先顺序如下:ID_NET_NAME_ONBOARD、ID_NET_NAME_SLOT、ID_NET_NAME_PATH。并提供如下信息:没有在步骤 1 或 2 中重命名该接口,同时未给出内核参数 net.ifnames=0。如果一个参数未设定,则会按列表的顺序设定下一个。如果没有设定任何参数,则不会重命名该接口。

3 可预期网络接口设备名称:biosdevname和net.ifnames两种命名规范

3.1 net.ifnames 根据接口类型以两个字母开头
1 en 代表以太网
2 wl 代表无线局域网(WLAN)
3 ww 代表无线广域网(WWAN)

实际的例子:
eno1 板载1号网卡
enp0s2 PCI扩展卡的2号端口
ens33 热插拔插槽3号PCI-E插槽的3号端口
wlp3s0 第3号PCI扩展卡的0号端口
3.2 biosdevname的命名规范为

在这里插入图片描述

实际的例子:
em1  		板载网卡
p3p4 pci	网卡
p3p4_1 		虚拟网卡

4 biosdevname/net.ifnames应用

4.1 银河麒麟系统中网卡名设置为eth0步骤

在银河麒麟系统中如果希望继续使用 eth0 这样的传统名称,或希望改成eth0这样的名称,则执行如下操作:

(1)修改启动参数,在GRUB_CMDLINE_LINUX的中加上"net.ifnames=0 biosdevname=0"的参数

vi /etc/default/grub
在这里插入图片描述

(2)重新加载到启动中

[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
BIOS
#如果输出是UEFI则表示是UEFI启动
#如果输出是BIOS则表示是传统的Legacy BIOS启动

传统的Legacy BIOS启动文件路径:
/boot/grub2/grub.cfg

UEFI启动文件路径:
/boot/efi/EFI/kylin/grub.cfg

UEFI引导执行:grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
Legacy启动执行:grub2-mkconfig -o /boot/grub2/grub.cfg

(3)重新对网卡配置文件进行命名(网卡文件全部重命名,顺便修改配置文件NAME、DEVICE的名称)mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0。

(4)reboot 重启生效

3.2 默认内核启动参数没有biosdevname 也没有net.ifnames 参数(其实默认是net.ifnames=1,biosdevname=0)这种情况下就按照eno-ens-enp的方式逐个匹配。但是如果使能了biosdevname.则会使用biosdevname的命名方案。

3.3 bios命名规则:要么是em开头,要么是p开头;怎么样使能biosdevname呢?2个条件,安装biosdevname包,且在内核启动参数中明确 biosdevname=1. 否则使能不了;但是,如果用户自定义了udev rules,则用户自定义的rules优先。也就是说,但凡用户自定义rules,优先级最高。

3.4 内核启动参数net.ifname,如果在启动参数中增加net.ifname=0,这个文件会在/lib/udev/rule.d/80-net-name-slot.rules中告诉系统,恢复ethx这种不确定性的命名方式。

二 总结

1、默认内核启动参数没有biosdevname 也没有net.ifnames 参数(其实默认是net.ifnames=1,biosdevname=0)这种情况下就按照eno-ens-enp的方式逐个匹配。但是如果使能了biosdevname.则会使用biosdevname的命名方案。

2、bios命名规则:要么是em开头,要么是p开头;怎么样使能biosdevname呢?2个条件,安装biosdevname包,且在内核启动参数中明确 biosdevname=1. 否则使能不了;但是,如果用户自定义了udev rules,则用户自定义的rules优先。也就是说,但凡用户自定义rules,优先级最高。

3、内核启动参数net.ifname,如果在启动参数中增加net.ifname=0,这个文件会在/lib/udev/rule.d/80-net-name-slot.rules中告诉系统,恢复ethx这种不确定性的命名方式。

4、严格概念上讲biosdevname/net.ifnames 不是内核启动参数,更准确的讲叫系统引导参数(dracut和systemd会读取)。

猜你喜欢

转载自blog.csdn.net/weixin_45754407/article/details/134789500
今日推荐