pv vg lv
#!/bin/sh
. $SCRIPT_PATH/common/exports.sh
. $SCRIPT_PATH/common/common.sh
needCreateDataVolume(){
[ `fdisk -l | grep -w "vg_directorData-lv_$1" | grep -v grep | wc -l` -lt 1 ]
}
createlv() {
size=`echo "$2 - 0.1" | bc` # float compute: size = size - 0.1 , to make sure lv_size < vg_size
echo "y" > y.txt
lvcreate -L ${size}G -n lv_$1 /dev/mapper/vg_directorData < y.txt
if [[ $? -ne 0 ]]; then
echoAndLog nodeDeploy "create lv_$1 failed."
rm -rf y.txt
exit 1
fi
rm -rf y.txt
}
createDataVolume(){
size=$3
[ `pvdisplay | grep -w $1 | grep -v grep | wc -l` -ge 1 ] || pvcreate $1
[ `vgdisplay | grep -w "vg_directorData" | grep -v grep | wc -l` -ge 1 ] || vgcreate vg_directorData $1
[ `lvdisplay | grep -w "lv_$2" | grep -v grep | wc -l` -ge 1 ] || createlv $2 $size
vgchange -ay vg_directorData # change volume group status to active, to make logical volume lv_data active.
mkfs.ext4 /dev/mapper/vg_directorData-lv_$2
[[ $? -eq 0 ]] || return $?
echoAndLog nodeDeploy "data disk /dev/mapper/vg_directorData-lv_$2 create success."
}
checkAndCreateDataVolume(){
pvName=$physicVolume
lvName=$1
size=$2
if needCreateDataVolume "$lvName" ; then
echoAndLog nodeDeploy "create data Disk: lv_$lvName ..."
if checkFuncInDeploy "$lvName" ; then
createDataVolume "$pvName" "$lvName" "$size"
else
echoAndLog nodeDeploy "Can't create lv: lv_$lvName, because $lvName is not deploy in this node."
fi
else
echoAndLog nodeDeploy "data disk /dev/mapper/vg_directorData-lv_$lvName is already created. Skip."
return 0
fi
}
checkAlloc() {
let sum=0
let allSize=$(echo $volumeSize | cut -d 'G' -f 1 )
if [ "$allSize" = "" ]; then
echoAndLog nodeDeploy "volumeSize is empty. please check nodeDeploy.ini"
exit 1
fi
if [ "$allocations" = "" ]; then
echoAndLog nodeDeploy "allocation is empty. will create a defalut data volume vg_directorData-lv_data ... "
allocSize=`echo "$allSize-0.01" | bc` # float compute: allocSize = allSize - 0.01 , becase if vg_size==lv_size, will create lv fail!
allocations="dataLv:${allocSize}G"
fi
for allocation in $allocations
do
alloc=$(echo $allocation | cut -d ':' -f 2 | cut -d 'G' -f 1)
sum=`echo "$sum+$alloc" | bc` # float compute: compute sum of alloc
done
if [ `echo "$sum > $allSize" | bc` = 1 ]; then # float compare: if (sum > allSize); then ...
echoAndLog nodeDeploy "failed: allocation size is bigger than volumeSize, please check nodeDeploy.ini."
exit 1
fi
}
checkPhysicVolume() {
if [[ "$physicVolume" != "/dev"* ]]; then
echoAndLog nodeDeploy "physicVolume is not /dev/*** in nodeDeploy.ini, no need to create data disk. Skip."
exit 0
fi
}
#main
checkPhysicVolume
checkAlloc
for allocation in $allocations
do
functionName=$(echo $allocation | cut -d ':' -f 1)
alloc=$(echo $allocation | cut -d ':' -f 2 | cut -d 'G' -f 1)
checkAndCreateDataVolume $functionName $alloc
done
if [[ $? -ne 0 ]] ; then
echoAndLog nodeDeploy "data disk create failed."
exit 1
fi

浙公网安备 33010602011771号