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

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

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

这种命名规则让习惯了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更改为绑定后的设备名称。以及对相应的配置文件重命名如下图

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

重新升成grub.conf

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

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

已经变成我熟悉的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

贴两段执行结果

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

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

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

感谢大家能看完Thanks!

感谢工作中指点我的Kirin。

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

推广排行榜:

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

  1. 惠普服务器安完系统后启动不了怎么办,惠普服务器CentOS7安装不识别硬盘,安装后启动失败问题...

    今天给一台比较陈旧的惠普服务器安装centos7操作系统.遇到问题如下 第一:进入安装系统界面,不能识别主机硬盘. 第二:安装完系统后重启,不能进入系统. @第一个问题解决方案 1.进入安装光盘,用上 ...

  2. linux系统宝塔打开异常,宝塔面板进不去,且宝塔面板启动失败,重装宝塔遇见错误...

    宝塔面板升级一下就突然的进不去了...... 服务器上看一下宝塔的状态,重启也失败了 一.先进行一下修复. curl http://download.bt.cn/install/update6.sh| ...

  3. 惠普linux进入bios设置u盘启动,惠普bios,小编教你惠普bios怎么设置u盘启动

    惠普电脑是一款专门针对入门用户的笔记本电脑,这款电脑采用体型较小的造型设计,方便移动,可以轻松地处理日常的办公任务,那么这款惠普笔记本怎么设置u盘启动呢?这对于一些用户来是不小的挑战,下面,小编给大家 ...

  4. Linux常用命令下,以及再CentOS7下搭建apache网站服务,以及同一服务器上搭建第二个网站

    Linux常用命令下,以及再CentOS7下搭建apache网站服务,以及同一服务器上搭建第二个网站 Linux 常用命令ls -l 以长格式显示-a 显示.. 和 .-A 不显示 . 和 ..-d ...

  5. Linux服务器配置与管理项目教程(CentOS7 /RHEL 7)(第三版)题库带答案

    Linux服务器配置与管理项目教程 (CentOS7 /RHEL 7)(第三版)微课版 第1篇   系统安装与网络配置 项目1  安装CentOS 服务器 项目2  配置Linux基础网络 不积跬步, ...

  6. Linux下提权常用小命令

    有些新手朋友在拿到一个webshell后如果看到服务器是Linux或Unix操作系统的就直接放弃提权,认为Linux或Unix下的提权很难,不是大家能做的,其实Linux下的提权并没有很多人想象的那么 ...

  7. Linux发展历史大事编年表(截止2013年)

    这篇文章主要介绍了Linux发展历史大事编年表(截止2013年),Linux现在已经无处不在,是一个伟大的开原项目,让我一起来看看23年来它的发展历程吧 我们周围到处都有Linux的身影,在家中.公司 ...

  8. linux小型游戏系统设计,Linux平台下基于JAVA小游戏_设计文档.doc

    Linux课程设计报告 课题名称:<Linux平台下基于java小游戏设计> 专 业:2011级计算机科学与技术 组 长:043佘清泉 组 员:007陈威达 008陈学仁 026赖华标 0 ...

  9. linux快速搜索指定内容-小知识

    linux快速搜索指定内容-小知识 因为自己负责的系统出现了问题,需要去服务器上查看日志,但是发现日志文件几百M,直接在服务器上打开看的话,打开的有特别慢.下载到本地网速又特别慢.因为大概清楚具体是哪 ...

最新文章

  1. 使用 Kanban精益创新
  2. Linux使用单用户模式修改root密码.
  3. 使用opengl编程实现一个三维渲染实体_Unity Shader学习随记_01_渲染流水线
  4. ActiveReports中如何在后台导出运行时绑定数据源报表
  5. SAP Revenue Cloud业务综述
  6. alert回调_你知道javascript函数的回调怎么用吗?
  7. linux nginx 缓存服务器,如何开启Nginx缓存
  8. 电影《长津湖》上映7天票房破26亿元
  9. Python花式编程案例锦集(2)
  10. 思科模拟器叫什么_扫盲!通过型号快速识别思科路由器,交换机,服务器等设备...
  11. iOS 警告收录及科学快速的消除方法
  12. 智慧物流园区供应链管理系统解决方案:数智化供应链赋能物流运输行业供应链新模式
  13. 腾讯云即时通讯IM_ 小贴士
  14. 实际应用Supervisor部署Flask项目
  15. leetcode (Find All Numbers Disappeared in an Array)
  16. 为陶崇园争取正义懒人包1.0
  17. MXNet作者李沐:我在CMU读博的这五年
  18. visio调整形状位置_如何在Visio 中设置形状的属性?
  19. php表格升序降序,excel如何实现升序和降序
  20. 大数据Kylin(三):Kylin配置

热门文章

  1. go grpc 深入笔记
  2. sql server 2005 (select查询语句用法)
  3. orapwd创建密码文件
  4. leetcode 1707. 与数组中元素的最大异或值
  5. 分布与并行计算—生产者消费者模型队列(Java)
  6. leetcode1466. 重新规划路线(dfs)
  7. JavaScript数据类型:Typeof解释
  8. javascript异步_JavaScript异步并在循环中等待
  9. 我如何构建Kubernetes集群,以便我的同事可以更快地部署应用程序
  10. flask redis_在Flask应用程序中将Redis队列用于异步任务