linux运维及配置工作中,常常会用到双网卡绑定,少数几台服务器的配置还好,如果是需要配置几十甚至上百台,难免会枯燥乏味,易于出错,我编写了这个双网卡绑定的辅助脚本,可傻瓜式地完成linux双网卡绑定工作,当然,该脚本主要还是用于小批量的系统配置,如需配置大量的服务器,可提取脚本中的bonding函数,稍作修改即可,你值得一试!
1.适用范围
该shell脚本可在以下linux系统创建多个绑定网卡,用于生产环境没问题的:
- Redhat 5.x
- CentOS 5.x
- Kylin 3.x
- KUX 2.x
2.脚本特点
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- The information you have entered: First NIC :eth0 Second NIC :eth1 bond name :bond1 IP address :192.168.56.11 netmask :255.255.255.0 bonding_mode :mode=1 primary NIC :none ---------------------------------------------- Pls make sure its OK[y/n]:y
如上,脚本在使用过程中,会依次提示输入需要绑定的子网卡名称、绑定网卡名称、IP地址和子网掩码、绑定模式、是否指定主网卡,并主动对系统中可用网卡进行识别并列出,供用户选择,同时会判断输入的各项信息的正确性,保障双网卡绑定顺利进行。
3.使用说明
首先将脚本上传至linux系统任意目录下,使用root用户执行:
[root@node1 tmp]# sh bonding_v2.0.sh ---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- 4 network cards available: eth0 eth1 eth2 eth3 ---------------------------------------------- Please enter the First NIC:_
首先脚本会列出系统中有多少可用网卡,并提示输入需要绑定的第一块子网卡的名称,这里输入eth2。
无需担心输入错误,输入重复等问题,脚本会自动判断你的输入信息是否正确。
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- 4 network cards available: eth0 eth1 eth2 eth3 The information you have entered: First NIC : eth2 ---------------------------------------------- Please select the second NIC:_
接着输入需要绑定的第二块网卡的名称eth3,如果输入错误会出现相应的提示,比如错输入为eth8,会提示需要重新输入:
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- 4 network cards available: eth0 eth1 eth2 eth3 The information you have entered: First NIC : eth2 ---------------------------------------------- eth8 is not available,Please enter another one. Please select the second NIC:_
正确输入需要绑定的第二块网卡eth3后,如果linux系统中之前不存在绑定网卡,则默认第一个绑定网卡的名称为bond0,如果系统中存在绑定网卡,脚本会提示输入bondN(N为数字):
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- The information you have entered: First NIC : eth2 Second NIC : eth3 bond name : bond0 ---------------------------------------------- The default first bond name is -- bond0. Please enter an IP address:_
按照提示输入需要绑定的IP地址,比如10.1.1.1
脚本会自动判断输入的IP地址格式和范围是否正确,无需担心输入错误
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- The information you have entered: First NIC : eth2 Second NIC : eth3 bond name : bond0 IP address : 10.1.1.1 ---------------------------------------------- Pls enter the NETMASK[255.255.255.0]:_
输入IP地址后,会提示输入子网掩码,默认为255.255.255.0,直接回车即可,也可以输入自定义的子网掩码。
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- The information you have entered: First NIC : eth2 Second NIC : eth3 bond name : bond0 IP address : 10.1.1.1 netmask : 255.255.255.0 ---------------------------------------------- Pls enter the bonding_mode[default:mode=1,active-backup]:_
这一步是输入网卡绑定级别,默认使用主备模式:mode=1,直接回车即可,也可以输入自定义的绑定级别(如输入 mode=6),格式为:
mode={0,1,2,3,4,5,6} ---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- The information you have entered: First NIC :eth2 Second NIC :eth3 bond name :bond0 IP address :10.1.1.1 netmask :255.255.255.0 bonding_mode :mode=1 ---------------------------------------------- 1-eth2 2-eth3 3-none choose whether to set up the primary NIC or not[default:3-none]:_
此时脚本提示是否设置primary网卡,primary网卡的作用是在子网卡均正常时,primary网卡优先处于活动状态,这里默认为不设置primary网卡,也可以输入数字1或2选择一个网卡为primary网卡。
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- The information you have entered: First NIC :eth2 Second NIC :eth3 bond name :bond0 IP address :10.1.1.1 netmask :255.255.255.0 bonding_mode :mode=1 primary NIC :none ---------------------------------------------- Pls make sure its OK[y/n]:_
至此,所有信息输入完毕,脚本会让您判断输入的所有信息是否正确,正确则输入y,进行下一步操作,否则输入n,重新输入以上信息。
---------------------------------------------- ------ Network Configuration Assistant ------ ---------------------------------------------- Complete! File backup directory: /etc/sysconfig/network- s/inspur_bak you can check the file and then restart the network service. 1 ) service network restart 2 ) exit ---------------------------------------------- Please make your choice:_
看到这里时,所有绑定网卡的配置文件已经修改完毕了,输入1重启网络服务;输入2直接退出脚本。
建议选择重启网络服务,如果直接退出脚本而不重启网络服务,修改的配置文件是不会生效的,并且在使用该脚本创建下一个绑定网卡时显示信息会出现异常(因为脚本通过ifconfig命令获取当前网卡信息)。
you can check the file and then restart the network service.
1 ) service network restart
2 ) exit
----------------------------------------------
Please make your choice:1
正在关闭接口 eth0: [确定]
正在关闭接口 eth1: [确定]
正在关闭接口 eth2: [确定]
正在关闭接口 eth3: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 bond0: RTNET answers: File exists
在 bond0 添加地址 10.1.1.1 时出错。
[确定]
弹出界面 eth0: [确定]
弹出界面 eth1: [确定]
第一次重启网络服务时可能会出现以上类似报错,无需担心,其实配置已经完成,再次重启网络服务即恢复正常。
在绑定过程中修改的配置文件如下:
[root@node1 tmp]# cd /etc/sysconfig/network- s/
[root@node1 network- s]# cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
IPADDR=10.1.1.1
NETMASK=255.255.255.0
BONDING_OPTS=\"miimon=100 mode=1\"
[root@node1 network- s]# cat ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
#HWADDR=08:00:27:41:b4:16
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
SLAVE=yes
MASTER=bond0
[root@node1 network- s]# cat ifcfg-eth3
DEVICE=eth3
BOOTPROTO=none
#HWADDR=08:00:27:6c:3d:0c
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
SLAVE=yes
MASTER=bond0
[root@node1 network- s]# cat /etc/modprobe.conf
alias scsi_hostadapter ata_piix
alias scsi_hostadapter1 ahci
alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1
alias snd-card-0 snd-intel8x0
options snd-card-0 index=0
options snd-intel8x0 index=0
remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0
alias eth0 e1000
alias eth1 e1000
alias eth2 e1000
alias eth3 e1000
alias bond0 bonding
网络配置信息如下:
[root@node1 tmp]# ifconfig
bond0 encap:Ethernet HWaddr 08:00:27:41:B4:16
inet addr:10.1.1.1 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1197 errors:0 dropped:0 overruns:0 :0
TX packets:125 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:106338 (103.8 KiB) TX bytes:16662 (16.2 KiB)
eth0 encap:Ethernet HWaddr 08:00:27:35:B4:81
inet addr:192.168.56.11 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1487 errors:0 dropped:0 overruns:0 :0
TX packets:1190 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:146576 (143.1 KiB) TX bytes:151787 (148.2 KiB)
eth1 encap:Ethernet HWaddr 08:00:27:72:08:46
inet addr:10.1.1.11 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:193 errors:0 dropped:0 overruns:0 :0
TX packets:455 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:31434 (30.6 KiB) TX bytes:22657 (22.1 KiB)
eth2 encap:Ethernet HWaddr 08:00:27:41:B4:16
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:591 errors:0 dropped:0 overruns:0 :0
TX packets:93 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:55217 (53.9 KiB) TX bytes:10511 (10.2 KiB)
eth3 encap:Ethernet HWaddr 08:00:27:41:B4:16
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:606 errors:0 dropped:0 overruns:0 :0
TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:51121 (49.9 KiB) TX bytes:6151 (6.0 KiB)
lo encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3297 errors:0 dropped:0 overruns:0 :0
TX packets:3297 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4725726 (4.5 MiB) TX bytes:4725726 (4.5 MiB)
双网卡绑定信息:
[root@node1 tmp]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.4.0-2 (October 7, 2008) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth2 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth2 MII Status: up Speed: 1000 Mbps Duplex: full Failure Count: 0 Permanent HW addr: 08:00:27:41:b4:16 Slave Interface: eth3 MII Status: up Speed: 1000 Mbps Duplex: full Failure Count: 0 Permanent HW addr: 08:00:27:6c:3d:0c
4.脚本代码
#!/bin/bash
# Date:2018-11-26 14:28:45
# Author:ZhangJian
# Mail:1037509307@qq.com
# Func:Configure Network Bonding
# Version:2.0
#V1.6版本更新:不再将绑定的模式mode=x写入modprobe.conf文件,将其写入ifcfg-bond中,因为在modprobe.conf文件中时,修改了mode模式后,重启网络服务可能不生效。
#V2.0版本更新:将primary网卡设置为可选择项。
trap \"tput clear;tput cup 3;echo \'Any Questions: Send a message to QQ 1037509307.\';tput cup 6;exit\" 2 3
if [[ -n $1 ]]; then
cat <<EOF
Network Configuration Assistant
--- Configure Network Bonding v1.5
Usage:
sh $0
chmod +x $0 && ./$0
EOF
exit 0
fi
if [[ $UID -ne 0 ]]; then
tput clear
tput cup 6 20
echo -e \"You must use the user: \\033[31mROOT\\033[0m\"
tput cup 10
exit
fi
ERROR(){
tput cup $1 $2;tput ed
echo \'Input error,Try again pls.\'
echo -e \'Press ENTER to continue..._\\b\\c\'
read inputA
}
Check_BakFile(){
#文件备份函数
#使用方法:
#Check_BakFile 要备份的文件名 备份目录 -x(按什么时间格式备份)
case ${3} in
-d ) #按天备份
Bak_Date=`date \'+%Y-%m-%d\'`
;;
-H ) #按小时备份
Bak_Date=`date \'+%Y-%m-%d_%H\'`
;;
-M ) #按分钟备份
Bak_Date=`date \'+%Y-%m-%d_%H:%M\'`
;;
-m ) #按月备份
Bak_Date=`date \'+%Y-%m\'`
;;
-Y ) #按年备份
Bak_Date=`date \'+%Y\'`
;;
* ) #默认按分钟备份
Bak_Date=`date \'+%Y-%m-%d_%H:%M\'`
;;
esac
#Bak_Date=`date \'+%Y-%m-%d-%H:%M\'`
[[ -d ${2}/${Bak_Date} ]] || mkdir -p ${2}/${Bak_Date}
cp -ra ${1} ${2}/${Bak_Date}
}
bonding_pre(){
#双网卡绑定前导函数,判定网卡、IP等合法性并引导用户正确输入参数。
#全部真实网卡
NIC_NAME_all=`ifconfig -a | awk \'/\\<Ethernet\\>/ {print $1}\' | grep -wEv \'^bond[0-9]+\'`
#已经存在的绑定网卡
NIC_NAME_bond=`ifconfig -a | awk \'/^\\<bond[0-9]+\\>/ {print $1}\'`
#打印出已经是SLAVE的网卡
NIC_NAME_slave=`ifconfig -a | sed -n \'/SLAVE/{g;1!p;};h\' | awk \'{print $1}\'`
NIC_NAME_slave=${NIC_NAME_slave:=NULL}
#打印出可用网卡
NIC_NAME_free=`echo \"$NIC_NAME_all\" | grep -Fwv \"$NIC_NAME_slave\"`
#可用网卡数量
NIC_NAME_free_nu=`echo \"$NIC_NAME_free\" | wc -w`
declare -a NIC_LIST
NIC_LIST=($NIC_NAME_free)
info_print(){
tput clear;tput cup 2
cat <<EOF
----------------------------------------------
------ Network Configuration Assistant ------
----------------------------------------------
EOF
tput cup 7
if [[ -n ${1} ]]; then
echo -e \"Already existing Channel Bonding Interface of the system:\\n\\033[31m${1}\\033[0m\\n\"
fi
}
if [[ \"$NIC_NAME_free_nu\" -gt 1 ]]; then
info_print
echo -e \"\\033[031m$NIC_NAME_free_nu\\033[0m network cards available:\"
echo -e \"\\033[31m${NIC_LIST[@]}\\033[0m\"
echo -e \"----------------------------------------------\\n\"
#输入第一块网卡的名称
while true; do
echo -e \"\\nPlease enter the First NIC:_\\b\\c\"
read NIC1
echo ${NIC_LIST[@]} | grep -Fw \"$NIC1\" &> /dev/null
if [[ $? -eq 0 ]]; then
info_print
echo -e \"\\033[031m$NIC_NAME_free_nu\\033[0m network cards available:\\n\\033[31m${NIC_LIST[@]}\\033[0m\"
echo -e \"\\nThe information you have entered:\\nFirst NIC : $NIC1\"
echo -e \"----------------------------------------------\\n\"
break
else
info_print
echo -e \"\\033[031m$NIC_NAME_free_nu\\033[0m network cards available:\\n\\033[31m${NIC_LIST[@]}\\033[0m\"
echo -e \"----------------------------------------------\\n\"
echo -e \"\\033[31m${NIC1}\\033[0m is not available,Please enter another one.\"
fi
done
#输入第二块网卡的名称
while true; do
echo -e \"\\nPlease select the second NIC:_\\b\\c\"
read NIC2
if [[ ${NIC1} != ${NIC2} ]]; then
echo ${NIC_LIST[@]} | grep -Fw \"${NIC2}\" &> /dev/null
if [[ $? -eq 0 ]]; then
info_print \"${NIC_NAME_bond}\"
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\"
echo -e \"----------------------------------------------\\n\"
break
else
info_print
echo -e \"\\033[031m$NIC_NAME_free_nu\\033[0m network cards available:\\n\\033[31m${NIC_LIST[@]}\\033[0m\\n\\nThe information you have entered:\\nFirst NIC : ${NIC1}\"
echo -e \"----------------------------------------------\\n\"
echo -e \"\\033[31m${NIC2}\\033[0m is not available,Please enter another one.\"
fi
else
info_print
echo -e \"\\033[031m${NIC_NAME_free_nu}\\033[0m network cards available:\\n\\033[31m${NIC_LIST[@]}\\033[0m\\n\\nThe information you have entered:\\nFirst NIC : ${NIC1}\"
echo -e \"----------------------------------------------\\n\"
echo -e \"\\033[31m${NIC2}\\033[0m is the first NIC,Please enter another one.\"
fi
done
#输入绑定网卡名称并进行合理性检查
if [[ -z ${NIC_NAME_bond} ]]; then
NAME_bond=bond0
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\"
echo -e \"----------------------------------------------\\n\"
echo \"The default first bond name is -- bond0.\"
else
while true; do
echo -e \"\\nPlease enter a bond name[bonN]:_\\b\\c\"
read NAME_bond
#检查输入格式是否为bond+数字的格式。
echo \"${NAME_bond}\" | grep -wE \'^bond[[:digit:]]+$\' &> /dev/null
if [[ $? -eq 0 ]]; then
echo \"${NIC_NAME_bond}\" | grep -Fw \"${NAME_bond}\" &> /dev/null
if [[ $? -ne 0 ]]; then
info_print \"${NIC_NAME_bond}\"
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\"
echo -e \"----------------------------------------------\\n\"
break
else
info_print \"${NIC_NAME_bond}\"
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\"
echo -e \"----------------------------------------------\\n\"
echo \"You can not use an existing name: ${NAME_bond}\"
echo -e \"\\033[31m${NAME_bond}\\033[0m is not available,Please enter another one like -- bondN.\"
fi
else
info_print \"${NIC_NAME_bond}\"
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\"
echo -e \"----------------------------------------------\\n\"
echo -e \"\\033[31m${NAME_bond}\\033[0m is not available,Please enter another one like -- bondN.\"
fi
done
fi
#设置IP地址
while true; do
echo -e \"\\nPlease enter an IP address:_\\b\\c\"
read IP_bond
echo \"${IP_bond}\" | grep -owE \'^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\\.){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})$\' &> /dev/null
if [[ $? -eq 0 ]]; then
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\\nIP address : ${IP_bond}\"
echo -e \"----------------------------------------------\\n\"
break
else
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\"
echo -e \"----------------------------------------------\\n\"
echo -e \"IP address: \\033[31m${IP_bond}\\033[0m format errors, please re-enter.\"
fi
done
#设置netmask
while true; do
echo -e \"\\nPls enter the NETMASK[255.255.255.0]:_\\b\\c\"
read NETMASK_bond
NETMASK_bond=${NETMASK_bond:=\"255.255.255.0\"} #当变量为NETMASK_bond为空时,给其赋默认值255.255.255.0
echo \"$NETMASK_bond\" | grep -owE \'^(128|192|224|240|248|252|254|255)\\.((0|128|192|224|240|248|252|254|255)\\.){2}(0|128|192|224|240|248|252|254|255)$\' &> /dev/null
if [[ $? -eq 0 ]]; then
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\\nIP address : ${IP_bond}\\nnetmask : ${NETMASK_bond}\"
echo -e \"----------------------------------------------\\n\"
break
else
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\\nIP address : ${IP_bond}\"
echo -e \"----------------------------------------------\\n\"
echo -e \"Input error.\\nPlease enter the correct NETMASK or press ENTER to use 255.255.255.0.\\n\"
fi
done
#:<<!zhushi! #批量注释,如果开启批量注释,默认mode=1
while true; do
echo -e \"\\nPls enter the bonding_mode[default:mode=1,active-backup]:_\\b\\c\"
read mode_bond
mode_bond=${mode_bond:=\"mode=1\"} #当变量为mode_bond为空时,给其赋默认值1
if [[ ! ${mode_bond} =~ \"mode=[0-6]\" ]]; then
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\\nIP address : ${IP_bond}\\netmask : ${NETMASK_bond}\"
echo -e \"----------------------------------------------\\n\"
echo \"Invalid answer: ${mode_bond}\"
echo \"Eg: mode={0,1,2,3,4,5,6}\"
else
info_print
echo -e \"The information you have entered:\\n\"
echo -e \"First NIC :${NIC1}\\nSecond NIC :${NIC2}\\nbond name :${NAME_bond}\\nIP address :${IP_bond}\\nnetmask :${NETMASK_bond}\\nbonding_mode :${mode_bond}\"
echo -e \"----------------------------------------------\\n\"
break
fi
done
#!zhushi!
#选择是否设置primary网卡
while true; do
echo \"1-${NIC1}\"
echo \"2-${NIC2}\"
echo \"3-none\"
echo -e \"choose whether to set up the primary NIC or not[default:3-none]:_\\b\\c\"
read get_primary_NIC
get_primary_NIC=${get_primary_NIC:=\"none\"}
case ${get_primary_NIC} in
1 )
get_primary_NIC=${NIC1}
#echo \"--$get_primary_NIC\"
break
;;
2 )
get_primary_NIC=${NIC2}
#echo \"--$get_primary_NIC\"
break
;;
3 )
get_primary_NIC=none
#echo \"--$get_primary_NIC\"
break
;;
none )
break
;;
* )
#echo \"--$get_primary_NIC\"
info_print
echo -e \"The information you have entered:\\nFirst NIC : ${NIC1}\\nSecond NIC : ${NIC2}\\nbond name : ${NAME_bond}\\nIP address : ${IP_bond}\\nnetmask : ${NETMASK_bond}\"
echo -e \"----------------------------------------------\\n\"
echo \"Invalid answer: ${get_primary_NIC}\"
echo \"Pls input a number in {1,2,3} or press ENTER to set up primary NIC none.\"
continue
;;
esac
info_print
echo -e \"The information you have entered:\\n\"
echo -e \"First NIC :${NIC1}\\nSecond NIC :${NIC2}\\nbond name :${NAME_bond}\\nIP address :${IP_bond}\\nnetmask :${NETMASK_bond}\\nbonding_mode :${mode_bond}\\nprimary NIC :${get_primary_NIC}\"
echo -e \"----------------------------------------------\\n\"
break
done
#最终输入信息确认
while true; do
info_print
echo -e \"The information you have entered:\\n\"
echo -e \"\\033[31mFirst NIC :${NIC1}\\nSecond NIC :${NIC2}\\nbond name :${NAME_bond}\\nIP address :${IP_bond}\\nnetmask :${NETMASK_bond}\\nbonding_mode :${mode_bond}\\nprimary NIC :${get_primary_NIC}\\033[0m\"
echo -e \"----------------------------------------------\\n\"
echo -e \"Pls make sure its OK[y/n]:_\\b\\c\"
read input
case ${input} in
[Yy]|[Yy][Ee][Ss] )
bonding \"$NIC1\" \"$NIC2\" \"$NAME_bond\" \"$IP_bond\" \"$NETMASK_bond\"
break
;;
[Nn]|[Nn][Oo] )
bonding_pre
;;
* )
tput cup 7;tput ed
ERROR 7 10
;;
esac
done
else
info_print
echo -e \"You have \\033[031m${NIC_NAME_free_nu}\\033[0m network cards available:\\n\"
#将重点显示的“网卡名”标示为红色
echo -e \"\\033[31m${NIC_LIST[@]}\\033[0m\\n\"
echo -e \"There are \\033[31mnot enough\\033[0m network cards to make bonding\"
echo -e \"Pls check it......\\n\"
echo -e \'Press ENTER to exit..._\\b\\c\'
read answer
exit 1
fi
}
bonding(){
if [[ $# -lt 5 ]]
then
echo \'Bonding failed! Please provide enough information!\'
echo -e \"\\nUsage:\\n sh bonding.sh <NIC1_name> <NIC2_name> <bond_name> <IP> <NETMASK>\\n\\n\"
exit 1
fi
#get device name and ip information
SLAVE1_DEV=\"$1\" #SLAVE1_DEV=ethx
SLAVE2_DEV=\"$2\" #SLAVE2_DEV=ethx
BOND_DEV=\"$3\" #BOND_DEV=bondx
SLAVE1=ifcfg-\"$1\"
SLAVE2=ifcfg-\"$2\"
BOND=ifcfg-\"$3\"
BOND_IPADDR=\"$4\"
BOND_NETMASK=\"$5\"
BOND_DIR=/etc/sysconfig/network- s
if [ -e $BOND_DIR/$BOND ]
then
echo $BOND_DIR/$BOND is already exist
else
#file backup
Check_BakFile \"${BOND_DIR}/ifcfg-*\" \"${BOND_DIR}/inspur_bak\" \"-M\"
#get mac address
SLAVE1_MAC=`grep \'HWADDR\' ${BOND_DIR}/${SLAVE1}`
SLAVE2_MAC=`grep \'HWADDR\' ${BOND_DIR}/${SLAVE2}`
# modify $BOND
touch $BOND_DIR/$BOND
echo \"DEVICE=${BOND_DEV}\" >> $BOND_DIR/$BOND
echo \"BOOTPROTO=none\" >> $BOND_DIR/$BOND
echo \"ONBOOT=yes\" >> $BOND_DIR/$BOND
echo \"TYPE=Ethernet\" >> $BOND_DIR/$BOND
echo \"USERCTL=no\" >> $BOND_DIR/$BOND
echo \"IPV6INIT=no\" >> $BOND_DIR/$BOND
echo \"PEERDNS=yes\" >> $BOND_DIR/$BOND
echo \"IPADDR=${BOND_IPADDR}\" >> $BOND_DIR/$BOND
echo \"NETMASK=${BOND_NETMASK}\" >> $BOND_DIR/$BOND
if [[ ${get_primary_NIC} == none ]]; then
echo \"BONDING_OPTS=\\\"miimon=100 ${mode_bond}\\\"\" >> $BOND_DIR/$BOND
else
echo \"BONDING_OPTS=\\\"miimon=100 ${mode_bond} primary=$(echo ${SLAVE1} | cut -d\'-\' -f2)\\\"\" >> $BOND_DIR/$BOND
fi
# modify $SLAVE1
> $BOND_DIR/$SLAVE1
echo \"DEVICE=${SLAVE1_DEV}\" >> $BOND_DIR/$SLAVE1
echo \'BOOTPROTO=none\' >> $BOND_DIR/$SLAVE1
#cat $BOND_DIR/../ifcfg-bak/$SLAVE1 |grep HWADDR >> $BOND_DIR/$SLAVE1
echo \"#$SLAVE1_MAC\" >> $BOND_DIR/$SLAVE1
echo ONBOOT=yes >> $BOND_DIR/$SLAVE1
echo TYPE=Ethernet >> $BOND_DIR/$SLAVE1
echo USERCTL=no >> $BOND_DIR/$SLAVE1
echo IPV6INIT=no >> $BOND_DIR/$SLAVE1
echo PEERDNS=yes >> $BOND_DIR/$SLAVE1
echo SLAVE=yes >> $BOND_DIR/$SLAVE1
echo MASTER=$BOND_DEV >> $BOND_DIR/$SLAVE1
# modify SLAVE2
> $BOND_DIR/$SLAVE2
echo \"DEVICE=$SLAVE2_DEV\" >> $BOND_DIR/$SLAVE2
echo BOOTPROTO=none >> $BOND_DIR/$SLAVE2
#cat $BOND_DIR/../ifcfg-bak/$SLAVE2 |grep HWADDR >> $BOND_DIR/$SLAVE2
echo \"#$SLAVE2_MAC\" >> $BOND_DIR/$SLAVE2
echo ONBOOT=yes >> $BOND_DIR/$SLAVE2
echo TYPE=Ethernet >> $BOND_DIR/$SLAVE2
echo USERCTL=no >> $BOND_DIR/$SLAVE2
echo IPV6INIT=no >> $BOND_DIR/$SLAVE2
echo PEERDNS=yes >> $BOND_DIR/$SLAVE2
echo SLAVE=yes >> $BOND_DIR/$SLAVE2
echo MASTER=$BOND_DEV >> $BOND_DIR/$SLAVE2
[[ -e /etc/modprobe.conf.bak ]] && cp /etc/modprobe.conf /etc/modprobe.conf.bak.new || cp /etc/modprobe.conf /etc/modprobe.conf.bak
echo \"alias $BOND_DEV bonding\" >> /etc/modprobe.conf
while true; do
tput clear;tput cup 2
cat <<EOF
----------------------------------------------
------ Network Configuration Assistant ------
----------------------------------------------
Complete!
File backup directory: ${BOND_DIR}/inspur_bak
you can check the file and then restart the network service.
1 ) service network restart
2 ) exit
----------------------------------------------
EOF
echo -e \"Please make your choice:_\\b\\c\"
read answer
case ${answer} in
1 )
service network restart
exit 0
;;
2 )
exit 0
;;
esac
done
fi
}
main(){
while true; do
bonding_pre
done
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
继续阅读与本文标签相同的文章
Java程序员修炼之路线程篇之终篇
-
Jmeter的压测使用
2026-05-19栏目: 教程
-
maven常用命令
2026-05-19栏目: 教程
-
Java常用命令之jstat
2026-05-19栏目: 教程
-
阿里云第六代云服务器实例类型、特性及可选区域介绍
2026-05-19栏目: 教程
-
Greenplum6单机安装攻略
2026-05-19栏目: 教程
