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,一经查实,立即删除!

相关文章

block传值 链接

iOS传值之block传值(一)转载于:https://www.cnblogs.com/dqxu/p/4016117.html

Maven——继承和聚合

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

隐藏linux操作系统版本信息,linux centos 如何查看操作系统版本信息?

本文介绍常用的四种查看linux下查看系统版本信息的方法:一、uname -a[appVM_11_211_centos ~]$ uname -aLinux VM_11_211_centos 2.6.32-504.30.3.el6.x86_64 #1 SMP Wed Jul 15 10:13:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux二、cat /proc/version[appVM_11_2…

iframe css练习

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

关于缓存的几篇好文章

追求极致:从技术细节看美团架构 Memcache架构新思考 Memcache应用场景介绍,说明[zz] 大型web系统数据缓存设计-l转载 大型网站后台架构的Web Server与缓存 Intelligence Computing 微博到底有多重视分布式缓存(上) Beanstalkd 一个…

linux 复制分区文件,dd复制分区后目标分区的大小变成原分区了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我使用了dd if/dev/sda1 of/dev/sdb1这个命令,想复制分区sda1上的所有数据但是我原本sdb1是150G,dd之后,挂载后变成55G了(df -h输出结果)(也就是sda1的大小 )但是我用fdisk -l 得到的信息还是150G请问这种情况如何解决??acePerso…

Elasticsearch 5.2.x 使用 Head 插件连接不上集群

0、前言 时光荏苒,ES转眼间就从2.X跳到了5.X。。。忆往昔峥嵘岁月,奈何ES社区太活跃,版本跳的比房价还快啊。。。话说回来,需要部署一套Elasticsearch 5.2.1 即本月最新推出的ES新力作,发现很多用法已经不一样了。。。…

Javascript---Immediately-Invoked Function Expression (IIFE)立即执行的函数表达式

1.一下是几种形式的函数调用: 各种调用的效率:在这编文章中有谈到: http://suqing.iteye.com/blog/1981591 // Either of the following two patterns can be used to immediately invoke // a function expression, utilizing the functions…

extern 使用方法具体解释

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的。要在此处引用”。(extern能够置于变量或者函数前,以标示变量或者函数的定义在别的文件里,提示编译器遇到此变量和函数时在其它…

.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…

caffe 错误

一些caffe错误 训练时很快梯度爆炸,loss猛增至nan 如果找不到数据上的原因的话,可以怀疑caffe框架有问题,换用其它版本试试。比如我遇到的问题是在训练时使用了Accuracy层,而该层的实现代码在某次更新中GPU代码存在bug&#xff0c…

发手气红包算法

lowest0.01元,最小金额 操作是整数,最小人民币单位是分,所以有2位小数,最少是0.01元 发金额totalBill 发n人,就取1到100的随机数n个 为了提高精度,把金额放大100倍 totalAmounttotalBill*100 n个人各取的随…

cs106a编程方法学作业解答(3)

此次作业要求我们做一个简单的打砖块游戏。 1 * File: Breakout.java2 * -------------------3 * Name:4 * Section Leader:5 * 6 * This file will eventually implement the game of Breakout.7 */8 9 import acm.graphics.*;10 import acm.program.*;11 import acm.ut…

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开发,直接从系统上截图,然后发图片给用户就搞定。剩下的自己脑补。 既然这么好,为毛不赶紧弄。…

C++的extern关键字

extern是一个声明,不是一个定义,A模块想应用B模块的一个函数或者变量,A模块包含B模块的头文件,并且在变量或者头文件前,加 extern,虽然编译的时候,找不到模块的定义,但是在连接的时候…

Linux网站访问的电脑占CPU,详解Linux如何查看当前占用CPU或内存最多的几个进程...

命令ps -aux | sort -k4nr | head -N命令详解:1、head:-N可以指定显示的行数,默认显示10行。2、ps:参数a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端…