Linux (十二)shell脚本实现磁盘LVM、fdisk管理工具
作者:互联网
一、主界面设计
1.1主界面设计展示
1.2.功能描述:
- 创建分区:通过fdisk来创建分区
- 创建pv:将创建的分区加入pv中
- 创建vg:将分区键入卷组中
- 创建lv:划分出多个lv的逻辑卷
- 删除分区:删除fdisk建立的整个分区
- 删除lv:删除lv逻辑分区
- 调整VG:对vg逻辑卷组进行扩展或者减配,同时可以删除vg
- 移除pv中的分区:将分区从pv中移除
二、代码设计
2.1.设计思路
为了更好的提升执行效率,这里使用了线程池的方式去控制命令执行,同时为了更友好交互,设计了主页面,通过选项进行对磁盘进行分区操控。
2.2 代码架构展现
2.3.模块方法实现
2.3.1.主界面创建
#创建主界面
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 "*******c2.扩容lv************"
eval printf \' %.0s\' {1..$((41 - 1))}
echo "*****2.删除分区*************"
eval printf \' %.0s\' {1..$((41 - 1))}
echo "*******a2.删除lv************"
eval printf \' %.0s\' {1..$((41 - 1))}
echo "*******b2.调整VG************"
eval printf \' %.0s\' {1..$((41 - 1))}
echo "*******c2.移除pv中的分区****"
eval printf \' %.0s\' {1..$((41 - 1))}
echo "*****3.分区后格式化*********"
eval printf \' %.0s\' {1..$((41 - 1))}
echo "*****4.格式化后挂载*********"
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
;;
a2)
removeLv
initallPly
;;
b1)
vgC
initallPly
;;
b2)
reaexVg
initallPly
;;
c1)
lvC
initallPly
;;
2)
fdiskD
initallPly
;;
3)
geS
initallPly
;;
4)
mountG
initallPly
;;
q)
return
;;
*)
echo "输入不正确!请重新输入"
initallPly
;;
esac
}
2.3.2.创建分区
#创建分区
function fdiskC(){
read -p "请输入磁盘序列号,如b c d多个,以空格隔开:" imput
code=$imput
for i in $code
do
{
fdisk /dev/sd$i <<EOF
n
p
1
1
t
8e
w
EOF
echo "创建分区成功!"
echo -ne "\n" 1>&9
}
done
wait
echo 9<&-
echo 9>&-
}
2.3.3 pv创建
#pv创建
function pvC(){
read -p "请输入需要创建pv的磁盘分区" imput
code=$imput
for j in $code
do
pvcreate /dev/sd${j}1
done
pvs
}
2.3.4.vg创建
#vg创建
function vgC(){
read -p "请输入需要创建的vg名称" imput
ls -l | grep sd*
read -p "请根据上述输入需要创建卷组的分区,如sdc sbc" pvc
code=$pvc
dev=
for j in $code
do
dev="$dev /dev/${j}1"
done
vgcreate ${imput} ${dev}
vgs
}
2.3.5.lv创建
#lv创建
function lvC(){
read -p "请输入需要在哪个卷组中创建" vgname
read -p "请输入需要创建多少个LV逻辑卷" lvnum
read -p "请输入卷组分多少G,切记不可累计超过vg总量:" lvsum
for(( j=0;j<=$lvnum;j++ ))
do
lvcreate -n lv${j} -L ${lvsum}G ${vgname}
done
lvs
}
2.3.6.删除分区
#删除分区
function fdiskD(){
read -p "请输入需要删除分区的磁盘序列号,如b c d多个,以空格隔开:" imput
code=$imput
for i in $code
do
{
fdisk /dev/sd$i <<EOF
d
w
EOF
echo "删除sd${i}的分区成功!"
echo -ne "\n" 1>&9
}&
done
wait
echo 9<&-
echo 9>&-
}
2.3.7vg配额调整
#设置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】:" sdnames
code=$sdnames
zx=
case $imput in
1)
zx="vgreduce"
;;
2)
zx="vgextend"
;;
q)
reaexVg
;;
*)
echo "输入错误,请重新选择"
extendVg
;;
esac
for sdn in $code
do
`$zx ${vgname} /dev/${sdn}1`
done
echo "操作完毕,配额已完成!"
vgs
}
#删除vg
function removeVG(){
read -p "请输入需要删除的vg名称:" imput
lvs | grep "${imput}" && echo "还存在lv,请先删除lv后操作。" || vgremove ${imput}
}
2.3.8 lv删除
function lvC(){
read -p "请输入需要在哪个卷组中创建" vgname
read -p "请输入需要创建多少个LV逻辑卷" lvnum
read -p "请输入卷组分多少G,切记不可累计超过vg总量:" lvsum
for(( j=0;j<=$lvnum;j++ ))
do
lvcreate -n lv${j} -L ${lvsum}G ${vgname}
done
lvs
}
四、总结
以上工具制作相对而言比较简单,是因为没有了各种判断和制约,但还是可以使用的,后续也会逐步改进,特别是架构设计这块,个人认为还可以做的更好,后期会深入去分析架构如何设计,此篇博客侧重点在于可用就行。
标签:0s,%.,..,printf,echo,shell,Linux,fdisk,41 来源: https://blog.csdn.net/qq_18343913/article/details/116724257