CentOS6、7 LVM逻辑卷分区自动扩容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: Automatic expand lv with LVM managed disk
# 	Setp 1: Add Hard Disk or Storage to Computing unit
#	Setp 2: Execute this script with root privilege
#	Setp 3: Mind info of this script execution result

# Open the refrigerator door, get the shell script execution environment ready
# Put the elephant into the refrigerator, how the shell scripts works
# Close the refrigerator door, check out the result of execution
# Simetimes, we have to pull new elephant or elephant dung out here, unset variables of shell script

function check_execution_result(){
        if [[ ! -z $RETVAL ]]; then
                unset RETVAL
        fi
        RETVAL=$?
        if [[ $RETVAL -ne 0 ]]; then
                echo execution failed! 
                exit $RETVAL
        else
                echo execution successfully! 
        fi
        unset RETVAL
}

# lsblk --scsi
# lsblk --all
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# fd0               2:0    1    4K  0 disk 
# sda               8:0    0   40G  0 disk 
# ├─sda1            8:1    0  500M  0 part /boot
# └─sda2            8:2    0 39.5G  0 part 
#   ├─centos-swap 253:0    0  3.9G  0 lvm  [SWAP]
#   └─centos-root 253:1    0 35.6G  0 lvm  /
# sdb               8:16   0   16G  0 disk 
# sr0              11:0    1  6.6G  0 rom  

# Show present scsi disk online
# Q: Why use "xargs" here?
# A: Convert the text from multi-line single-column into single-line multi-column, for sed operation
ONLINE_SCSI_DISK_PRESENT=$(lsblk --all | grep disk | grep -v fd | awk ‘{print $1}‘ | xargs)
# TODO
# For execution this script beyond twice
ONLINE_SCSI_DISK_PRESENT=sda
# Find new scsi disk online
# TODO figure it out why there is host0? 
echo "- - -" >/sys/class/scsi_host/host0/scan
echo "- - -" >/sys/class/scsi_host/host1/scan
echo "- - -" >/sys/class/scsi_host/host2/scan
# Show new added scsi disk online
ONLINE_SCSI_DISK_NEWADD=$(lsblk --all | grep disk | grep -v fd | awk ‘{print $1}‘ | xargs echo | sed "s/$ONLINE_SCSI_DISK_PRESENT//g")
# Construct disk file with full path
echo New Added SCSI Disk: $ONLINE_SCSI_DISK_NEWADD
# Get VG Name
VG_Name=$(vgdisplay | grep ‘VG Name‘ | awk ‘{print $NF}‘)
VG_PATH_TO_EXTEND=$(lvdisplay | grep ‘LV Path‘ | awk ‘{print $NF}‘ | grep root)
for BLOCK in $ONLINE_SCSI_DISK_NEWADD; do
	ONLINE_SCSI_DISK_NEWADD_FILENAME="/dev/"$BLOCK
	# end-of-file contents and eof mark must start row1
	fdisk $ONLINE_SCSI_DISK_NEWADD_FILENAME >/dev/null 2>&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/null 2>&1
	check_execution_result
	vgextend $VG_Name $LVM_OPERATION_DISK_FILENAME >/dev/null 2>&1
	check_execution_result
	lvresize -l +100%FREE $VG_PATH_TO_EXTEND >/dev/null 2>&1
	check_execution_result

# resize2fs - ext2/ext3/ext4 file system resizer
# xfs_growfs, xfs_info - expand an XFS filesystem

#[[email protected]c7172009 ~]# resize2fs /dev/mapper/centos-root
#resize2fs 1.42.9 (28-Dec-2013)
#resize2fs: Bad magic number in super-block while trying to open /dev/mapper/centos-root
#Couldn‘t find valid filesystem superblock.
#[[email protected] ~]#

#[[email protected] ~]# xfs_growfs $VG_PATH_TO_EXTEND
#meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=2334208 blks
#         =                       sectsz=512   attr=2, projid32bit=1
#         =                       crc=0
#data     =                       bsize=4096   blocks=9336832, imaxpct=25
#         =                       sunit=0      swidth=0 blks
#naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
#log      =internal               bsize=4096   blocks=4559, version=2
#         =                       sectsz=512   sunit=0 blks, lazy-count=1
#realtime =none                   extsz=4096   blocks=0, rtextents=0
#data blocks changed from 9336832 to 13530112
#[[email protected] ~]#

	# Check xfs_info if is installed 
	which xfs_info >/dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		yum install xfsprogs -y >/dev/null 2>&1
	fi
	# end Check xfs_info if is installed

	# Check VG_PATH_TO_EXTEND if is xfs filesystem
	xfs_info $VG_PATH_TO_EXTEND >/dev/null 2>&1
	if [[ $? -ne 0 ]]; then
		# is not xfs
		VG_PATH_TO_EXTEND_IS_NOT_XFS=0
	else 
		# is xfs
		VG_PATH_TO_EXTEND_IS_NOT_XFS=1
	fi
	# end Check VG_PATH_TO_EXTEND if is xfs filesystem

	# TODO CentOS7 default filesystem is xfs, so we can check it out by OS if is CentOS7

	if [[ $VG_PATH_TO_EXTEND_IS_NOT_XFS ]]; then
		# is xfs
		xfs_growfs $VG_PATH_TO_EXTEND >/dev/null 2>&1
	else
		# is not xfs
		resize2fs $VG_PATH_TO_EXTEND >/dev/null 2>&1
	fi
	check_execution_result
	df -h
	lsblk --all
done

测试结果:

(1)添加磁盘前:

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

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

--END--

时间: 2024-10-06 00:16:48

CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例的相关文章

Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)

当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区),那么就可以轻松进行扩容或缩容!不同文件系统类型所对应的创建.检查.调整命令不同,下面就针对xfs和ext2/3/4文件系统的lvm分区空间的扩容和缩容的操作做一记录:-----------------------------------------------------------------

1.4 Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)

当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区),那么就可以轻松进行扩容或缩容!不同文件系统类型所对应的创建.检查.调整命令不同,下面就针对xfs和ext2/3/4文件系统的lvm分区空间的扩容和缩容的操作做一记录: ----------------------------------------------------------------

LVM逻辑卷建立和扩容:

一:分区扩容: 1.查看当前的磁盘情况: [email protected]:~# df -h    # 查看文件系统情况 文件系统                   容量  已用  可用 已用% 挂载点 udev                       970M     0  970M    0% /dev tmpfs                      198M  9.0M  189M    5% /run /dev/mapper/kali--vg-root   96G   13

LVM逻辑卷-创建、扩容、缩减、迁移、快照

LVM逻辑卷 逻辑卷管理工具,允许在多个物理设备之间重新组织文件系统,包括重新设定文件系统的大小 PE  物理盘区,类似于磁盘中的block 逻辑卷的基本存储单位就是PE dm:device mapper将一个或多个底层块设备组织成一个逻辑设备的模块 设备名:/dev/dm-#  //系统自动分配,常用软链接定义 软链接:两种方式表示 /dev/mapper/卷组-逻辑卷 /dev/卷组/逻辑卷 LVM可以弹性的修改容量 基本概念: pv  //物理卷 vg  //卷组 lv  //逻辑卷 本次

LVM逻辑卷管理--在线扩容、逻辑卷与卷组容量缩减、逻辑卷快照

LVM逻辑卷管理公司生产环境中使用了LVM逻辑卷管理,所以今天花时间整理一下.通过LVM技术整合所有的磁盘资源进行分区,然后创建PV物理卷形成一个资源池,再划分卷组,最后在卷组上创建不同的逻辑卷,继而初始化逻辑卷,挂载到系统中使用.LVM对比传统硬盘存储的优点1. 统一管理:整合多个磁盘或分区形成一个资源池2. 灵活性:可以使用不同磁盘.不同分区来组成一个逻辑卷3. 可伸缩性:逻辑卷和卷组的容量都可以使用命令来扩展或者缩减,且不会影响破坏原有数据,支持磁盘热插拔.4. 支持热插拔5. 支持在线数

CentOS6.5下划分lvm逻辑卷

实验环境:公司准备在Internet中搭建邮件服务器,面向全国各地的员工部分VIP客户提供电子邮箱空间 由于数量众多,邮件存储需要大量的空间,空间,考虑到动态扩容的需要,计划增加两块SCSI硬盘并构建LVM逻辑卷(挂载到"/mailbox"目录下)专门用于存放邮件数据 步骤简介:PV→VG→LV→格式化,挂载使用文件系统 ⑴创建物理卷pvcreate使用fdisk命令规划两个分区/dev/sdb2./dev/sdc1,将类型设置为"8e" 添加第二块硬盘/dev/s

Linux 磁盘分区、永久挂载、创建LVM逻辑卷

实验项目: 1掌握管理Linux磁盘和分区的方法 2掌握挂载并卸载文件系统的方法 3掌握创建并管理LVM分区的方法 理论部分:一:磁盘和分区简介 1磁盘分区的表示:常见的硬盘可以划分为主分区.扩展分区.和逻辑分区.通常主分区只有4个,而扩展分区看成一个特殊的主分区类型,在扩展分区可以建立逻辑分区2现在用的硬盘都是SCSI硬盘,所以在这里主要介绍SCSI硬盘分区的结构.对于SCSI接口的硬盘表示方式是:第一块SCSI硬盘我们可以表示为"sda",第二块SCSI硬盘表示为"sdb

LVM逻辑卷管理-软RAID磁盘阵列

LVM逻辑卷管理软RAID磁盘阵列管理################################################# 一.LVM逻辑卷管理 1. 基本概念    Logical Volume Manager        ** 多个物理分区/磁盘 ==> 组合成一个整体 ==>划分逻辑存储单位,即逻辑卷        ** 逻辑分区的大小可以根据需要扩大.缩减        ** /boot 用来存放引导文件,不能使用LVM逻辑卷(启动时会找不到内核) PV(Physica

LVM逻辑卷管理的基本操作

LVM 逻辑卷管理的基本操作 ? 前言:上一篇说完了硬盘的分区.格式化与挂载分区,是可以正常使用了,但是一旦出现系统分区不够用了,就要进行备份.删除相关数据或重新规划分区来满足系统的需要.这就要用到LVM动态分区,可以在现有数据不变的情况下调整磁盘容量,提高磁盘的灵活性. 1.LVM基本术语: PV(物理卷):物理卷是LVM的基本存储设备,通常对应为一个普通分区或整个硬盘.创建物理卷时会在分区或硬盘的头部创建一个保留板块,记录LVM的属性. VG(卷组):由一个或多个物理卷组成一个整体. 许多物