lvm自動擴容到固定分區腳本

任務:需要在nagios中監控aws的一些虛擬主機,檢測/data分區容量,一旦該分區容量低於某個值,就執行腳本利用aws命令指令去創建卷,掛載捲到/data分區容量不足的主機上,然後在主機上利用lvm自動擴充/data分區的容量。利用aws命令去創建掛載磁盤的腳本由lead編寫,我需要寫lvm自動擴充的腳本。

腳本如下

#!/bin/bash
exec &>/tmp/.lvm #將所有正確和錯誤輸出記錄到/tmp/.lvm,追加記錄就用>>/tmp/.lvm

#decteing /data partion #檢測有沒有data分區存在,如果沒有就退出腳本
df|grep -i '/data' || {
echo "no found /data"
exit 1
}

#Judge /data is which vulume #取出/data分區對應的vg名稱賦給VG變量,如果VG變量爲空值就退出腳本
VG=df -h|grep -i "/data"|cut -d/ -f 4|cut -d\- -f 1
[ ! -n "$VG" ] && {
echo 'no found $VG'
exit 1
}

#decte new whick disk #檢測新增加磁盤文件名是什麼,如果新增了多塊,則取最後一塊
PRESENT=sudo lsblk --all | grep disk | grep nvme | awk '{print $1}'
do
NUM=fdisk -l | grep $i | wc -l
DISK_PVS="pvs|grep $i"
REQ=$?
if [ "$NUM" == 1 -a "$REQ" == "1" ]
then
echo "$i is new add disk" >> ${LOG_FILE}
DEV=/dev/$i
fi
done

[ ! -n "$DEV" ] && { #判斷dev變量是否爲空
echo 'no found $DEV to extended' |tee -a ${LOG_FILE}
exit 1
}

#create new pv #創建pv操作
sudo pvcreate ${DEV} || {
echo "pv create faild"
exit 1
}

#extend vg size #擴充VG大小
sudo vgextend ${VG} ${DEV} || {
echo "vg extend failed"
exit 1
}

#lvextend /data partion #lv卷擴充操作
LV=df|grep -i '/data'|awk '{print $1}' #截取/data分區lvm卷名
[ ! -n "$LV" ] && {
echo 'no found $LV'
exit 1
}

sudo lvextend -l +100%FREE ${LV} || { #擴充/data分區lvm卷
echo "lv extend failed"
exit 1
}

#extend filesystem #擴充文件系統大小,如果是ext4分區,執行resize2fs命令.....
FILESYSTEM=mount | grep "${LV}"|awk '{print $5}'
case $FILESYSTEM in
ext4)
sudo resize2fs ${LV}
;;
xfs)
sudo xfs_growfs ${LV}
;;
*)
echo "unkown filesystem"
;;
esac

在虛擬機中測試如下:
1./data分區大小:/dev/mapper/test-test--lv 40G 48M 38G 1% /data
2.添加一塊磁盤並執行腳本:/dev/mapper/test-test--lv 69G 52M 66G 1% /data
3.日誌記錄如下:
[root@localhost shell]# cat /tmp/.lvm
/dev/mapper/test-test--lv 41153760 49080 39375144 1% /data
nvme0n3 is new add disk
Physical volume "/dev/nvme0n3" successfully created
Volume group "test" successfully extended
Size of logical volume test/test-lv changed from 49.98 GiB (12796 extents) to 69.98 GiB (17916 extents).
Logical volume test-lv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/test-test--lv is mounted on /data; on-line resizing required
old_desc_blocks = 5, new_desc_blocks = 9
The filesystem on /dev/mapper/test-test--lv is now 18345984 blocks long.

在nagios中測試,只要檢測到/data分區容量不足某個閥值,就觸發一系列腳本完成空間自動擴容
lvm自動擴容到固定分區腳本

這是在lead那裏測試的,所以沒有記錄,因爲要反覆測試多次,添加不同的aws磁盤類型,擴充lvm後需要將空間縮小,磁盤移除等操作,這樣才方便測試,可通過如下腳本將剛添加的磁盤移除:
#!/bin/bash
if [ $# -ne 2 ];then
echo "Usage: $0 reduce2size reducesize ,i.e: 40G 500G"
exit 10
fi
LV=df|grep -i '/data'|awk '{print $1}'
VG=df -h|grep -i "/data"|cut -d/ -f 4|cut -d\- -f 1
sudo umount /data/ || exit 1
sudo e2fsck -f ${LV} || exit 3
sudo resize2fs ${LV} $1 || exit 2
sudo e2fsck -f ${LV} || exit 3
sudo lvreduce -L -$2 ${LV} || exit 4
#VGREDUCE=sudo pvs|grep -i ${VG}|grep nvme|awk 'NR==1{print $1}'
VGREDUCE='/dev/nvme1n1' #這裏寫要移除的磁盤文件名
sudo vgdisplay -v | grep ${VGREDUCE} || exit 5
sudo vgreduce ${VG} ${VGREDUCE} || exit 6
sudo pvs|grep ${VGREDUCE} || exit 7
sudo pvremove ${VGREDUCE} || exit 8
sudo mount ${LV} /data || exit 9

注:這是在ext4文件系統下做的測試,xfs文件系統好像不能縮小空間,只能增大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章