ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux (十二)shell脚本实现磁盘LVM、fdisk管理工具

2021-05-13 00:01:52  阅读:275  来源: 互联网

标签:0s %. .. printf echo shell Linux fdisk 41


一、主界面设计

 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有