Linux (十二)shell脚本实现磁盘LVM、fdisk管理工具
2021/5/13 7:25:18
本文主要是介绍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 }
四、总结
以上工具制作相对而言比较简单,是因为没有了各种判断和制约,但还是可以使用的,后续也会逐步改进,特别是架构设计这块,个人认为还可以做的更好,后期会深入去分析架构如何设计,此篇博客侧重点在于可用就行。
这篇关于Linux (十二)shell脚本实现磁盘LVM、fdisk管理工具的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-30[译]漫画SELinux概念
- 2024-03-29linux 移动文件
- 2024-03-28linux .so file
- 2024-03-28Linux 磁盘管理
- 2024-03-28Linux学习笔记(十三)磁盘管理(一):磁盘分区
- 2024-03-26linux 创建 文件
- 2024-03-25使用SecureCRT对Linux vim进行颜色设置
- 2024-03-202019-2020-12 20199317 《Linux内核原理与分析》 第十二周作业
- 2024-03-20Linux运维的第二周总结
- 2024-03-13how to count number of directories in linux