CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本,centos6lvm仅支持ext2、ex
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--
评论暂时关闭