需求大于一切,公司数据中心采购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*