linux服务器实现网卡命名一致性

基于服务器开发应用系统,为了便于部署我们通常需要对于物理网口标上编号,这就需要我们实现一个功能:固化服务器网卡的命名顺序。服务器如果只是一家提供商就没有这个烦恼,烦恼来自于你有多个供货商,并且不同的客户可能需要的网卡数量还有所差异,哪怕你只有一家供货商,硬件会不会升级,不同规格的服务器是否一样?所以实现网卡命名一致性就成了一个真实需求。

其实主要的原理比较简单,就是Linux系统支持配置UDEV规则文件,可以根据mac地址对网卡重命名。就是说生成一个规则文件 “/etc/udev/rules.d/70-xxxx.rules” ,里面写上类似下面的规则:

znl.pub:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ac:1f:6b:ec:0e:4a", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ac:1f:6b:ec:0e:4b", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="6c:b3:11:08:c4:c6", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="6c:b3:11:08:c4:c4", NAME="eth3"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="58:53:c0:64:01:6f", NAME="eth4"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="58:53:c0:64:01:6e", NAME="eth5"

规则的意思是在网络接口被添加时(action=add)应用此规则。

虽然udev规则通常会在系统启动过程中最后应用,但内核命令行参数(如net.ifnamesbiosdevname)会影响早期的设备命名过程。如果你不想使用 net.ifnames 特性命名接口(如:enp0s3)或biosdevname特性命名接口(如em1,p2p1),而是更倾向于使用传统的命名方式(如ethX),可以通过修改grub配置来禁用net.ifnames和bioasdevname特性:

# 编辑/etc/default/grub文件,在GRUB_CMDLINE_LINUX变量中添加或修改参数:
GRUB_CMDLINE_LINUX="... net.ifnames=0 biosdevname=0 ..."

# 更新GRUB配置并重启系统生效:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注