在 CentOS 7 之前以太网的传统命名方式为 eth{0,1,2,...}
。
假如我的主机本来有一块网卡名为 eth0
,此时我们给这个主机新加一个网卡,内核读取到没有记录这个网卡的 MAC 地址时,就会给这块网卡生成一个新的网卡名,也就是在原来的网卡名基础上递增为 eth1
。
CentOS 7 的网卡采用了一种具有一致性、可预测功能的命名机制,该种命名方式让接口更易于识别。
CentOS 7 还保留了类似于 CentOS 6 的 udev 命名机制,Linux 内核从 2.6 版本之后开始,就可以使用 udev 协助管理系统中各设备名称。例如,磁盘设备排序、网卡设备排序等。udev 能动态地在 /dev
目录里产生自定义的、标识性强的设备文件或设备链接,在 CentOS 7 上 udev 支持多种命名方案(基于 systemd 或 biosudev 实现):
- 基于 Firmware(硬件)命名;
- 基于拓扑结构命名(网卡接口);
命名方式
- 如果 Firmware 或 BIOS 为主板上继承的设备提供的索引信息可用,且可预测,则根据此索引进行命名,例如 eno1;
- 如果 Firmware 或 BIOS 为 PCI-E 扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如 ens1;
- 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如:enp2s0;
- 如果用户显式启用,也可根据 MAC 地址进行命名,如 enx3245ed3f32;
- 上述均不可用时,则使用传统命名机制,例如 eth0;
上述命名方式中,有的需要 biosdevname 程序的参与。
名称组成格式
名称的组成格式有如下几种:
en
:ethernet,以太网;wl
:wlan,无线局域网设备;ww
:wwan,无线广域网设备;
各组成格式下的名称还可分为不同的类型:
o<index>
:集成设备的设备索引号;s<slot>
:根据设备所插入的插槽索引号;x<MAC>
:基于 MAC 地址;p<bus>s<slot>
:根据 PCI 总线的标号和 PCI 总线上的插槽编号。如 enp2s1 就表示 PCI 总线的第 2 个总线的第 1 个插槽上的设备;
网卡设备的命名过程
- udev 使用辅助工具程序
/lib/udev/rename_device
、/usr/lib/udev/rules.d/60-net.rules
按其规则试图重命名; - biosdevname 会根据
/usr/lib/udev/rule.d/71-biosdevname.rules
相关规则试图重命名; - 通过检测网络接口设备,根据
/usr/lib/udev/rules.d/75-net-description
指定的规则试图重命名;
如果上面几步试图重命名网卡的操作失败,则使用传统网卡命名方式(eth{0,1,2,...})。
回归传统命名方式
要使用传统命名方式就需要禁用上面网卡设备的 3 个命名过程,不执行这三个命名过程则默认就是传统命名方式。
可以通过给内核传递参数以禁止重命名网络接口名称的 3 个过程,步骤如下:
1、编辑 /etc/default/grub
文件,给 GRUB_CMDLINE_LINUX
的值添加上 net.ifnames=0
:
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="net.ifnames=0 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
2、第 1 步不会立即生效,还要使用 grub 的工具为 grub2 生成新的配置文件,执行下面命令:
[root@localhost default]# grub2-mkconfig -o /etc/grub2.cfg
3、重启,使用 ifconfig
查看网卡设备名称:
4、会发现网卡名称虽然已经修改为了 eth0,但由于网卡名称发生了改变,网卡没有了 IP 地址,所以网卡信息需要重新配置,重命名原网卡配置文件:
cd /etc/sysconfig/network-scripts
mv ifcfg-ens33 ifcfg-eth0
5、修改 ifcfg-eth0
中的 DEVICE
和 NAME
值为 eth0
。
6、执行 service network restart
重启网卡。
7、再次执行 ifconfig
查看网卡信息:
完成~
评论区