Linux双网卡绑定脚本的方法示例

吾爱主题 阅读:145 2024-04-05 13:56:01 评论:0

linux运维及配置工作中,常常会用到双网卡绑定,少数几台服务器的配置还好,如果是需要配置几十甚至上百台,难免会枯燥乏味,易于出错,我编写了这个双网卡绑定的辅助脚本,可傻瓜式地完成linux双网卡绑定工作,当然,该脚本主要还是用于小批量的系统配置,如需配置大量的服务器,可提取脚本中的bonding函数,稍作修改即可,你值得一试!

1.适用范围

该shell脚本可在以下linux系统创建多个绑定网卡,用于生产环境没问题的:

  • Redhat 5.x
  • CentOS 5.x
  • Kylin 3.x
  • KUX 2.x

2.脚本特点

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ---------------------------------------------- ------ 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用户执行:

?
1 2 3 4 5 6 7 8 9 10 11 12 [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。

无需担心输入错误,输入重复等问题,脚本会自动判断你的输入信息是否正确。

?
1 2 3 4 5 6 7 8 9 10 11 12 ---------------------------------------------- ------ 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,会提示需要重新输入:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ---------------------------------------------- ------ 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为数字):

?
1 2 3 4 5 6 7 8 9 10 11 12 13 ---------------------------------------------- ------ 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地址格式和范围是否正确,无需担心输入错误

?
1 2 3 4 5 6 7 8 9 10 11 12 ---------------------------------------------- ------ 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,直接回车即可,也可以输入自定义的子网掩码。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 ---------------------------------------------- ------ 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),格式为:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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网卡。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ---------------------------------------------- ------ 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,重新输入以上信息。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 ---------------------------------------------- ------ 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命令获取当前网卡信息)。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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:                      [确定]

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

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 [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

网络配置信息如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [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)

双网卡绑定信息:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [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.脚本代码

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 #!/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-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 <<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 }

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

原文链接:http://blog.51cto.com/zaa47/2322183

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容