JAVA实现Linux网卡绑定_Linux双网卡绑定脚本的方法示例-程序员宅基地

技术标签: JAVA实现Linux网卡绑定  

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-scripts/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: RTNETLINK answers: File exists

在 bond0 添加地址 10.1.1.1 时出错。

[确定]

弹出界面 eth0: [确定]

弹出界面 eth1: [确定]

第一次重启网络服务时可能会出现以上类似报错,无需担心,其实配置已经完成,再次重启网络服务即恢复正常。

在绑定过程中修改的配置文件如下:

[root@node1 tmp]# cd /etc/sysconfig/network-scripts/

[root@node1 network-scripts]# 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-scripts]# 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-scripts]# 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-scripts]# 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 Link 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 frame: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 Link 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 frame: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 Link 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 frame: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 Link 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 frame: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 Link 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 frame: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 Link 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 frame: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

Link Failure Count: 0

Permanent HW addr: 08:00:27:41:b4:16

Slave Interface: eth3

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link 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:[email protected]

# 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 <

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 '/\/ {print $1}' | grep -wEv '^bond[0-9]+'`

#已经存在的绑定网卡

NIC_NAME_bond=`ifconfig -a | awk '/^\/ {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 <

----------------------------------------------

------ 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

#:<

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 \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-scripts

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 <

----------------------------------------------

------ 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

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_32457139/article/details/114856367

智能推荐

Docker 快速上手学习入门教程_docker菜鸟教程-程序员宅基地

文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程

电脑技巧:Windows系统原版纯净软件必备的两个网站_msdn我告诉你-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你

vue2封装对话框el-dialog组件_<el-dialog 封装成组件 vue2-程序员宅基地

文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_

MFC 文本框换行_c++ mfc同一框内输入二行怎么换行-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行

redis-desktop-manager无法连接redis-server的解决方法_redis-server doesn't support auth command or ismis-程序员宅基地

文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try

实验四 数据选择器及其应用-程序员宅基地

文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用

随便推点

灰色预测模型matlab_MATLAB实战|基于灰色预测河南省社会消费品零售总额预测-程序员宅基地

文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件

log4qt-程序员宅基地

文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt

100种思维模型之全局观思维模型-67_计算机中对于全局观的-程序员宅基地

文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的

线程间控制之CountDownLatch和CyclicBarrier使用介绍_countdownluach于cyclicbarrier的用法-程序员宅基地

文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法

自动化监控系统Prometheus&Grafana_-自动化监控系统prometheus&grafana实战-程序员宅基地

文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战

React 组件封装之 Search 搜索_react search-程序员宅基地

文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search