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


