需求大于一切,公司数据中心采购50台DELL服务器部署Hadoop集群,每台机器配了6块3T硬盘,linux下fdisk工具只能格式化小于2T的硬盘,大于2T的需使用parted工具来格式化。

无论使用哪种格式化工具,对于50*6这个数字,如果手工一块一块去创建分区并挂载至目录下,工作量是可想而知的,这里总结了一个自动化脚本,使用起来非常方便,本来这个脚本是准备在集群主节点上分发到各个datanode上,然后通过ssh 远程执行脚本实现的,后来发现远程执行这个脚本会进入一个死循环,一直重复对机器的第一块硬盘进行操作,而在本机上执行却正常,猜想可能和脚本中取磁盘盘符函数有关,目前还没有修复这个问题,所以只能ssh到各个节点上去手动执行脚本。后面有时间再具体研究一下。

脚本如下:

1、使用parted进行分区:

#!/bin/bash  
#Used to fomat 6 disks
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH  
i=1
while [ $i -lt 7 ]  
do
j=`echo $i|awk '{printf "%c",97+$i}'`
parted /dev/sd$j <<ESXU
mklabel gpt
mkpart primary 0 -1
ignore
quit
ESXU
echo "/n/n******/dev/sd${j} __was Fdisked! Waiting For 10 Second*****/n/n"  
sleep 1s
                mkfs.ext4 /dev/sd${j}1
                if [ "$?" = "0" ];then
                    echo "/n/n*****sd${j}1 _________________was Formated, Waiting For 5 Second****/n/n"  
                fi
                let i+=1
sleep 1s
done
touch /test2
mkdir /disk1
mkdir /disk2
mkdir /disk3
mkdir /disk4
mkdir /disk5
mkdir /disk6
cat << ESXU > /test2
/dev/sdb1      /disk1  ext4    defaults        0      0
/dev/sdc1      /disk2  ext4    defaults        0      0
/dev/sdd1      /disk3  ext4    defaults        0      0
/dev/sde1      /disk4  ext4    defaults        0      0
/dev/sdf1      /disk5  ext4    defaults        0      0
/dev/sdg1      /disk6  ext4    defaults        0      0
ESXU
cat /test2 >> /etc/fstab
mount -a
chmod -R 777 /disk*
rm -rf /test2

2、使用fdisk工具脚本:

#!/bin/bash  
#Used to fomat 6 disks
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH  
i=1
while [ $i -lt 4 ]  
do
j=`echo $i|awk '{printf "%c",97+$i}'`
fdisk /dev/sd$j <<ESXU
n
p
1


w
ESXU
echo "/n/n******/dev/sd${j} __was Fdisked! Waiting For 10 Second*****/n/n"  
sleep 1s
                mkfs.ext4 /dev/sd${j}1
                if [ "$?" = "0" ];then
                    echo "/n/n*****sd${j}1 _________________was Formated, Waiting For 5 Second****/n/n"  
                fi
                let i+=1
sleep 1s
done
touch /test2
mkdir /disk1
mkdir /disk2
mkdir /disk3
cat << ESXU > /test2
/dev/sdb1      /disk1  ext4    defaults        0      0
/dev/sdc1      /disk2  ext4    defaults        0      0
/dev/sdd1      /disk3  ext4    defaults        0      0
ESXU
cat /test2 >> /etc/fstab
mount -a
chmod -R 777 /disk*