linux 下 网卡命名改名 | 您所在的位置:网站首页 › 无线网卡是什么名字 › linux 下 网卡命名改名 |
目录 背景 一致网络设备命名规范 biosdevname net.ifnames 系统默认命名规则 流程 rename 流程 scheme 次序 用户自定义网卡名称 内核启动参数biosdevnane、net.ifnames biosdevname net.ifname 修改网卡名称 背景 流程 编辑 grub 配置文件 重新生成 grub 配置文件 修改网卡配置文件 Linux 操作系统的网卡设备的传统命名方式是 eth0、eth1、eth2等,而 CentOS7 提供了不同的命名规则,默认是网卡命名会根据网卡的硬件信息,插槽位置等有关;来分配。这样做的优点是命名全自动的、可预知的,缺点是比 eth0、wlan0 更难读,比如 ens33 。 背景服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。 Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。 细心的同学会留意到从centos7开始一些比如ens enp等开头的网卡名称,简单了解,可以解释为centos7开始,网卡命名会根据网卡的硬件信息,插槽位置等有关; 而网上也有为那些依然想使用ethX方式命名的提供了策略。比如在内核启动参数里增加biosdevname=0 net.ifnames=0; 为什么centos7不再使用以前的ethX方式?根本是因为之前ethX方式是不确定的,每次启动可能都不同(如果没有用户自定义网卡名称的前提下); 一致网络设备命名规范在centos5的时候,我们习惯了eth0这样的网络设备命名,在centos6发现网络设备变成了em1这样的命名。 那时我们在安装的时候,给启动参数加上 biosdevname=0,就可以继续使用eth0这样的命名。 升级到centos7后,发现原有的参数biosdevname=0不起作用了,网络设备变成了eno1这样的名称。 centos7这种变化的原因是由于systemd和udev引入了一种新的网络设备命名方式:一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING)。 一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING)规范,支持 biosdevname 和 net.ifnames 两种命名规范。 biosdevnamebiosdevname 命名规范 设备 旧名称 新名称 示例 内嵌网络接口(LOM) eth[0123…] em[1234…][a] em1 PCI 卡网络接口 eth[0123…] pp[b] p3p4 虚拟功能 eth[0123…] pp_[c] p3p4_1 注: 新枚举从 1 开始。 net.ifnamesnet.ifnames 命名规范为:设备类型 + 设备位置 + 数字 设备类型 en 代表以太网wl 代表无线局域网(WLAN)ww 代表无线广域网(WWAN)设备命名 格式 描述 o :on-board device index number 板载设备索引号 s[f][d] :hotplug slot index number 热插拔插槽索引号 x:MAC address MAC 地址 ps[f][d]: PCI geographical location PCI 地理位置 ps[f][u][..][c][i]:USB port number chain USB 端口链 示例 eno1 板载1号网卡enp0s2 PCI扩展卡的2号端口ens33 热插拔插槽3号PCI-E插槽的3号端口wlp3s0 第3号PCI扩展卡的0号端口 系统默认命名规则默认情况下,systemd 会使用以下策略,采用支持的命名方案为接口命名: Scheme 1(方案 1): 如果从BIOS中能够取到可用的,板载网卡的索引号,则使用这个索引号命名,例如: eno1,如不能则尝试Scheme 2Scheme 2(方案 2): 如果从BIOS中能够取到可以用的,网卡所在的PCI-E热插拔插槽的索引号,则使用这个索引号命名,例如: ens1,如不能则尝试Scheme 3Scheme 3(方案 3): 如果能拿到设备所连接的物理位置信息,则使用这个信息命名,例如:enp2s0,如不能则尝试Scheme 5Scheme 4(方案 4): 使用网卡的MAC地址来命名,这个方法一般不使用。Scheme 5(方案 5):传统的kernel命名方法,例如: eth0,这种命名方法的结果不可预知的,即可能第二块网卡对应eth0,第一块网卡对应eth1。 流程内核在boot 过程是默认使用ethX方式来命名的,每次启动的时候都不确定,启动会后再通过udev等方式去rename, 核心流程:明确一点是,linux内核启动过程中,会默认给网卡以ethX方式随机命名,然后再通过systemd去rename成其他名称。关键字,rename! rename 流程默认rename流程: 按照如下顺序执行udev的rule 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 step1 依据/usr/lib/udev/rules.d/60-net.rules, 查看是否有ifcfg-xx配置文件(路径在/etc/sysconfig/network-scripts/),是否有定义了指定MAC地址的配置文件(ifcfg-xx ,xx必须和配置文件的内容DEVICE一致),如果有,则命名该网卡; step2 依据/usr/lib/udev/rules.d/71-biosdevname.rules,如果biosdevname使能了(安装了biosdevname这个包,且内核启动参数显式设置为1),且网卡没有在step1中定义,则按照biosdevname命名规则rename网卡;(注意,如果没有安装biosdevname这个包,就没有这个文件) step3, 依据/lib/udev/rules.d/75-net-description.rules,将udev工具会根据device属性将填写网卡的属性命名,可能一个网卡会有多个维度的名称哦; step4,udev 根据step3中的赋值,按照指定的scheme规则,去给在step1 step2中没有命名的网卡命名;强调:这个step顺序是在我们没有自定义自己的rules的前提下,如果用户自定义了自己的rules,则用户自定义为优先级最高; scheme 次序上面step4中提到,按照指定的scheme规则,这个规则是什么呢? 首先说step3中,提到按照网卡的不同属性命名,系统识别网卡有好几种维度: 比如 BIOS provided index numbers for on-board devices (example: eno1), 比如:BIOS provided PCI Express hotplug slot index numbers (example: ens1) 比如:physical location of the connector of the hardware (example: enp2s0), 比如:mac地址 同一个网卡通常同时具有多个维度的名称,systemd在选取的时候,按照有先后次序,使用先命中的; 顺序可以简单理解为(eno1-ens1-enp1) eth2这个网卡,scheme名称有3个,如果systemd自选,会使用哪个?ens5f0.(那这个为什么是/sys/class/net/eth2 而不是/sys/class/net/ens5f0 ,那是因为自定义的缘故;) 用户自定义网卡名称1、在用户没有自定义rules文件前提下,step1中的网卡命名方式也可认为是 一种用户自定义的网卡命名;即在/etc/sysconfig/network-scripts/ifcfg-xx 文件,xx就是这个网卡名称,文件内容中体现MAC_ADDRESS、NAME,这种情况下,则会按照配置文件中指定的名称来命名网卡; 2、如果用户自定义了rules文件,放在/etc/udev/rules.d/目录下,则这个优先级是最高的;比1中ifcfg-xx方式优先级更高,但是如果两者不一致,则在重启network服务时,会依据ifcfg-xx,所以用户不应该同时采用里两种方式给同一个网卡命不同的名称; /etc/udev/udev.conf是udev主配置文件,用户定制的规则文件在/etc/udev/rules.d目录下。对于网卡设备的配置一般社区约定的是/etc/udev/rules.d/70-persistent-net.rules文件。 示例内容如下: SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="24:6e:96:03:5c:8d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 上述规则内容描述的是在内核发现有网络设备添加时,内核网络设备描述名文eth*格式的设备,变名为eth0. 内核启动参数biosdevnane、net.ifnames默认就是内核启动参数没有biosdevname 也没有net.ifnames 参数; 其实默认是net.ifnames=1,biosdevname=0;这种情况下就按照rename 中进行网卡命名;eno-ens-enp的方式逐个匹配。 但是如果使能了biosdevname.则会使用biosdevname的命名 step1没有命名的网卡;要么是em开头,要么是p开头; biosdevname怎么样使能biosdevname呢? 2个条件: 1》安装biosdevname包 2》在内核启动参数中明确 biosdevname=1. 否则使能不了; 但是不管怎么样,如果用户自定义了udev rules,则用户自定义的rules优先! 这是总述,但凡用户自定义rules,优先级最高; net.ifname内核启动参数net.ifname: 如果在启动参数中增加net.ifname=0,这个文件会在/lib/udev/rule.d/80-net-name-slot.rules体现使用价值,则告诉系统不用scheme的方式来命名,这个时候,会恢复ethx这种不确定性的命名方式; 修改网卡名称 背景如果不习惯使用新的命名规则,可以恢复使用传统的方式命名;另外我们在做一些操作的时候,往往需要进行批量处理,如果说每台主机的网卡名都是一样的,这就给我们提供了很大的便利,我们可以进行批处理操作; 流程 编辑 grub 配置文件vim /etc/sysconfig/grub # 其实是/etc/default/grub的软连接 # 为GRUB_CMDLINE_LINUX变量增加2个参数,具体内容如下:GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap net.ifnames=0 biosdevname=0 rhgb quiet" 重新生成 grub 配置文件grub2-mkconfig -o /boot/grub2/grub.cfg 修改网卡配置文件原来网卡配置文件名称为 ifcfg-ens33,这里需要修改为 ethx 的格式,并适当调整网卡配置文件。 mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0# 修改ifcfg-eth0文件如下内容(其它内容不变) NAME=eth0 DEVICE=eth0 # systemctl restart network.service # 重启网络服务 |
CopyRight 2018-2019 实验室设备网 版权所有 |