- 论坛徽章:
- 0
|
本帖最后由 93846273 于 2013-01-28 17:43 编辑
请教一下CU的shell板块大牛们。
条件如下,有100台机器,每台机器都配备6快盘,比如sda,sdb,sdc,sdd,sde,sdf。
每台机器都坏了2块盘或3块盘,并且每台机器坏盘的位置不一样,比如ip为1.1.1.1的机器坏了sdc和sdf,2.2.2.2的机器坏了sdb、sdd、sde。
现在我需要同时登陆100多台机器对这些坏盘进行重新分区、格式化、挂载等操作。
思路是这样式的。总共有3个文件,其中一个是shell文件,第二个是expect文件文件,第三个文件的内容是服务器地址以及对应的坏盘信息。
第一个文件:autofdisk.sh的内容如下。- #!/bin/bash
- #autofdisk script
- while read line
- do
- (
- t1=`echo $line |awk '{print $1}'`
- t2=`echo $line |awk '{print $2}'`
- expect autofdisk.exp $t1 $t2
- )&
- done < ./host
- wait
复制代码 第二个文件autofdisk.exp的内容如下。- #!/usr/bin/expect -f
- set timeout 600
- set passwd 123456
- set hosts [lindex $argv 0]
- set disk [lindex $argv 1]
- spawn ssh $hosts
- expect {
- "(yes/no)" {send "yes\r";exp_continue}
- "password:" {send "$passwd\r"}
- }
- expect -re "($|#)";send "fdisk /dev/$disk\r"
- expect "):";send "d\r"
- expect "):";send "n\r"
- expect "4)";send "p\r"
- expect "):";send "1\r"
- expect "):";send "\r"
- expect "):";send "\r"
- expect "):";send "w\r"
- expect -re "($|#)";send "exit\r"
- expect eof
复制代码 第三个文件的内容如下。- cat ./host
- 1.1.1.1 sdc
- 1.1.1.1 sdf
- 2.2.2.2 sdb
- 2.2.2.2 sdd
- 2.2.2.2 sde
复制代码 问题如下,现在是并发登陆多台机器,但是如何控制登陆每台机器后所进行的磁盘分区、格式化、挂载等操作是串行的,比如对于1.1.1.1,先分区、格式化、挂载sdc,等sdc挂载完成之后再对sdf进行分区、格式化、挂载。 host的文件格式可以灵活多变比如.
1.1.1.1 sdc sdf
2.2.2.2 sdb sdd sde |
|