银河麒麟高级服务器操作系统网卡命令为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会读取)。