CentOS7LVM逻辑卷分区自动扩容Shell脚本,centos7lvmshell仅支持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]];thenunsetRETVALfiRETVAL=$?if[[$RETVAL-ne0]];thenechoexecutionfailed!

exit$RETVALelseechoexecutionsuccessfully!

fiunsetRETVAL

}#lsblk--scsi#lsblk--all#NAME MAJ:MINRMSIZEROTYPEMOUNTPOINT#fd0 2:014K0disk

#sda 8:0040G0disk

#├─sda1 8:10500M0part/boot#└─sda2 8:2039.5G0part

#├─centos-swap253:003.9G0lvm[SWAP]#└─centos-root253:1035.6G0lvm/#sdb 8:16016G0disk

#sr0 11:016.6G0rom

#Showpresentscsidiskonline#Q:Whyuse"xargs"here?#A:Convertthetextfrommulti-linesingle-columnintosingle-linemulti-column,forsedoperationONLINE_SCSI_DISK_PRESENT=$(lsblk--all|grepdisk|grep-vfd|awk'{print$1}'|xargs)#TODO#ForexecutionthisscriptbeyondtwiceONLINE_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#ShownewaddedscsidiskonlineONLINE_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#GetVGNameVG_Name=$(vgdisplay|grep'VGName'|awk'{print$NF}')VG_PATH_TO_EXTEND=$(lvdisplay|grep'LVPath'|awk'{print$NF}'|greproot)forBLOCKin$ONLINE_SCSI_DISK_NEWADD;doONLINE_SCSI_DISK_NEWADD_FILENAME="/dev/"$BLOCK#end-of-filecontentsandeofmarkmuststartrow1fdisk$ONLINE_SCSI_DISK_NEWADD_FILENAME>/dev/null2>&1<<eof

n

p1

t8e

w

eofcheck_execution_resultLVM_OPERATION_DISK_FILENAME=$ONLINE_SCSI_DISK_NEWADD_FILENAME"1"pvcreate$LVM_OPERATION_DISK_FILENAME>/dev/null2>&1check_execution_resultvgextend$VG_Name$LVM_OPERATION_DISK_FILENAME>/dev/null2>&1check_execution_resultlvresize-l+100%FREE$VG_PATH_TO_EXTEND>/dev/null2>&1check_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=version2 bsize=4096ascii-ci=0ftype=0#log=internal bsize=4096blocks=4559,version=2# = sectsz=512sunit=0blks,lazy-count=1#realtime=none extsz=4096blocks=0,rtextents=0#datablockschangedfrom9336832to13530112#[root@hlc7172009~]##Checkxfs_infoifisinstalled

whichxfs_info>/dev/null2>&1if[[$?-ne0]];thenyuminstallxfsprogs-y>/dev/null2>&1fi#endCheckxfs_infoifisinstalled#CheckVG_PATH_TO_EXTENDifisxfsfilesystemxfs_info$VG_PATH_TO_EXTEND>/dev/null2>&1if[[$?-ne0]];then#isnotxfsVG_PATH_TO_EXTEND_IS_NOT_XFS=0else

#isxfsVG_PATH_TO_EXTEND_IS_NOT_XFS=1fi#endCheckVG_PATH_TO_EXTENDifisxfsfilesystem#TODOCentOS7defaultfilesystemisxfs,sowecancheckitoutbyOSifisCentOS7if[[$VG_PATH_TO_EXTEND_IS_NOT_XFS]];then#isxfsxfs_growfs$VG_PATH_TO_EXTEND>/dev/null2>&1else#isnotxfsresize2fs$VG_PATH_TO_EXTEND>/dev/null2>&1ficheck_execution_resultdf-hlsblk--all

done

测试结果:

(1)添加磁盘前:

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

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

相关内容

    暂无相关文章