CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本,centos6lvm仅支持ext2、ex


应用场景和已知存在的问题:

适用于CentOS6或CentOS7(可能适用于CentOS4或5等早些版本)

根文件系统(被扩展的文件系统)采用LVM进行管理,例如mount命令输出“/dev/mapper/vg_$hostname-lv_root on / type ext4 (rw)”中含有“mapper”关键词

自动扩容根文件系统,如果想扩展其他文件系统,例如有的业务应用数据目录不在根分区中,则需要修改Shell脚本代码中的VG_PATH_TO_EXTEND变量(约78行)。

仅支持ext2、ext3、ext4、xfs等分区格式的文件系统

可能不支持某些过多自定义的CentOS系统,但核心步骤相似

脚本中仅添加了scsi磁盘支持,如需要管理其他磁盘,则需要自己扩充脚本

为了简化脚本,避免执行多次(本程序没有写执行锁),先前已经存在的磁盘名已经设定为sda,见Shell脚本代码中第45行的ONLINE_SCSI_DISK_PRESENT变量

考虑点:

由于CentOS6和CentOS7在默认根文件系统的文件系统格式存在差异,需要判断是否为xfs,如果是xfs则应该使用xfs_growfs而不是一味的使用resize2fs。

使用resize2fs扩展ext2、ext3、ext4格式的文件系统,使用xfs_growfs扩展xfs格式的文件系统

同一脚本在同一系统多次被执行可能引发的错误,可以考虑使用文件锁来解决这个问题

编程思路:

(之前应该准备或检查Shell脚本运行环境)获取当前使用中的块设备文件名

获取新添加scsi磁盘的文件名

获取LVM卷组名(vg)、将被扩展的卷组名的文件路径

将新添加磁盘使用fdisk创建分区并格式化为LVM格式

创建物理卷,pvcreate

扩展卷组,vgextend

调节逻辑卷大小,lvresize

判断是否是xfs文件系统

同步文件系统,使得扩容生效

返回系统磁盘使用情况

Shell代码:

#!/bin/bash

#Usage:AutomaticexpandlvwithLVMmanageddisk

# Setp1:AddHardDiskorStoragetoComputingunit

# Setp2:Executethisscriptwithrootprivilege

# Setp3:Mindinfoofthisscriptexecutionresult

#Opentherefrigeratordoor,gettheshellscriptexecutionenvironmentready

#Puttheelephantintotherefrigerator,howtheshellscriptsworks

#Closetherefrigeratordoor,checkouttheresultofexecution

#Simetimes,wehavetopullnewelephantorelephantdungouthere,unsetvariablesofshellscript

functioncheck_execution_result(){

if[[!-z$RETVAL]];then

unsetRETVAL

fi

RETVAL=$?

if[[$RETVAL-ne0]];then

echoexecutionfailed!

exit$RETVAL

else

echoexecutionsuccessfully!

fi

unsetRETVAL

}

#lsblk--scsi

#lsblk--all

#NAMEMAJ:MINRMSIZEROTYPEMOUNTPOINT

#fd02:014K0disk

#sda8:0040G0disk

#├─sda18:10500M0part/boot

#└─sda28:2039.5G0part

#├─centos-swap253:003.9G0lvm[SWAP]

#└─centos-root253:1035.6G0lvm/

#sdb8:16016G0disk

#sr011:016.6G0rom

#Showpresentscsidiskonline

#Q:Whyuse"xargs"here?

#A:Convertthetextfrommulti-linesingle-columnintosingle-linemulti-column,forsedoperation

ONLINE_SCSI_DISK_PRESENT=$(lsblk--all|grepdisk|grep-vfd|awk'{print$1}'|xargs)

#TODO

#Forexecutionthisscriptbeyondtwice

ONLINE_SCSI_DISK_PRESENT=sda

#Findnewscsidiskonline

#TODOfigureitoutwhythereishost0?

echo"---">/sys/class/scsi_host/host0/scan

echo"---">/sys/class/scsi_host/host1/scan

echo"---">/sys/class/scsi_host/host2/scan

#Shownewaddedscsidiskonline

ONLINE_SCSI_DISK_NEWADD=$(lsblk--all|grepdisk|grep-vfd|awk'{print$1}'|xargsecho|sed"s/$ONLINE_SCSI_DISK_PRESENT//g")

#Constructdiskfilewithfullpath

echoNewAddedSCSIDisk:$ONLINE_SCSI_DISK_NEWADD

#GetVGName

VG_Name=$(vgdisplay|grep'VGName'|awk'{print$NF}')

VG_PATH_TO_EXTEND=$(lvdisplay|grep'LVPath'|awk'{print$NF}'|greproot)

forBLOCKin$ONLINE_SCSI_DISK_NEWADD;do

ONLINE_SCSI_DISK_NEWADD_FILENAME="/dev/"$BLOCK

#end-of-filecontentsandeofmarkmuststartrow1

fdisk$ONLINE_SCSI_DISK_NEWADD_FILENAME>/dev/null2>&1<<eof

n

p

1

t

8e

w

eof

check_execution_result

LVM_OPERATION_DISK_FILENAME=$ONLINE_SCSI_DISK_NEWADD_FILENAME"1"

pvcreate$LVM_OPERATION_DISK_FILENAME>/dev/null2>&1

check_execution_result

vgextend$VG_Name$LVM_OPERATION_DISK_FILENAME>/dev/null2>&1

check_execution_result

lvresize-l+100%FREE$VG_PATH_TO_EXTEND>/dev/null2>&1

check_execution_result

#resize2fs-ext2/ext3/ext4filesystemresizer

#xfs_growfs,xfs_info-expandanXFSfilesystem

#[root@hlc7172009~]#resize2fs/dev/mapper/centos-root

#resize2fs1.42.9(28-Dec-2013)

#resize2fs:Badmagicnumberinsuper-blockwhiletryingtoopen/dev/mapper/centos-root

#Couldn'tfindvalidfilesystemsuperblock.

#[root@hlc7172009~]#

#[root@hlc7172009~]#xfs_growfs$VG_PATH_TO_EXTEND

#meta-data=/dev/mapper/centos-rootisize=256agcount=4,agsize=2334208blks

#=sectsz=512attr=2,projid32bit=1

#=crc=0

#data=bsize=4096blocks=9336832,imaxpct=25

#=sunit=0swidth=0blks

#naming=version2bsize=4096ascii-ci=0ftype=0

#log=internalbsize=4096blocks=4559,version=2

#=sectsz=512sunit=0blks,lazy-count=1

#realtime=noneextsz=4096blocks=0,rtextents=0

#datablockschangedfrom9336832to13530112

#[root@hlc7172009~]#

#Checkxfs_infoifisinstalled

whichxfs_info>/dev/null2>&1

if[[$?-ne0]];then

yuminstallxfsprogs-y>/dev/null2>&1

fi

#endCheckxfs_infoifisinstalled

#CheckVG_PATH_TO_EXTENDifisxfsfilesystem

xfs_info$VG_PATH_TO_EXTEND>/dev/null2>&1

if[[$?-ne0]];then

#isnotxfs

VG_PATH_TO_EXTEND_IS_NOT_XFS=0

else

#isxfs

VG_PATH_TO_EXTEND_IS_NOT_XFS=1

fi

#endCheckVG_PATH_TO_EXTENDifisxfsfilesystem

#TODOCentOS7defaultfilesystemisxfs,sowecancheckitoutbyOSifisCentOS7

if[[$VG_PATH_TO_EXTEND_IS_NOT_XFS]];then

#isxfs

xfs_growfs$VG_PATH_TO_EXTEND>/dev/null2>&1

else

#isnotxfs

resize2fs$VG_PATH_TO_EXTEND>/dev/null2>&1

fi

check_execution_result

df-h

lsblk--all

done

测试结果:

(1)添加磁盘前:

(2)添加磁盘并执行脚本后:

由此可见根分区已经由原先的36GB变为52GB,表示LVM扩容成功。

--END--

相关内容

    暂无相关文章