服务器磁盘空间不足是运维工作中最常见的告警类型之一。传统分区方案在空间耗尽后需要停机、重建分区、恢复数据,操作风险高且业务中断时间长。LVM(Logical Volume Manager)通过在物理磁盘和文件系统之间引入逻辑卷抽象层,支持在线扩容、快照备份和跨磁盘条带化,是Linux服务器存储管理的标准方案。本文以CentOS/RHEL 8+环境为例,完整演示LVM的创建、扩容、缩减和快照操作。
LVM三层架构与核心概念
LVM的存储管理分为三层:物理卷(PV, Physical Volume)、卷组(VG, Volume Group)和逻辑卷(LV, Logical Volume)。
物理卷是LVM的基础,由磁盘或磁盘分区初始化而来。创建PV后,磁盘空间被划分为固定大小的物理扩展块(PE, Physical Extent),默认4MB。PE是LVM寻址的最小单位。
卷组由一个或多个PV组成,相当于一个存储池。VG将底层的PV空间统一管理,上层的LV从VG中分配空间。VG可以动态添加或移除PV,实现存储容量的弹性伸缩。
逻辑卷从VG中分配空间,对上层文件系统提供块设备接口。LV可以在不停机的情况下动态扩展或缩减,这是LVM相比传统分区的核心优势。
创建LVM逻辑卷完整流程
以下操作以新加一块/dev/sdb磁盘(100GB)为例,创建一个50GB的逻辑卷并挂载到/data目录。
# 1. 创建物理卷
pvcreate /dev/sdb
# 2. 创建卷组datavg,PE大小设为32MB
vgcreate -s 32M datavg /dev/sdb
# 3. 创建逻辑卷datalv,分配50GB
lvcreate -L 50G -n datalv datavg
# 4. 格式化为xfs文件系统
mkfs.xfs /dev/datavg/datalv
# 5. 创建挂载点并挂载
mkdir /data
mount /dev/datavg/datalv /data
# 6. 写入fstab实现开机自动挂载
echo "/dev/datavg/datalv /data xfs defaults 0 0" >> /etc/fstab
验证各层状态:
# 查看物理卷
pvdisplay
# 查看卷组
vgdisplay
# 查看逻辑卷
lvdisplay
# 查看PE使用情况
pvdisplay -m /dev/sdb
逻辑卷在线扩容操作
当/data空间不足时,可以从VG剩余空间中追加分配,也可以先给VG添加新磁盘再扩容LV。两种方式都支持在线操作,无需卸载文件系统。
场景一:VG有剩余空间,直接扩容LV。
# 查看VG剩余空间
vgdisplay datavg | grep "Free"
# 扩容LV增加20G
lvextend -L +20G /dev/datavg/datalv
# 在线扩展xfs文件系统
xfs_growfs /data
# ext4文件系统用resize2fs
# resize2fs /dev/datavg/datalv
场景二:VG剩余空间不足,先添加新磁盘/dev/sdc到VG。
# 创建新PV
pvcreate /dev/sdc
# 将新PV加入已有VG
vgextend datavg /dev/sdc
# 扩容LV到80G(指定绝对大小)
lvextend -L 80G /dev/datavg/datalv
# 扩展文件系统
xfs_growfs /data
lvextend命令的-L参数支持+50G(增量)和50G(绝对值)两种写法。-l参数使用LE数量分配空间,如-l 100%FREE表示使用VG全部剩余空间。
LVM快照创建与数据备份
LVM快照是CoW(Copy-on-Write)机制的只读副本,创建瞬间完成,不复制原始数据,只在原始数据被修改时才将旧数据拷贝到快照区。快照适用于一致性备份、临时测试环境创建等场景。
# 创建快照,分配5G CoW空间
lvcreate -L 5G -s -n datalv_snap /dev/datavg/datalv
# 挂载快照查看数据
mkdir /mnt/snap
mount /dev/datavg/datalv_snap /mnt/snap
# 通过快照备份数据
tar -czf /backup/data_backup_$(date +%F).tar.gz -C /mnt/snap .
# 备份完成后删除快照
umount /mnt/snap
lvremove -f /dev/datavg/datalv_snap
快照CoW空间的大小取决于快照存活期间原始卷的数据变更量。如果CoW空间耗尽,快照将失效(变为INVALID状态)。生产环境建议快照CoW空间设为原始卷的10%-20%,且快照存活时间尽量短。
逻辑卷缩减与注意事项
xfs文件系统不支持在线缩减。如果需要缩减LV,必须先备份数据、重建文件系统。ext4支持在线缩减,但操作风险较高,生产环境不建议执行缩减操作。
ext4缩减操作参考(谨慎执行):
# 1. 卸载文件系统
umount /data
# 2. 强制fsck检查
e2fsck -f /dev/datavg/datalv
# 3. 缩减ext4文件系统到40G
resize2fs /dev/datavg/datalv 40G
# 4. 缩减LV到40G(必须先缩减文件系统再缩减LV)
lvreduce -L 40G /dev/datavg/datalv
# 5. 重新挂载
mount /dev/datavg/datalv /data
顺序不能颠倒:必须先缩减文件系统,再缩减LV。如果先缩减LV,文件系统的超级块会指向已被截断的区域,导致数据损坏。lvreduce命令默认会弹出确认提示,操作前务必确认目标LV路径正确。
VG迁移与PV移除操作
当某块磁盘出现坏道需要更换时,可以将该PV上的数据迁移到VG中的其他PV,然后安全移除。前提是VG中其他PV有足够的剩余空间。
# 查看各PV使用情况
pvdisplay -m
# 将/dev/sdb上的数据迁移到同VG其他PV
pvmove /dev/sdb
# 迁移完成后从VG移除PV
vgreduce datavg /dev/sdb
# 移除PV标记
pvremove /dev/sdb
pvmove过程中数据迁移是在线进行的,业务不中断。如果剩余空间不足以容纳迁移数据,需要先添加新PV到VG,再执行pvmove。迁移期间IO性能会有所下降,建议在低峰期执行。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-lvm-luo-ji-juan-guan-li-yu-ci-pan-zai-xian/