linux网卡名称乱编,小斗CentOS7.x网卡名称错乱、及网卡启动失败。

本帖最后由 Zack 于 2018-5-31 13:39 编辑

最近在搞CentOS7装机的事情,在此记录期间遇到关于网卡方面的坑,整理分享下,以免大家继续再踩。

一、在CentOS7默认装完系统之后网卡名称一改之前的名称习惯,网卡名称为enoxxxxx(之前命名规则为eth0-ethxxx)如下图

thread-70-1-1.html

这种命名规则让习惯了ethxxx的同学很不习惯,对于业务其他方面也会有很大的影响,如对机器网卡监控方面,os每次装机升成的网卡名字不同,则没有办法对所有机器的网卡监控做统一,网卡识别起来不直观等(这尼玛很坑爹啊!)。对此我们通过udev对网卡进行了命名绑定(udev详解绑定自行google吧。),步骤如下:

cd /etc/udev/rules.d/

创建 70-persistent-net.rules

对网卡进行名称绑定

echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$(ifconfig eth0|grep ether|awk '{print $2}')\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth0\"" >/etc/udev/rules.d/70-persistent-net.rules

echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$(ifconfig eth1|grep ether|awk '{print $2}')\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth1\"" >>/etc/udev/rules.d/70-persistent-net.rules

echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$(ifconfig eth2|grep ether|awk '{print $2}')\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth2\"" >>/etc/udev/rules.d/70-persistent-net.rules

echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$(ifconfig eth3|grep ether|awk '{print $2}')\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth3\"" >>/etc/udev/rules.d/70-persistent-net.rules

然后进入cd /etc/sysconfig/network-scripts 对相应的网卡配置文件编辑,将DEVICE更改为绑定后的设备名称。以及对相应的配置文件重命名如下图

thread-70-1-1.html

然后修改grub禁用可命名规则,编辑/etc/default/grub文件实现,在该文件的GRUB_CMDLINE_linux= 添加net.ifnames=0 biosdevname=0如下图

thread-70-1-1.html

重新升成grub.conf

grub2-mkconfig -o /boot/grub2/grub.cfg

thread-70-1-1.html

这次重启机器查看网卡名称是不是成为我们想要的名字了呢?

thread-70-1-1.html

已经变成我熟悉的ethxxx了。ps:心里莫名小激动呢。

二、网卡名称杂乱的问题我们已经解决了,但是在业务实际使用过程中,出现了机器重启后不能ping通的情况,经过调查发现,我们的修改后的网卡命名规则会有一定概率失效!原因是机器在启动中把最先启动的网卡识别在了前面,我们绑定的网卡启动在后面。导致的了机器把原本应该的eth0,识别为了eth1、eth2、eth3。这个问题真是很头疼,经过老司机的指点明白了原因:我们机房的环境是使用的万兆网络环境(即光纤环境),而服务器的万兆网卡非板载网卡,(pci接入)板载的网卡是千兆卡,这样机器在启动的时候先去识别的板载的网卡,而pci接口的万兆卡就在后面识别,导致这个情况的发生。(ps:找到这个原因,我内心毫无波澜,甚至还想送个迷之微笑送给大家。)

经过老司机的指点,解决方案是禁用千兆网卡驱动,操作如下:

此处以intel网卡为例

echo "blacklist igb" >> /etc/modprobe.d/blacklist.conf

sed -i '/GRUB_CMDLINE_LINUX/{s/"$//g;s/$/rdblacklist=igb"/}' /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg;

这样机器就不会去识别千兆的网卡了。从而不会再出现绑定失败的情况。

Ps:在此讲一下我们之前的妥协方案,在机器中加入一条开机network服务延迟5秒启动的方案。用以解决网卡并行启动,导致网卡启动在udev绑定之前,这样会导致机器网卡启动失败,(目前只有CentOS7.0有发现这个问题,7.2 7.3暂未发现)操作如下。

#!/bin/bash

#关闭network开机自启动

chkconfig network off

#添加sa-network服务延迟5秒重启network服务

echo '#!/bin/bash' >> /etc/init.d/sa-network

echo '#chkconfig:2345 90 05' >> /etc/init.d/sa-network

echo 'sleep 5' >> /etc/init.d/sa-network

echo 'service network restart' >> /etc/init.d/sa-network

chmod x /etc/init.d/sa-network

chkconfig --add sa-network

chkconfig sa-network on

三、批量装机中使用

在机房进行批量装机的时候,不可能每台都手动执行,或者发现机器不通再单用户修改密码,然后在执行以上一二步骤,会非常浪费时间,经过以上的经验总结中,我在装机的初始化中添加了如下操作,大家可以参考

# disable igb add Zack

osver=`cat /etc/redhat-release | grep -i "7.2" | wc -l`

osver73=`cat /etc/redhat-release | grep -i "7.3" | wc -l`

osver70=`cat /etc/redhat-release | grep -i "7.0" | wc -l`

udev_eth0_mac=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i eth0| awk -F '"' '{print $8}'`

ip_add_eth0_mac=`ip add | grep -A2 eth0 |grep -i 'ether' | awk '{print $2}'`

speed=`ethtool eth0 | grep -i 'Speed' |awk -F [:] '{print $2}'`

network_name=`ip add |grep -iB1 $udev_eth0_mac | grep -i eth|awk '{print $2}'| grep -i eth| awk -F ':' '{print $1}'`

network_failure_name=`ethtool $network_name | grep -i 'Speed' | awk -F ':' '{print $2}'`

if [ $udev_eth0_mac = $ip_add_eth0_mac ] && [ $speed = "10000Mb/s" ] ;then

echo "blacklist igb" >> /etc/modprobe.d/blacklist.conf

sed -i '/GRUB_CMDLINE_LINUX/{s/"$//g;s/$/rdblacklist=igb"/}' /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg;

echo '默认万兆网卡,已禁用千兆igb驱动。'

elif [ $udev_eth0_mac != $ip_add_eth0_mac ] ;then

echo "blacklist igb" >> /etc/modprobe.d/blacklist.conf

sed -i '/GRUB_CMDLINE_LINUX/{s/"$//g;s/$/rdblacklist=igb"/}' /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg

echo 'udev绑定网卡不匹配ip add网卡名称,已禁用千兆igb驱动,重启生效。'

elif [ $udev_eth0_mac = $ip_add_eth0_mac ] && [ $speed = "1000Mb/s" ] ;then

echo '默认千兆网卡,啥都不做。退出。'

fi

#兼容CentOS7.0 network 判断

if [[ "$osver70" == "1" ]]; then

#关闭network开机自启动

chkconfig network off

#添加sa-network服务延迟5秒重启network服务

echo '#!/bin/bash' >> /etc/init.d/sa-network

echo '#chkconfig:2345 90 05' >> /etc/init.d/sa-network

echo 'sleep 5' >> /etc/init.d/sa-network

echo 'service network restart' >> /etc/init.d/sa-network

chmod x /etc/init.d/sa-network

chkconfig --add sa-network

chkconfig sa-network on

fi

if [ $osver70 = "1" ] && [ $network_name = "eth0" ] && [ $speed = "10000Mb/s" ] ;then

echo "blacklist igb" >> /etc/modprobe.d/blacklist.conf

sed -i '/GRUB_CMDLINE_LINUX/{s/"$//g;s/$/rdblacklist=igb"/}' /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg;

echo 'CentOS7.0系统,网口名称为eth0且为万兆网卡,已禁用千兆igb驱动。'

fi

if [ $osver70 = "1" ] && [ $network_failure_name = "10000Mb/s" ]; then

echo "blacklist igb" >> /etc/modprobe.d/blacklist.conf

sed -i '/GRUB_CMDLINE_LINUX/{s/"$//g;s/$/rdblacklist=igb"/}' /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg;

echo 'CentOS7.0系统,网口名称为eth*且为万兆网卡,已禁用千兆igb驱动。'

fi

贴两段执行结果

thread-70-1-1.html

thread-70-1-1.html

(写的很low,但至少能用,哈哈)

以上脚本我对部分服务器进行了测试包括dell和华为的机器,OS包括CentOS7.0 7.2 73其它机型和OS没有测试,资源有限哈哈。也希望大家能针对自身的环境灵活运用,不要死套用。有疑问可以直接回复我,我尽量回复大家。

在此建议大家使用CentOS7.2 7.3版本 相对会稳定很多。7.0毕竟是个过渡版本。

感谢大家能看完Thanks!

感谢工作中指点我的Kirin。

转载请说明出处www.houzhibo.com谢谢!

推广排行榜:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven——继承和聚合

实际项目中,可能正要构建一个大型的系统,但又不想一遍又一遍的重复同样的依赖元素,这种情况是经常出现的。不过还好,maven提供了继承机制,项目可以通过parent元素使用继承,可以避免这种重复。当一个项目声明…

iframe css练习

转载于:https://www.cnblogs.com/wenhuan/p/4019154.html

.NET常用工具类集锦

不错的地址: http://www.cnblogs.com/flashbar/archive/2013/01/23/helper.html https://github.com/chrisyanghua/MyHelper/tree/master/MyHelper http://www.cnblogs.com/conan87810/archive/2009/03/15/1412529.html http://www.cnblogs.com/ltp/archive/2008/03…

现代控制理论-李雅普诺夫

现代控制理论-李雅普诺夫 单输入单输出系统(BIBO)的系统函数如下: 则,该系统的能控标准型(能空性)为: 能观性: 李雅普诺夫下的稳定性: 李雅普诺夫下的渐进稳定性&a…

Linux服务器的gou,开源跨平台移动项目Langou【简介】

Langou简介Langou是一个跨平台(Android/iOS)前端开发框架,核心代码使用C编写,底层基于OpenGL绘图,上层实现了一个精简的排版引擎以及一个JS/JSX运行环境。目标是想实现在此基础上开发GUI应用程序可兼顾开发速度与运行效率。暂时只支持iOS与An…

vue从入门到进阶:简介(一)

前言 用了这么久的vue了,但是一直没有时间写个系列文章,现在抽一定时间总结下vue的知识点。 首先,Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的浏览器。下面总…

linux堡垒机开源软件,Jumpserver开源堡垒机

Jumpserver开源跳板机系统部署1.简介Jumpserver使用Python / Django进行开发,遵循Web 2.0规范,配备了业界领先的Web Terminal解决方案,交互界面美观、用户体验好。Jumpserver采纳分布式架构,支持多机房跨区域部署,中心…

node截图服务可用性报告

2019独角兽企业重金招聘Python工程师标准>>> 前言 服务器端截图可以做什么? 个人观点:省去跟报表有关的EDM开发,直接从系统上截图,然后发图片给用户就搞定。剩下的自己脑补。 既然这么好,为毛不赶紧弄。…

java反射快速入门(二)

上一遍博文 , 简单介绍java 反射的常用接口,本遍博文, 我会结合项目开发的实际例子讲解下 java反射的使用 现在有个需求, 要将一个对象转换成xml格式, 或者将一串xml转换一个对象, 这时我们循序渐进, 先从最简单的入手 一: 方案① 场景 : NBA球员信息描述…

C#QQ邮箱验证

注意: QQ邮箱的简单邮件传输协议(SMTP)使用了SSL加密,必须启用SSL加密、指定端口。 QQ邮箱POP3/SMTP服务默认是关闭的,需要开启服务(设置>账户>开启服务)。 QQ邮箱若有独立密码&#xff0…

浅谈ASP.NET框架

本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!! 本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文…

C语言之冒泡排序

假设要对含有n个数的序列进行升序排列,冒泡排序算法步骤是: 1、从存放序列的数组中的第一个元素开始到最后一个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置; 2、第1趟结束后,…

linux sar 历史负载,查看负载、vmstat、top、sar以及nload命令

使用w查看系统负载1.w命令,查看系统负载:单位时间内使用cpu的活动的进程有多少个[rootweix01 ~]# w #load average 后面三个数字表示1分钟,5分钟,15分钟的负载值,最合适的是逻辑cpu数量与1分钟负载一致21:10:21 up 8 m…

linux系统编程:IO读写过程的原子性操作实验

所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断。 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打…

Intent.createChooser文件选择

实现点击Button选择文件, 在TextView上显示Uri 1 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools"http://schemas.android.com/tools"3 android:layout_width"match_parent"4 android…

Git 历险记

Git历险记&#xff08;一&#xff09; 作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识&#xff0c;它相对于我们熟悉的CVS、SVN甚至同时分布式控制系统的Mercurial&#xff0c;有哪些优势和不足呢。这次InfoQ中文站有幸邀请到《Git Community Book》的译者刘…

怎样用c语言定义高幂整数,位操作运算的奇技淫巧!(附源码)

位运算百度百科如下:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作位操作的优势位运算是一种底层的运算&#xff0c;往往比我们普通的运算要快上许多许多位运算是最高效而且占用内存最少的算法操作&#xff0c;执行效…

android系统耗电量大待机,安卓手机耗电快有什么解决办法吗 安卓手机待机耗电量大怎么办...

虽然手机发展速度越来越快&#xff0c;技术也越来越高了&#xff0c;电池容量相对之前的900毫安1000毫安&#xff0c;都上升到了2000毫安到5000毫安&#xff0c;但是感觉待机的时间和正常的使用时间&#xff0c;却没有之前那么长了&#xff0c;难道手机电池容量是假的&#xff…

js 中null,undefined区别

首先摘自阮一峰先生的文章&#xff1a; 大多数计算机语言&#xff0c;有且仅有一个表示"无"的值&#xff0c;比如&#xff0c;C语言的NULL&#xff0c;Java语言的null&#xff0c;Python语言的None&#xff0c;Ruby语言的nil。 有点奇怪的是&#xff0c;JavaScript语…

六款值得推荐的Android开源框架简介

六款值得推荐的Android开源框架简介 技术不再多&#xff0c;知道一些常用的、不错的就够了。下面就是最近整理的“性价比”比较高的Android开源框架&#xff0c;应该是相对实用的。 1、volley 项目地址 https://github.com/smanikandan14/Volley-demo JSON&#xff0c;图像等的…