LVM架构层级与核心概念解析
LVM(Logical Volume Manager)在物理磁盘和文件系统之间插入三层抽象:PV(Physical Volume)对应物理分区或整块磁盘,VG(Volume Group)将多个PV聚合成一个存储池,LV(Logical Volume)从VG中分配空间供文件系统使用。这种解耦让磁盘空间管理变得灵活——LV可以跨多个物理磁盘,也能在线调整大小而无需卸载文件系统。
核心术语:PE(Physical Extent)是PV的最小分配单元,默认4MB;LE(Logical Extent)是LV的最小分配单元,PE和LE一一对应。VG内部PE大小统一,创建VG时指定,之后不可更改。实际生产建议PE设为16MB或32MB,减少元数据开销。
创建PV、VG、LV的完整操作流程
假设服务器新增一块磁盘/dev/sdb,目标创建一个数据卷挂载到/data。
# 1. 创建物理卷
pvcreate /dev/sdb
pvdisplay /dev/sdb # 确认PV状态
# 2. 创建卷组,PE大小16MB
vgcreate -s 16M vg_data /dev/sdb
vgdisplay vg_data
# 3. 创建逻辑卷,分配VG全部可用空间
lvcreate -l 100%FREE -n lv_data vg_data
# 或指定固定大小:lvcreate -L 500G -n lv_data vg_data
# 4. 格式化与挂载
mkfs.xfs /dev/vg_data/lv_data
mkdir /data
mount /dev/vg_data/lv_data /data
# 5. 写入fstab实现开机自动挂载
echo "/dev/mapper/vg_data-lv_data /data xfs defaults 0 0" >> /etc/fstab
生产环境务必使用/dev/mapper/或UUID方式挂载,避免设备名漂移导致挂载错误。UUID通过blkid命令获取。
LVM在线扩容:为运行中的LV增加空间
场景:/data分区使用率90%,新加了一块磁盘/dev/sdc需要扩容。
# 1. 将新磁盘加入现有VG
pvcreate /dev/sdc
vgextend vg_data /dev/sdc
# 2. 扩展LV(增加200G)
lvextend -L +200G /dev/vg_data/lv_data
# 或按比例:lvextend -l +50%FREE /dev/vg_data/lv_data
# 3. 在线扩展文件系统
# XFS文件系统:
xfs_growfs /data
# ext4文件系统:
resize2fs /dev/vg_data/lv_data
关键点:XFS只支持扩容不支持缩容;ext4支持双向调整。扩容操作无需卸载文件系统,无需停机,对业务完全透明。vgextend之后用vgs确认VG可用空间增加,lvextend之后用lvs确认LV大小变化,xfs_growfs/resize2fs之后用df -h确认文件系统容量。
LVM缩容操作与数据安全注意事项
缩容比扩容风险高得多,XFS不支持缩容,ext4缩容必须先卸载文件系统并强制fsck:
# 1. 卸载文件系统
umount /data
# 2. 强制文件系统检查
e2fsck -f /dev/vg_data/lv_data
# 3. 先缩小文件系统(比目标LV大小略小)
resize2fs /dev/vg_data/lv_data 300G
# 4. 再缩小LV到相同大小
lvreduce -L 300G /dev/vg_data/lv_data
# 5. 重新挂载
mount /dev/vg_data/lv_data /data
顺序绝不能颠倒——先缩LV再缩文件系统,几乎必然导致数据损坏。生产环境尽量避免缩容,更安全的做法是新建一个较小的LV,用rsync迁移数据后切换。
LVM快照备份与恢复机制
LVM快照是COW(Copy-on-Write)机制:创建快照时仅记录元数据,不复制数据块;原始LV的数据块被修改时,旧数据先复制到快照区域。快照空间不需要等于原始LV大小,通常分配原始LV的10%-20%即可应对短期备份窗口。
# 创建快照
lvcreate -L 50G -s -n lv_data_snap /dev/vg_data/lv_data
# 挂载快照进行备份
mkdir /snap_data
mount -o ro /dev/vg_data/lv_data_snap /snap_data
tar czf /backup/data_$(date +%Y%m%d).tar.gz -C /snap_data .
# 备份完成后删除快照
umount /snap_data
lvremove /dev/vg_data/lv_data_snap
快照期间原始LV的写性能会下降(每次写都要先COW),建议在业务低峰期创建,备份窗口控制在30分钟以内。监控快照使用率,超过80%立即扩容或删除,否则快照失效。
LVM生产环境最佳实践与排障指南
磁盘分区方案:系统盘用传统分区(/boot 1G + / 50G + swap),数据盘走LVM。不要对根分区做LVM,增加启动复杂度且故障恢复困难。多块数据盘建议每块先做raid1再在上面跑LVM,LVM不提供冗余。
监控项:vgs的VFree字段监控VG剩余空间;lvs的Data%字段监控LV使用率;pvs的PV状态确认无异常磁盘。建议在Prometheus + node_exporter中开启LVM指标采集,设置VG可用空间低于20%告警。
常见故障:PV丢失(磁盘故障)导致VG不可激活,用vgextend –restoremissing尝试恢复;LV被意外删除,6小时内可用vgcfgrestore恢复VG元数据;快照空间耗尽导致I/O错误,立即lvremove删除坏快照。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-lvm-luo-ji-juan-guan-li-pei-zhi-yu-zai-xian/