Linux shell脚本实现磁盘LVMfdisk管理工具

Posted 云来云去-起飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux shell脚本实现磁盘LVMfdisk管理工具相关的知识,希望对你有一定的参考价值。

一、主界面设计

 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脚本实现磁盘LVMfdisk管理工具的主要内容,如果未能解决你的问题,请参考以下文章

Linux编写shell脚本实现磁盘使用率检测

Linux学习41 yum实战进阶及shell脚本实现磁盘管理实战

如何监控linux阿里云磁盘空间

Linux下Shell脚本实战之监测磁盘空间

Linux/Unix shell 脚本监控磁盘可用空间

Shell ❀ Linux系统磁盘快速挂载执行脚本