lvm-chushihua.sh
#!/bin/bash
#创建主界面
function initallPly(){
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "****************************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****1.创建分区*************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******a1.创建pv************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******b1.创建vg************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******c1.创建lv************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******d1.扩容lv************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******d2.调整VG************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****d3.格式化LV分区后挂载磁盘*********"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****2.卸载LV分区*************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******3.删除lv************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******4.删除vg****"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****5.删除PV*********"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****6.删除磁盘分区*********"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****q.退出*********"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "****************************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
read -p "请选择操作【1或者2】:" imput
case $imput in
1)
fdiskC
ls -l /dev/sd*
initallPly
;;
a1)
pvC
initallPly
;;
b1)
vgC
initallPly
;;
c1)
lvC
initallPly
;;
d1)
extendLv
initallPly
;;
d2)
reaexVg
initallPly
;;
d3)
geS
initallPly
;;
2)
umountS
initallPly
;;
3)
removeLV
initallPly
;;
4)
removeVG
initallPly
;;
5)
removePV
initallPly
;;
6)
fdiskD
initallPly
;;
q)
return
;;
*)
echo "输入不正确!请重新输入"
initallPly
;;
esac
}
#创建分区
function fdiskC(){
read -p "请输入磁盘序列号,如sdb sdc sdd多个,以空格隔开: " imput
code=$imput
for i in $code
do
{
read -p "请输入分配磁盘的大小,如100: " num
fdisk /dev/$i <<EOF
p
n
p
1
+$numG
n
p
2
t
1
8e
t
2
8e
w
EOF
echo "创建分区成功!"
echo -ne "\\n" 1>&9
fdisk /dev/$i
}
done
wait
echo 9<&-
echo 9>&-
}
#pv创建
function pvC(){
read -p "请输入需要创建pv的磁盘分区,如sdc,sdd,sde1,sde2,sde: " imput
code=$imput
for j in $code
do
pvcreate /dev/${j}
done
pvs
}
#vg创建
function vgC(){
read -p "请输入需要创建的vg名称: " imput
ls -l | grep sd* || ls -s |grep vd*
read -p "请根据上述输入几个磁盘分区名称: " vgnum
read -p "请根据上述输入需要创建卷组的第一个分区名称,如/dev/sdb: " pvc1
read -p "请根据上述输入需要创建卷组的第两分区名称,如/dev/sdc: " pvc2
if [ $vgnum == 1 ];then
vgcreate ${imput} ${pvc1}
else
vgcreate ${imput} ${pvc1} ${pvc2}
fi
vgs
}
#lv创建
function lvC(){
read -p "请输入需要在哪个卷组中创建: " vgname
read -p "请输入需要创建的lv2名称: " lvname2
read -p "请输入需要创建多少个LV逻辑卷: " lvnum
for(( j=0;j<$lvnum;j++ ))
do
read -p "请输入卷组分多少G,切记不可累计超过vg总量:" lvsum
read -p "请输入需要创建的lv1名称: " lvname1
if [ j == $lvnum ];then
lvcreate -l +100%FREE -n ${lvname2} ${vgname}
lvextend -L +100%FREE /dev/${vgname}/${lvname2}
else
lvcreate -n ${lvname1} -L +${lvsum}G ${vgname}
fi
done
lvs
}
#删除分区
function fdiskD(){
read -p "请输入需要删除分区的磁盘序列号,如sde1 sde2多个,以空格隔开: " imput
read -p "请输入需要删除分区的磁盘个数: " sum
code=$imput
for i in $code
do
read -p "请输入需要删除分区的磁盘序列号,如sdb sdc sdd多个,以空格隔开: " ciname
if [ $sum == 2 ];then
echo "
d
d
w" | fdisk /dev/$ciname
echo "删除${ciname}"1" ${ciname}"2"的分区成功!"
else
echo "
d
w" | fdisk /dev/$ciname
fi
done
wait
echo 9<&-
echo 9>&-
}
#设置VG菜单
function reaexVg(){
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "****************************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****1.调整vg配额*************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****2.删除整个vg************"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*****************************"
read -p "请选择操作【1 或者 2 ,q为退出到主界面】:" imput
case $imput in
1)
extendVg
reaexVg
;;
2)
removeVG
reaexVg
;;
q)
initallPly
;;
*)
reaexVg
;;
esac
}
#VG配额
function extendVg(){
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******1.减少VG配额*********"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "*******2.扩展VG配额*********"
eval printf \\' %.0s\\' {1..$((41 - 1))}
echo "****************************"
read -p "请选择操作【1-2 q退出到VG菜单】: " imput
read -p "请输入调整的配额卷组名称:" vgname
read -p "输入需要调整的磁盘,如果多个【sdb sdc sdb1】: " sdnames
code=$sdnames
zx=
case $imput in
1)
zx="vgreduce"
reduceVg
;;
2)
zx="vgextend"
;;
q)
reaexVg
;;
*)
echo "输入错误,请重新选择"
extendVg
;;
esac
for sdn in $code
do
`$zx ${vgname} /dev/${sdnames}`
done
echo "操作完毕,配额已完成!"
vgs
}
#缩容vg
function reduceVg(){
read -p "请输入需要在哪个卷组中缩容: " vgname
read -p "输入需要调整的磁盘,如果多个【/dev/sdb /dev/sdc /dev/sdb1】: " sdnames
vgreduce $vgname ${sdnames}
vgs
}
#扩容lv-xfs
function extendLv(){
read -p "请输入需要在哪个卷组中扩容: " vgname
read -p "请输入需要在哪个lv组中扩容: " lvname
lvextend -l +100%FREE /dev/$vgname/$lvname
lvs
#xfs_growfs /dev/$vgname/$lvname
}
#扩容lv-ext4
function extendlv(){
read -p "请输入需要在哪个卷组中扩容: " vgname
read -p "请输入需要在哪个lv组中扩容: " lvname
lvextend -l +100%FREE /dev/$vgname/$lvname
lvs
resize2fs /dev/$vgname/$lvname
}
#xfs格式化后挂载
function geS(){
read -p "请输入需要挂载几个盘: " sum
for(( j=0;j<$sum;j++ ))
do
read -p "请输入需要挂载的卷组名: " vgname
read -p "请输入需要挂载的lv名: " lvname
read -p "请输入需要挂载的盘的路径,如/data,/opt等: " gs_dir
read -p "请输入使用什么方式格式化的盘,如xfs,ext4等: " mkfsname
if [ ! -f $gs_dir ];then
mkdir -p $gs_dir
fi
mkfs.${mkfsname} /dev/$vgname/$lvname
echo "`blkid |grep $lvname|awk '{print $2}'` $gs_dir $mkfsname defaults 0 0" >> /etc/fstab
sed -i "s/\"//g" /etc/fstab
#echo "`blkid |grep $lvname|awk '{print $2}'|awk -F"\"" '{print "UUID""="$2}'` $gs_dir xfs defaults 0 0" >> /etc/fstab
mount -a
done
}
#卸载lv分区
function umountS(){
read -p "请输入需要卸载几个盘: " num
for(( j=0;j<$num;j++ ))
do
read -p "请输入需要卸载的卷组名: " vgname
read -p "请输入需要卸载的lv名: " lvname
umount /dev/mapper/$vgname-$lvname
sed -i "/$lvname/d" /etc/fstab
grep $lvname /etc/fstab
df -hT
done
}
#删除pv
function removePV(){
read -p "请输入已经删除的vg名称:" imput
read -p "输入需要删除的磁盘名称,如果多个【/dev/sdb /dev/sdc】: " sdnames
vgs | grep "${imput}" && echo "还存在vg,请先删除vg后操作。" || pvremove ${sdnames}
}
#删除vg
function removeVG(){
read -p "请输入需要删除的vg名称:" imput
lvs | grep "${imput}" && echo "还存在lv,请先删除lv后操作。" || vgremove ${imput}
}
#删除lv
function removeLV(){
read -p "请输入需要删除的vg卷组名称: " vgname
read -p "请输入需要删除多少个LV逻辑卷: " lvnum
for(( j=0;j<$lvnum;j++ ))
do
read -p "请输入需要删除的LV逻辑卷名称: " lvname
lvremove /dev/$vgname/$lvname
done
lvs
}
initallPly