网卡名称命名原理和修改方法
一、命名规则策略
规则1:
命名依据BIOS提供的在线硬件索引号;如果信息可读就命名,比如:eno1,否则使用规则2
规则2:
命名依据BIOS提供的PCI-E热插拔口索引号,如果信息可读就命名,比如:ens1,否则使用规则3
规则3:
命名依据硬件接口的物理位置,如果信息可读就命名,比如enp2s0,否则直接到规则5
规则4:
命名依据接口的MAC地址,默认不使用,除非用户选择使用此方案。比如enx78e7d1ea46da
规则5:
使用传统的方案,如果所有的方案都失败,则使用eth0这种样式。
二、网卡eth0命名
从centos7开始,系统默认的网卡命名有已经不是我们熟悉的eth0方式了,细心的同学会留意到一些,比如ensenp等开头的网卡名称,简单了解,可以解释为centos7开始,网卡命名会根据网卡的硬件信息,插槽位置等有关;而网上也有为那些依然想使用eth0方式命名的提供了策略。比如在内核启动参数里增加biosdevname=0 net.ifnames=0;
但是这里忽略了一个问题,那就是为什么centos7不再使用以前的eth0方式?是因为之前eth0方式是不确定的,每次启动可能都不同(如果没有用户自定义网卡名称的前提下);所以大家提供的这种办法其实是不好的;
三、核心流程
核心流程:Linux内核启动过程中,会默认给网卡以eth0方式随机命名,然后再通过systemd去rename成其他名称。
(1)如何rename?
默认rename流程,按照如下顺序执行udev的rule:
- /usr/lib/udev/rules.d/60-net.rules
- /usr/lib/udev/rules.d/71-biosdevname.rules
- /usr/lib/udev/rules.d/75-net-description.rules
- /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,依据/usr/lib/udev/rules.d/75-net-description.rules,将udev工具会根据device属性将填写网卡的属性命名,可能一个网卡会有多个维度的名称哦;
step4,udev根据step3中的赋值,按照指定的scheme规则,去给在step1 step2中没有命名的网卡命名;
强调:这个step顺序是在我们没有自定义自己的rules的前提下,如果用户自定义了自己的rules,则用户自定义为优先级最高;
(2)scheme次序
上面step4中提到,按照指定的scheme规则,这个规则是什么呢?首先说step3中,提到按照网卡的不同属性命名,系统识别网卡有好几种维度:
- BIOS提供的在线硬件索引号 (example:eno1),
- BIOS提供的PCI-E热插拔口索引号 (example:ens1)
- 硬件接口的物理位置 (example:enp2s0),
- 接口的MAC地址
同一个网卡通常同时具有多个维度的名称,systemd在选取的时候,按照有先后次序,使用先命中的;顺序可以简单理解为(eno1>ens1>enp1)
问:eth2这个网卡,scheme名称有3个,如果systemd自选,会使用哪个?
答:ens5f0.
问:那这个为什么是/sys/class/net/eth2而不是/sys/class/net/ens5f0
答:那是因为自定义的缘故,自定义拥有最高优先权
(3)用户自定义网卡名称
在用户没有自定义rules文件前提下,step1中的网卡命名方式也可认为是一种用户自定义的网卡命名,即在/etc/sysconfig/network-scripts/ifcfg-xx文件,xx就是这个网卡名称,文件内容中体现MAC_ADDRESS、NAME,这种情况下,则会按照配置文件中指定的名称来命名网卡;
如果用户自定义了rules文件(一般命名为70-persistent-net.rules),放在/etc/udev/rules.d/目录下,则这个优先级是最高的;比ifcfg-xx方式优先级更高,但是如果两者不一致,则在重启network服务时,会依据/etc/udev/rules.d下的用户定制配置文件。
(4)内核启动参数
biosdevnane
默认就是内核启动参数没有biosdevname也没有net.ifnames参数(其实默认是net.ifnames=1,biosdevname=0)这种情况下就按照第一节中顺序进行网卡命名;eno>ens>enp的方式逐个匹配。但是如果使能了biosdevname.则会使用biosdevname的命名规则将第一节没有命名的网卡进行命名。要么是em开头,要么是p开头。
怎么样使能biosdevname呢?2个条件(缺一不可):
- 安装biosdevname包
- 在内核启动参数中明确biosdevname=1.
但是不管怎么样,如果用户自定义了udev rules,则用户自定义的rules优先!
综上所述,但凡用户自定义rules,优先级最高;
net.ifnames
如果在启动参数中增加net.ifnames=0,这个文件会在/lib/udev/rules.d/80-net-name-slot.rules体现使用价值,则告诉系统不用scheme的方式来命名,这个时候,会恢复eth0这种不确定性的命名方式。
四、不要用eth0去命名
内核在boot过程是默认使用eth0方式来命名的,每次启动的时候都不确定,启动会后再通过udev等方式去rename。网络形成时间会延长
五、修改网卡名称样式为eth0(网络中比较流行的,适用于Red-hat系列Linux)
如果不习惯使用新的命名规则,可以恢复使用传统的方式命名,编辑grub文件,增加两个变量,再使用grub2-mkconfig重新生成grub配置文件即可。
- 编辑grub配置文件
vim/etc/sysconfig/grub #其实是/etc/default/grub的软连接
为GRUB_CMDLINE_LINUX变量增加2个参数,具体内容如下:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
- 重新生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
然后重新启动Linux操作系统,通过ip a可以看到网卡名称已经变为eth0。
- 修改网卡配置文件
原来网卡配置文件名称为ifcfg-ens12,这里需要修改为eth0的格式,并适当调整网卡配置文件。
mv /etc/sysconfig/network-scripts/ifcfg-ens12 /etc/sysconfig/network-scripts/ifcfg-eth0 #修改ifcfg-eth0文件如下内容(其它内容不变)
- NAME=eth0
- DEVICE=eth0
systemctl restart network.service #重启网络服务
六、修改网卡名称样式为eth0(另辟蹊径)
直接在/usr/lib/udev/rules.d/60-net.rules配置文件中修改对应网卡信息如下:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME=="eth0"
其中XX:XX:XX:XX:XX:XX是硬件的MAC地址
同时修改/etc/sysconfig/network-scripts/ifcfg-eth0以及配置文件中的两个参数即可
- NAME=eth0
- DEVICE=eth0
七、修改网卡名称样式为eth0(我喜欢的方法)
直接在/etc/udev/rules.d/中创建或修改70-persistent-net.rules文件,加上或修改信息为:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME=="eth0"
如果IP地址是自动获取(DHCP),就可以重启电脑了
如果IP地址是手动输入,就修改NAME和DEVICE参数,然后重启电脑。
网卡名称命名原理和修改方法相关推荐
- 转: 网卡名字eth0,eth1的修改方法
转自:http://longwind.blog.51cto.com/419072/982738 我使用这个方法生效: 现象:只有eth2, vi /etc/udev/rules.d/70-persis ...
- 一文搞懂网卡驱动的原理与移植方法
1.网卡设备驱动原理 1.1 层次结构 Linux系统对网络设备驱动定义了4个层次, 这4个层次有到下分为: 1.网络协议接口层:实现统一的数据包收发的协议.该层主要负责调用dev_queue_xmi ...
- 服务器项目带文件名,tomcat服务器上webapps里的文件名和项目名称不一样,修改方法...
第一种方法: 打开工程所在目录,找到一个 .mymetadata的文件,用记事本等打开,内容大致如下: type="WEB" name="QingNiaoCang&quo ...
- Linux网卡名称命名
CentOS7服务器,默认网卡名为ifcfg-eno33,如果想改成ifcfg-eth0,使用一下步骤即可 (1)编辑/etc/sysconfig/grub文件,命令vi /etc/sysconfig ...
- 网络适配器网卡名称变成WLAN2的解决方法
问题 更换了网卡之后,发现网络适配器网卡名称变成WLAN2,就很不爽 听说有些系统更新之后也会变成这个样子 在网上查了几篇文章,什么打开注册表修改删除的,都没有用,最后发现解决方法其实很简单 解决方法 ...
- NURBS曲面结构及生成原理、修改方法
NURBS全称是Non-Uniform Rational B-Splines中文叫做非均匀有理B样条曲线,Rhinoceros中的模型曲线便是通过NRUBS曲线进行描述,曲面则是通过U和V两个方向的曲 ...
- network-scripts目录下添加新网卡文件方法、nmcli修改NAME网卡名称和DEVICE一致
文章目录 说明 开启NetworkManager 添加网卡文件方式1[不建议用] 添加网卡文件方式2[建议用] 说明 在VMware的一台正在使用中的虚拟机中添加了几个新的网络适配器[已连接的那种] ...
- linux6.5修改网卡名称,Centos7更改网卡名为eth0
centos7以前的网卡名是eth0.eth1这样的命名方式 但是centos7的网卡名称命名方式却并不是这样,这让使用惯了eth0命名方式的童鞋用着不习惯 那么我们何不修改成我们自己惯用的形式呢? ...
- 服务器修改网卡,美国服务器CentOS 6.x修改网卡名称的方法
大家好,今天给大家带来了修改美国服务器CentOS 6.x修改网卡名称的方法,有需要的朋友们可以根据这篇文章修改网卡名称. RAK美国服务器默认有两个网口,安装完cenos6.x后发现网卡名称为em1 ...
最新文章
- sys.stdout.write与sys.sterr.write(二)
- ROS学习之包的概念
- Java jmap查看堆内存
- Google Chrome input 设置 line-height 后光标变得和input一样高
- c++清空一个txt文本_Linux下常用文本处理命令大全
- 理论基础 —— 排序
- pacbio 原始下机数据h5 文件简介
- Cimag 用法总结
- 循环switch 变量x 如果case a 车辆型号查询系统官网,车辆型号怎么去查询?
- php三极管导通条件,三极管的导通条件 - 三级管饱和导通的条件是什么?
- 微信支付-----扫码支付,统一下单
- 【Mathematica】 曲面的绘制
- 按键边缘检测,控制LED亮灭
- Linux signal捕获
- NIS (Network Information Service)
- 一万字一篇文20分钟学会C语言和Python,十四年编程经验老鸟传授经验之道
- C# 实例解释面向对象编程中的单一职责原则
- 当Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleuth会擦出怎样的火花
- 设置NTFS磁盘文件夹的可写权限(转自:http://doc.spacebuilder.cn/Default.aspx?Page=setNTFSAspxAutoDetectCookieSuppor)
- 概率论与数量统计(二)_第2章随机变量及其概率分布__贝努利试验
热门文章
- C++最小二乘法拟合平面
- 27、Docker 镜像命令
- Android电话相关的操作 - 打电话,接电话,挂电话
- 今天过生日,煲靓汤庆祝,好叻!--介绍“番茄薯子汤”煲制方法给大家:)
- Python 之 bytes/bytearray 的深入浅出
- 三星手机换新卡显示无服务器,玩机“老炮”告诉你三星手机新玩法
- 2021/07/11 老男孩带你21周搞定Go语言 (二)
- 为什么说 交叉验证能 防止过拟合 呢?
- python列表格式化输出_python中请问怎么格式化输出列表
- 有理数加减乘除 计算机应用带答案,计算机应用数学-(组合数学)-答案哈工大