一、新建VG&&LV
vim create_pv_lv.sh
#!/bin/bash
set -x
if [ $# -ne 3 ];then
echo "error,please use like sh creat_pv_lv.sh disk(/dev/sdb[0-9]) vgname(vg_data) lvname(lv_data)"
exit 201
fi
if ! which lvm >/dev/null 2>&1;then
echo "install lvm2 first"
exit 201
fi
function create_vg_pv(){
if ! lsblk $1 >/dev/null 2>&1;then
echo "error,$1 is not found,may not exist"
return 201
fi
respart=$(lsblk $1 |awk 'NR>=2{print $1}' |wc -l)
if ((respart > 1));then
echo "error,$1 can not use,just use $1[num]"
return 201
fi
reslsblk=$(lsblk $1 |awk 'NR==2{print $NF}'|grep "/"|wc -l)
if [ $reslsblk -ne 0 ];then
echo "error,$1 can not use,already mounted"
return 201
fi
resfilesys=$(file -s $1|grep "data$"|wc -l)
if [ $resfilesys -eq 0 ];then
respvs=$(pvs --noheadings --nolocking 2>/dev/null |grep $1|wc -l)
if ((respvs == 1));then
resvgs=$(vgs --noheadings --nolocking 2>/dev/null |grep $2 |wc -l)
if [ $resvgs -ne 0 ];then
echo "$2 has been created,no use create"
return 201
fi
fi
fi
pvcreate $1 >/dev/null 2>&1
vgcreate -s 4M $2 $1 >/dev/null 2>&1
resvgsagain=$(vgs --noheadings --nolocking 2>/dev/null |grep $2 |wc -l)
if ((resvgsagain==1));then
echo "OK,$1 create $2 successfully"
else
echo "error,$1 create $2 failed,check"
fi
}
function mkfilesystem()
{
lvname=/dev/$1/$2
file_res=$(lsblk -f $lvname | awk 'NR==2{print $2}'| egrep -i "XFS|ext4"|wc -l)
if [ "$file_res" -eq 0 ];then
if which mkfs.xfs >/dev/null 2>&1;then
mkfs.xfs -f $lvname >/dev/null 2>&1
echo "200::$lvname successfully make filesystem xfs"
elif which mkfs.ext4 >/dev/null 2>&1;then
mkfs.ext4 -F $lvname >/dev/null 2>&1
echo "200::$lvname successfully make filesystem ext4"
else
echo "400::error,no suitable mkfs found or make filesystem failed..."
return 201
fi
else
echo "400::find filesystem, no need to mkfs"
return 201
fi
}
function create_lv()
{
vgname=$1
lvname=$2
reslvs=$(lvs --noheadings --nolocking 2>/dev/null | grep "/dev/$vgname/$lvname" && echo yes || echo no)
if [ "$reslvs" == "yes" ];then
mkfilesystem $1 $2
else
freesize=$(vgs --noheadings --nolocking --units g $vgname 2>/dev/null|awk '{print $NF}'|awk -F '<' '{print $NF}'|awk -F 'G' '{print $1}'|awk -F . '{print $1}')
if [ $freesize -lt 1 ];then
echo "400::error,pvk空间小于1G,不足以新建lv"
exit 201
fi
createlvres=$(lvcreate -l 100%FREE -n $lvname $vgname 2>&1)
if [ $(echo $?) -eq 0 ];then
mkfilesystem $1 $2
else
echo "400::error,create lv $lvname failed"
return 201
fi
fi
}
create_vg_pv $1 $2
create_lv $2 $3
二、挂载
vim mount.sh
#!/bin/bash
function ClientMount() {
if [ ! $# -eq 2 ];then
echo "please input:lvname(/dev/vg_data/lv_data)、client_dir(/test)"
return 201
fi
lvname=$1
client_dir=$2
if [ ! -d $client_dir ];then
mkdir -p $client_dir >/dev/null 2>&1
fi
ismounted=$(cat /proc/mounts | awk '{if($3~"xfs|ext4"){print $0}}'|awk '{if($2=="'$client_dir'"){print $0}}'|wc -l)
if [ $ismounted -ne 0 ];then
echo "error,$client_dir has been mounted"
return 201
fi
if ! egrep "$lvname[[:space:]]*$client_dir[[:space:]]*xfs[[:space:]]*defaults[[:space:]]*0[[:space:]]*0" /etc/fstab >/dev/null 2>&1;then
echo "$lvname $client_dir xfs defaults 0 0" >>/etc/fstab
fi
mount -a
ismounted=$(cat /proc/mounts | awk '{if($3~"xfs|ext4"){print $0}}'|awk '{if($2=="'$client_dir'"){print $0}}'|wc -l)
if [ $ismounted -eq 0 ];then
echo "$2 mount $1 failed"
return 201
else
echo "$2 successfully mount $1"
exit 0
fi
}
ClientMount $1 $2
三、使用
sh create_pv_lv.sh /dev/vdb vg_data lv_data
sh mount.sh /dev/vg_data/lv_data /test-2022