小知识:Linux双网卡绑定脚本的方法示例

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

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Linux Crontab Shell脚本实现秒级定时任务的方法

2023-3-20 7:11:00

建站知识

小知识:如何在 Linux 中查找一个命令或进程的执行时间

2023-3-20 7:27:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索