linux系统自动扩容脚本

下面的例子为通过linux的expect命令实现自动扩容文件系统,如下:

#!/bin/bash
#set -e表示当遇到错误的时候,立即停止,set-x表示加载脚本执行过程
set -e
#set -x
#添加完磁盘后,首先通过fdisk -l进行分区,首先判断新添加的磁盘
#定义扩容函数
extend() {
    /usr/bin/expect <<EOF
    set timeout 10
spawn fdisk $i
    expect "Command"
    send "n\r"
    expect "Select"
    send "p\r"
    expect "number"
    send "1\r"
    expect "First"
    send "\r"
    expect "Last"
    send "\r" 
    expect "Command"
    send "t\r"
    expect "Hex code:"
    send "8e\r"
    expect "Command:"
    send "w\r"
expect eof
EOF
#获取创建后的物理卷名称
j=$(fdisk -l |grep $i |sed -n "2p" |awk '{print $1}')
#创建物理卷,使用pvcreate
  pvcreate  $j
  if [ $? -eq 0 ];then
    echo ">>>>>>物理卷创建成功,接下来将物理卷加入卷组<<<<<<<"
  fi
#查询当前卷组情况,执行命令vgs即可
echo ">>>>查询当前卷组信息,如下所示<<<<"
  vgs
 read -p "请输入要扩展的卷组名称(sys/vg_data):" vg
  case $vg in
    sys)
    vgextend sys $j
    ;;
    vg_data)
    vgextend vg_data $j
    ;;
    centos)
    vgextend centos $j
    ;;
    *)
    echo "你输入的信息有误,请重新输入..........."
    exit 1
    ;;
  esac
   if [ $? -eq 0 ];then
    echo ">>>>卷组已经成功,接下来进行逻辑卷扩容<<<<"
   fi
 echo ">>>>>>查询当前逻辑卷信息<<<<<<"
   lvs
   echo " "
   read -p "请输入要扩展的逻辑卷名称(root/swap/tmp/var/lv_apps/lv_logs):" lv
   case $lv in
     root)
     lvextend -l +100%FREE /dev/mapper/sys-root
     if [ $? -eq 0 ];then
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/sys-root"
     xfs_growfs  $lv  
     ;;
     swap)
     lvextend -l +100%FREE /dev/mapper/sys-swap
     if [ $? -eq 0 ];then  
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/sys-swap"
     xfs_growfs  $lv
     ;;
     tmp)
     lvextend -l +100%FREE /dev/mapper/sys-tmp
     if [ $? -eq 0 ];then  
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/sys-tmp"
     xfs_growfs  $lv
     ;;
     var)
     lvextend -l +100%FREE /dev/mapper/sys-var
     if [ $? -eq 0 ];then  
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/sys-var"
     xfs_growfs  $lv
     ;;
     lv_apps)
     lvextend -l +100%FREE /dev/mapper/vg_data-lv_apps
     if [ $? -eq 0 ];then  
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/vg_data-lv_apps"
     xfs_growfs  $lv
     ;;
     lv_logs)
     lvextend -l +100%FREE /dev/mapper/vg_data-lv_logs
     if [ $? -eq 0 ];then  
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/vg_data-lv_logs"
     xfs_growfs  $lv
     ;;
     roott)
     lvextend -l +100%FREE /dev/mapper/centos-root
     if [ $? -eq 0 ];then  
       echo "逻辑卷创建成功"
     fi
    echo ">>>>>>接下来对逻辑卷进行格式化<<<<<<"
     lv="/dev/mapper/centos-root"
     xfs_growfs  $lv
     df -h
     ;;
     esac
}
#定义倒计时函数
dao() {
  for j in {5..1}
  do
    echo "倒计时:$j s"
    sleep 1
  done
 }
echo ">>>>>>首先查看添加后的磁盘信息<<<<<<"
lsblk
echo " "
read -p " 请输入要分区的磁盘名称(/dev/sda,/dev/sdb......) : " i
  case $i in
   help)
    echo "1.请输入要分区的磁盘例如/dev/sda,/dev/sdb,输入后系统会自动检测此分区是否正在使用或者闲置"
    echo "输入完成后将开始分区以及扩容操作"
   ;;
   /dev/sda)
   if [ $(fdisk -l |grep $i |grep -v root |wc -l) -gt 1 ];then
       echo "/dev/sda磁盘已经在使用中"
   elif [ $(fdisk -l |grep $i |grep -v root |wc -l) -eq 0 ];then
       echo "不存在此磁盘/dev/sda,请确认"
   else
     echo "存在此磁盘,即将开始分区操作" 
     extend
   fi
   ;;
  /dev/sdb)
   if [ $(fdisk -l |grep $i |grep -v root |wc -l) -gt 1 ];then
       echo "/dev/sdb磁盘已经在使用中"
   elif [ $(fdisk -l |grep $i |grep -v root |wc -l) -eq 0 ];then
       echo "不存在此磁盘/dev/sdb,请确认" 
   else
       echo "存在此磁盘,5s后开始分区操作"
       dao
       extend
   fi
   ;;
   /dev/sdc)
   if [ $(fdisk -l |grep $i |grep -v root |wc -l) -gt 1 ];then
       echo "/dev/sdc磁盘已经在使用中"
   elif [ $(fdisk -l |grep $i |grep -v root |wc -l) -eq 0 ];then
       echo "不存在此磁盘/dev/sdc,请确认"  
  else
       echo "存在此磁盘,5s后开始分区操作"
       dao
       extend
   fi
   ;;
   /dev/sdd)
   if [ $(fdisk -l |grep $i |grep -v root |wc -l) -gt 1 ];then
       echo "/dev/sdd磁盘已经在使用中"
   elif [ $(fdisk -l |grep $i |grep -v root |wc -l) -eq 0 ];then
       echo "不存在此磁盘/dev/sdd,请确认" 
   else
       echo "存在此磁盘,5s后开始分区操作"
       dao
       extend
   fi
   ;;
   /dev/sde)
   if [ $(fdisk -l |grep $i |grep -v root |wc -l) -gt 1 ];then
       echo "/dev/sde磁盘已经在使用中"
   elif [ $(fdisk -l |grep $i |grep -v root |wc -l) -eq 0 ];then
       echo "不存在此磁盘/dev/sde,请确认" 
   else
       echo "存在此磁盘,5s后开始分区操作"
       dao
       extend
   fi
   ;;
  esac

标签