今天看啥
热点:

CentOS7LVM逻辑卷分区自动扩容Shell脚本


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

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

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

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

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

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

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

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

考虑点:

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

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

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

编程思路:

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

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

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

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

  5. 创建物理卷,pvcreate

  6. 扩展卷组,vgextend

  7. 调节逻辑卷大小,lvresize

  8. 判断是否是xfs文件系统

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

  10. 返回系统磁盘使用情况

Shell代码:

#!/bin/bash#Usage:AutomaticexpandlvwithLVMmanageddisk#Setp1:AddHardDiskorStoragetoComputingunit#Setp2:Executethisscriptwithrootprivilege#Setp3:Mindinfoofthisscriptexecutionresult#Opentherefrigeratordoor,gettheshellscriptexecutionenvironmentready#Puttheelephantintotherefrigerator,howtheshellscriptsworks#Closetherefrigeratordoor,checkouttheresultofexecution#Simetimes,wehavetopullnewelephantorelephantdungouthere,unsetvariablesofshellscriptfunctioncheck_execution_result(){if[[!-z$RETVAL]];thenunsetRETVALfiRETVAL=$?if[[$RETVAL-ne0]];thenechoexecutionfailed!exit$RETVALelseechoexecutionsuccessfully!fiunsetRETVAL}#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,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/scanecho"---">/sys/class/scsi_host/host1/scanecho"---">/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")#ConstructdiskfilewithfullpathechoNewAddedSCSIDisk:$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<<eofnp1t8eweofcheck_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=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_infoifisinstalledwhichxfs_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--alldone

测试结果:

(1)添加磁盘前:

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

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

www.bkjia.comtruehttp://www.bkjia.com/fwqaq/971170.htmlTechArticleCentOS7LVM逻辑卷分区自动扩容Shell脚本 应用场景和已知存在的问题: 适用于CentOS6或CentOS7(可能适用于CentOS4或5等早些版本) 根文件系统(被...

相关文章

帮客评论

视觉看点