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网卡绑定脚本的更多相关文章

  1. Linux网卡绑定探析

    2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡绑定模式,Linux b ...

  2. Linux网卡绑定bond0-实验

    虚拟机添加网卡 ip addr 查看新增的网卡是否读取 添加bonding接口 [root@centos8~]$nmcli con add type bond con-name mybond0 ifn ...

  3. linux网卡绑定

  4. Linux下双网卡绑定(bonding技术)

    Linux网卡绑定探析   2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的 ...

  5. 深度分析Linux下双网卡绑定七种模式 多网卡的7种bond模式原理

    http://blog.csdn.net/abc_ii/article/details/9991845多网卡的7种bond模式原理 Linux网卡绑定mode共有七种(~) bond0.bond1.b ...

  6. Linux 双网卡绑定技术

    bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4  重启网络 5 在交换机 ...

  7. CentOS6.2网卡绑定配置

    下面主要介绍在CentOS6.2下使用系统自带的bonding进行网卡绑定的详细步骤,在此之前你可以看一下Linux网卡绑定探析,你也可以使用网卡绑定的脚本进行网卡绑定操作. 注意:请在配置前关闭Ne ...

  8. 多网卡绑定(bond)

    通过以下命令查看bond0的工作状态查询能详细的掌握bonding的工作状态,如这个绑定各网卡的工作状态.主备关系.链路侦测时间[root@ASMTS ~]# cat /proc/net/bondin ...

  9. Centos 7.6 双网卡绑定实现高可用

    Centos 7.6 双网卡绑定实现高可用 作者:尹正杰 版权声明:原创作品, 谢绝转载!否则将追究法律责任. 一.Bond模式概述 当linux系统上有多个单独网卡,又想充分利用这些网卡,同时对外提 ...

随机推荐

  1. 04_web基础(四)之servlet详解

    16.17.18.servlet生命周期 javax.servlet.Servlet接口方法:public String getServletInfo():获取Servlet相关信息(作者,版权,版本 ...

  2. zabbix 利用python脚本实现短信告警

    一.编写脚本 cd /usr/local/zabbix-4.0.3/share/zabbix/alertscripts vi zabbix_sms.py 内容如下: #!/usr/bin/python ...

  3. 数据持久化PlayerPrefs

    1.Unity3D中的数据持久化是以键值对的形式存储的,可以看作是一个字典 2.Unity3D中的值是通过键名来读取的,当值不存在时,返回默认值 3.在Unity中只支持int.float.strin ...

  4. 检查WMI协议是否通的

    在APM上的运行执行“wbemtest”,然后在上面的root\sivm前面加RPC不通的机器,先查WMI协议是否是通的

  5. cdh 安装系列1-- manager 6.01 安装

    一.如果是远程centos安装,请参考我得博客,通过xmanager 链接centos桌面 二.Non-production Installation Ideal for trying Clouder ...

  6. vps vultr centos7 搭建 伟皮恩

    vultr 配置 64 bit OS   CentOS 7 ×64 20 GB SSD    1 CPU  512MB  Memory  500GB Bandwidth √ Enable IPv6 √ ...

  7. HTML图片热区map area的用法(转)

    <area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面.其基本语法结构如下: 1 & ...

  8. tomcat指向外部项目

    参考 https://www.cnblogs.com/ysocean/p/6893446.html conf/server.xml中增加 <Context path="/myweb&q ...

  9. 有人说,即使没有JavaScript,你也可以做网页。在纯HTML

    有人说,即使没有JavaScript,你也可以做网页.在纯HTML +服务器端语言理论中也可以完成所有功能,那么,为什么以及在哪里存在JavaScript?   JS,全称JavaScript   在 ...

  10. vue bus 的使用

    简单的状态管理,可以用vue bus vue bus可以实现不同组件间.不同页面间的通信,比如我在A页面出发点击事件,要B页面发生变化,使用方法如下: 全局定义:main.js window.even ...