linux系统操作系统网卡漂移解决方案及问题原因
一.问题描述
公司有100-150台服务器安装RHEL7.4&中标麒麟7.4系统,为方便编辑配置网卡,使用脚本方式配置为biosname=0,ifname=0,目的是为将en1o2p此类长字符网卡名称规范为传统的eth*,使用传统的网卡识别方式,但安装完成后配置IP,BOND双网卡存在网络漂移现象,现象即重启网卡后所有网口均发生变化导致网络不通
二.原理说明
- 在/usr/lib/udev/rules.d/60-net.rules中有一条规则指示udev助手实用程序/lib/udev/rename_device查看所有的/etc/sysconfig/network-scripts/ifcfg后缀文件。如果它发现一个带有HWADDR条目的ifcfg文件与一个接口的MAC地址匹配,它将该接口重命名为DEVICE指令在ifcfg文件中给出的名称。
- 在/usr/lib/udev/rules.d/71-biosdevname.rules中指示biosdevname根据其命名策略重命名接口, 前提是在前面的步骤中没有重命名接口,安装了biosdevname,并且在引导命令行上没有将biosdevname =0作为内核命令给出。
- 在/lib/udev/rules.d/75-net-description.rules中的规则指示udev通过检查网络接口设备来填充 内部udev设备属性值id_net_name_board、ID_NET_NAME_SLOT、ID_NET_NAME_PATH、ID_NET_NAME_MAC 。注意,有些设备属性可能是未定义的。
- 在/usr/lib/udev/rules.d/80-net-name-slot.rules中有一条规则指示udev重命名接口(前提是在 第1步或第2步中没有重命名接口)和内核参数net。根据以下优先级:id_net_name_board、ID_NET_NAME _SLOT、ID_NET_NAME_PATH,没有指定ifnames=0。如果其中一个未设置,则它将进入列表中的下一个。 如果没有设置这些参数,则不会重命名接口。
步骤2实际执行的是biosdevname的policy 步骤3和4实际执行的是Scheme1、2、3
三.处理步骤
由于在实际场景中,使用的是biosdevname=0 ifname=0的配置,实际影响的文件为在/usr/lib/udev/rules.d/60-net.rules文件,随即在该配置文件中使用了以下设置:
在使用此设置后,RHEL7.4系统问题彻底解决,经过近20次左右的测试,网口不会漂移。但是在中标麒麟7.4系统中,使用次配置后在网口状态不变的情况下不会发生任何漂移,但是如果随机拔掉其中一个网口,所有的网口会全部变化
随后用udevadm test命令进行测试,此命令可以根据网卡名回溯是哪条策略生效,从输出结果看RHEL7.4&中标麒麟7.4系统全部显示60-rules规则已经生效,但是在中标麒麟中仍然存在漂移问题。 经过文档查询,和进一步替换测试,基本可确定此问题为系统差异导致
四.解决方案
©著作权归作者所有:来自51CTO博客作者heardic的原创作品,如需转载,请注明出处,否则将追究法律责任在使用systemd的命名规则时候,网卡名类似en1o2p3,此种命令可以准确的指出网卡来自主板上的哪一个pci槽位哪一条总线,以及具体的口。Systemd的命名方式虽然可读性差,但是本身就是为了解决此问题而做出的改变,建议同一为systemd方式使用长格式网卡名。
还原脚本如下:#! /bin/bash# redhat还原脚本cd /etc/sysconfig/network-scripts/mv ifcfg- bak/mv ifcfg-eth* bak/mv ifcfg-bond0 bak/cd /etc/sysconfigcp grub /home/grub.baksed -i "s/ net.ifnames=0/ /g" grubsed -i "s/ biosdevname=0/ /g" grubgrub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgcd /boot/efi/EFI/redhat/cp grub.cfg /home/grub.cfg.baksed -i "s/ net.ifnames=0/ /g" grub.cfgsed -i "s/ biosdevname=0/ /g" grub.cfgsleep 5syncsyncsyncreboot
#! /bin/bash# 中标麒麟还原脚本cd /etc/sysconfig/network-scripts/mv ifcfg- bak/mv ifcfg-eth* bak/mv ifcfg-bond0 bak/cd /etc/sysconfigcp grub /home/grub.baksed -i "s/net.ifnames=0/ /g" grubsed -i "s/biosdevname=0/ /g" grubgrub2-mkconfig -o /boot/efi/EFI/neokylin/grub.cfgcd /boot/efi/EFI/neokylin/cp grub.cfg /home/grub.cfg.baksed -i "s/ net.ifnames=0/ /g" grub.cfgsed -i "s/ biosdevname=0/ /g" grub.cfgsleep 5syncsyncsyncreboot
转载请标明出处:
1.博客中标注原创的文章,版权归原作者 heardic 所有;
2.未经原作者允许不得转载本文内容,否则将视为侵权;
3.转载或者引用本文内容请注明来源及原作者;
4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。
更多相关文章
- [Linux] 总结各系统 双网卡绑定
- 获取网卡名称 linux c
- 查看Linux服务器网卡流量小脚本shell和Python各一例
- linux网卡实现高可用:team链路聚合
- linux 判定那块网卡为eth0
- 多队列网卡CPU中断均衡
- Linux基础之无线网卡配置连接测试相关操作
- 如何为UDP组播设置一个套接字,并提供两个网卡?
- vmware克隆Centos6.4虚拟机网卡无法启动问题