linux网卡绑定脚本
2013-08-20 15:30:51
此脚本适用于CentOS5.x和CentOS6.x。
#!/bin/bash
#********************************************
# Copyright (c) Beijing DaoWoo Times Technology Co., Ltd.
#
# Author : Wu XuLei (wuxulei@daowoo.com)
# FILE : bonding.sh
# USAGE : bonding.sh -h
# DESCRIPTION : A script that will bond the network adapters.
# REQUIREMENTS:
# ) The network adapters is available.
# ) Please run the script in the console.
# HISTORY :
# // Wu XuLei written
#********************************************
usage()
{
cat <<-END >&
usage: ${##*/} -i IPv4 -g IPv4-GATEWAY [ -n NETMASK ] [ -b BOND-NAME ] [ -m BOND-MODE ] [ -e ETHS ]
[ -I IPv6 ] [ -G IPv6-GATEWAY ] [ -r ] [ -f ] -h
-i IPv4 The local IPv4 address is a necessary option.
-g GATEWAY Gateway is a necessary option.
-n NETMASK The default netmask is 255.255.255.0 .
-b BOND-NAME The default bond name is bond0.
-m BOND-MODE The optional bond mode is .
-e ETHS The network adapters will be bonded,the default is eth0 and eth1.
-I IPv6 The local IPv6 addresss.
-G IPv6-GATEWAY The IPv6 gateway.
-r To clear the all original network configuration.
-f After running the script,reboot the host.
-h Display this help and exit.
eg: ${##*/} -i 192.168.1.1 -g 192.168.31.254 -n 255.255.240.0 -b bond0 -m -e "eth0 eth1 eth2"
-k -I :da8::: -G :da8:::
END
exit $E_OPTERROR
} #Defined function error
error()
{
error_num=$
case $error_num in
)
echo "You must specify -$pm parameter!" ;;
)
echo "" ;;
)
echo "Invalid IP address!" ;;
)
echo "The cluster subnet mask is not valid. A subnet mask must be contiguous. Enter a valid subnet mask." ;;
)
echo "The optional bond mode must be among 0,1,2,3,4,5 and 6." ;;
)
echo "No such network adapter $eth." ;;
)
echo "Name must be composed by uppercase and lowercase letters, numbers, dots and underscores, and the length of name ca
n not exceed characters." ;;
)
echo "The bond name $bn cat not be in network adapters $eths!" ;;
)
echo "The value of -$Option parameter cat not be null!" ;;
\*) usage ;;
esac
echo "Try '${0##*/} -h' for more information."
exit $error_num
} nm=255.255.255.0
bn=bond0
bm=
eths="eth0 eth1"
f_flag= r_flag=
#Parameter confirmation
while getopts "i:g:n:b:m:e:I:G:fhr" Option
do
case $Option in
i) ip=$OPTARG ;;
g) gw=$OPTARG ;;
n) nm=$OPTARG ;;
b) bn=$OPTARG ;;
m) bm=$OPTARG ;;
e) eths="$OPTARG" ;;
I) ipv6="$OPTARG" ;;
G) ipv6_gw="$OPTARG" ;;
f) f_flag=;;
h) usage ;;
r) r_flag= ;;
\?) usage ;; # DEFAULT
esac
done #The nummber of parameters can not be zero.
[ $# -eq ] && usage
ipv4_v()
{
[ $# -eq ] && echo "Please input IP." && exit
for IP in $*
do
[ `echo $IP|awk -v RS='.' 'END{print NR-1}'` -ne ] && error
for i in `echo $IP | awk -F "." '{print $1, $2, $3, $4}'`
do
echo $i|grep "^[0-9]*$" > /dev/null || error
done
echo $IP | awk -F "." '{if($1<=223&&$1>0&&$2<=255&&$2>=0&&$3<=255&&$3>=0&&$4<=255&&$4>=1&&NF=4){exit 0}else {exi
t }}' || error 3
done
} nm_v()
{
[ $# -ne ] && error
IP=$
[ `echo $IP|awk -v RS='.' 'END{print NR-1}'` -eq ] || error
echo $IP | awk -F "." '{if($1<=223&&$1>0&&$2<=255&&$2>=0&&$3<=255&&$3>=0&&$4<=255&&$4>=1&&NF=4){exit 0}else {exit 1}}'
IP1=`echo $IP|awk -F "." {'print $1'}`
IP2=`echo $IP|awk -F "." {'print $2'}`
IP3=`echo $IP|awk -F "." {'print $3'}`
IP4=`echo $IP|awk -F "." {'print $4'}`
num1=`echo "obase=2;$IP1"|bc|awk '{printf "%08d\n",$0}'`
num2=`echo "obase=2;$IP2"|bc|awk '{printf "%08d\n",$0}'`
num3=`echo "obase=2;$IP3"|bc|awk '{printf "%08d\n",$0}'`
num4=`echo "obase=2;$IP4"|bc|awk '{printf "%08d\n",$0}'`
num=$num1$num2$num3$num4
flag1=
flag2=
NUM=`echo $num|wc -m`
for (( i=;i<`expr $NUM - `;i++ ))
do
if [ `echo ${num:$i:}` -eq ];then
[ $flag1 -eq $flag2 ] || error
fi
[ `echo ${num:$i:}` -eq ] && flag2=
done
}
name_v()
{
[ $# -ne ] && error
STRING=$
[ `echo $STRING|wc -c` -gt ] && error
if test "$(expr "${STRING}" : "[A-Za-z0-9_.]*")" -ne "$(expr length "${STRING}")" ; then
error
fi
} [ -z $ip ] && pm="i" && error
[ -z $gw ] && pm="g" && error
ipv4_v $ip
ipv4_v $gw
nm_v $nm
echo $bn|grep "bond[0-9]" > /dev/null || exit
if [ ! -z $ipv6 ];then
[ ! -f ip_v.pl ] && echo "No such file ip_v.pl" && exit
which perl > /dev/null >& || exit
perl ip_v.pl $ipv6
[ $? -ne ] && error
if [ ! -z $ipv6_gw ];then
perl ip_v.pl $ipv6_gw
[ $? -ne ] && error
fi
else
[ ! -z $ipv6_gw ] && echo "You must specify -I parameter!" && exit
fi [ `echo $bm|wc -m` -eq ] && echo $bm|grep "^[0-6]$" > /dev/null >& || error
for eth in $eths
do
ifconfig -a|grep $eth > /dev/null >& || error
done
echo "$eths"|grep $bn > /dev/null >& && error #To modify the modprobe.conf
cat /etc/modprobe.conf |grep "alias $bn bonding" > /dev/null >&
if [ $? -eq ];then
sed -i "s/.*alias $bn bonding.*$/alias $bn bonding/g" /etc/modprobe.conf
else
echo "alias $bn bonding" >> /etc/modprobe.conf
fi
cat /etc/modprobe.conf |grep "options $bn" > /dev/null >&
if [ $? -eq ];then
sed -i "s/^options $bn.*$/options $bn miimon=100 mode=$bm/g" /etc/modprobe.conf
else
echo "options $bn miimon=100 mode=$bm" >> /etc/modprobe.conf
fi
echo "/etc/modprobe.conf:"
cat /etc/modprobe.conf for i in $eths
do
rm -f /etc/sysconfig/network-scripts/ifcfg-$i
done #To set bond
echo "DEVICE=$bn" > /etc/sysconfig/network-scripts/ifcfg-$bn
echo "BOOTPROTO=static" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "IPADDR=$ip" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "GATEWAY=$gw" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "NETMASK=$nm" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-$bn
#echo "USERCTL=no" >> /etc/sysconfig/network-scripts/ifcfg-$bn
if [ ! -z $ipv6 ] ;then
echo "IPV6INIT=yes" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "IPV6ADDR=$ipv6" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "IPV6PREFIX=64" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo "IPV6_AUTOCONF=no" >> /etc/sysconfig/network-scripts/ifcfg-$bn
grep NETWORKING_IPV6 /etc/sysconfig/network > /dev/null
if [ $? -eq ];then
sed -i "s/NETWORKING_IPV6=no/NETWORKING_IPV6=yes/" /etc/sysconfig/network
else
echo NETWORKING_IPV6=yes >> /etc/sysconfig/network
fi
fi
[ ! -z $ipv6_gw ] && echo "IPV6_DEFAULTGW=$ipv6%$bn" >> /etc/sysconfig/network-scripts/ifcfg-$bn
echo
echo "ifcfg-$bn:"
cat /etc/sysconfig/network-scripts/ifcfg-$bn
#To set eth
for i in $eths
do
echo "DEVICE=$i" > /etc/sysconfig/network-scripts/ifcfg-$i
echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "MASTER=$bn" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "SLAVE=yes" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-$i
# echo "USERCTL=no" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo
echo "ifcfg-$i:"
cat /etc/sysconfig/network-scripts/ifcfg-$i
done #解除原有bond
if [ ! -z "`ls /sys/class/net`" ];then
for i in `ls /sys/class/net`
do
[ ! -d "/sys/class/net/$i" ] || [ "$i" == lo ] || [ "$i" == sit0 ] && break
j="`cat /sys/class/net/$i/bonding/slaves 2> /dev/null`"
if [ -z "$j" ] ;then
if [ `echo $i|grep bond` ] && [ $i != $bn ];then
ifdown $i down
rm -f /etc/sysconfig/network-scripts/ifcfg-$i
sed -i "/.*alias $i bonding.*$/d" /etc/modprobe.conf
sed -i "/^options $i.*$/d" /etc/modprobe.conf
fi
continue
fi
if [ "$i" == "$bn" ] ;then
for k in $j
do
if [ ! "`echo $eths|grep $k`" ];then
echo "DEVICE=$k" > /etc/sysconfig/network-scripts/ifcfg-$k
echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-$k
echo "ONBOOT=no" >> /etc/sysconfig/network-scripts/ifcfg-$k
echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-$k
#echo "USERCTL=no" >> /etc/sysconfig/network-scripts/ifcfg-$k
fi
done
else
for k in $eths
do
j="`echo $j|sed "s/$k//g"`"
l="`echo $j|sed "s/ //g"`"
if [ -z "$l" ];then
ifdown $i down
rm -f /etc/sysconfig/network-scripts/ifcfg-$i
sed -i "/.*alias $i bonding.*$/d" /etc/modprobe.conf
sed -i "/^options $i.*$/d" /etc/modprobe.conf
break
fi
done
fi
done
fi if [ $r_flag -eq ];then
for i in `ifconfig -a|grep bond|awk {'print $1'}`
do
if [ $i != $bn ];then
ifconfig $i down
rm -f /etc/sysconfig/network-scripts/ifcfg-$i
sed -i "/.*alias $i bonding.*$/d" /etc/modprobe.conf
sed -i "/^options $i.*$/d" /etc/modprobe.conf
fi
done
for i in `ifconfig -a|grep eth|awk {'print $1'}`
do
e_flag=
for j in $eths
do
if [ $i == $j ];then
e_flag= && break
fi
done
if [ $e_flag -eq ];then
echo "DEVICE=$i" > /etc/sysconfig/network-scripts/ifcfg-$i
echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "ONBOOT=no" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "USERCTL=no" >> /etc/sysconfig/network-scripts/ifcfg-$i
echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-$i
fi
echo "ifcfg-$i:"
cat /etc/sysconfig/network-scripts/ifcfg-$i
done
fi chkconfig NetworkManager off
service NetworkManager stop
chkconfig network on
service network restart if [ $f_flag -eq ] ;then
echo -e "\033[40;31mThe host will reboot.\033[0m"
reboot &
else
echo -e "\033[40;31mPlease reboot the host.\033[0m"
fi
echo "The network adapters have been bonded."
exit
linux网卡绑定脚本的更多相关文章
- Linux网卡绑定探析
2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡绑定模式,Linux b ...
- Linux网卡绑定bond0-实验
虚拟机添加网卡 ip addr 查看新增的网卡是否读取 添加bonding接口 [root@centos8~]$nmcli con add type bond con-name mybond0 ifn ...
- linux网卡绑定
- Linux下双网卡绑定(bonding技术)
Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的 ...
- 深度分析Linux下双网卡绑定七种模式 多网卡的7种bond模式原理
http://blog.csdn.net/abc_ii/article/details/9991845多网卡的7种bond模式原理 Linux网卡绑定mode共有七种(~) bond0.bond1.b ...
- Linux 双网卡绑定技术
bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4 重启网络 5 在交换机 ...
- CentOS6.2网卡绑定配置
下面主要介绍在CentOS6.2下使用系统自带的bonding进行网卡绑定的详细步骤,在此之前你可以看一下Linux网卡绑定探析,你也可以使用网卡绑定的脚本进行网卡绑定操作. 注意:请在配置前关闭Ne ...
- 多网卡绑定(bond)
通过以下命令查看bond0的工作状态查询能详细的掌握bonding的工作状态,如这个绑定各网卡的工作状态.主备关系.链路侦测时间[root@ASMTS ~]# cat /proc/net/bondin ...
- Centos 7.6 双网卡绑定实现高可用
Centos 7.6 双网卡绑定实现高可用 作者:尹正杰 版权声明:原创作品, 谢绝转载!否则将追究法律责任. 一.Bond模式概述 当linux系统上有多个单独网卡,又想充分利用这些网卡,同时对外提 ...
随机推荐
- windows下搭建vue
1.windows https://nodejs.org/en/download/ 下载安装包2.点击安装 安装完成3.进入cmd npm -v4.安装淘宝镜像cnpm npm下载速度过慢因为安装完n ...
- SSM框架下,使用ajax请求上传文件(doc\docx\excel\图片等)
1.准备工作 1.1.添加上传必要jar包 <dependency> <groupId>commons-io</groupId> <artifactId> ...
- Implementing a Dispose method
[Implementing a Dispose method] 1.实现System.IDsiposable.Dispose()方法.不能将此方法设置为virtual,子类不能override此方法. ...
- U3D组件------CharacterController(角色控制器)
角色控制器中有碰撞体和刚体的属性 Slope Limit:角色能爬的斜坡的坡度限制 Step Offset:角色走台阶的高度 Skin Width:当场景里面出现多个角色控制器的时候,两个对象在接触的 ...
- spring boot IDEA 开发微服务(二)
https://www.cnblogs.com/spaceud/p/8097934.html 参考以上微博,自己实际操作步骤如下: 1~开发准备 JDK:1.8 Spring Boot:2.1.0 S ...
- 手工命令行 搭建 hadoop 和 spark 环境
环境准备:3台CentOS7,64位,Hadoop2.7需要64位Linux 192.168.20.161 192.168.20.162 192.168.20.163 三台机器分别叫host01. ...
- artTemplate/template.js模板将时间格式化为正常的日期
网上提供的方法用不了 自己琢磨的 注意:ajax的异步方式必须设置成true才行,false不起作用.async: true: <script> function timestamp (v ...
- JAVA高精度模板
刚开始还坚持用C++写高精来着,后来发现JAVA写高精方便太多了,所以也来学习一下JAVA高精度的模板. 参考:https://www.cnblogs.com/imzscilovecode/p/883 ...
- AJAX模板
$.ajax({ type:"",//Ajax请求的提交方式(GET或POST) dataType:"text",//请求的类型 url:"" ...
- Array 遍历数组
public static void main(String args){ int a[][] = new int[3][4]; for(int i=0;i<a.length;i++){ for ...