Linux LVM 逻辑卷管理与扩容实战:从磁盘分区到在线扩容的完整指南
引言:当服务器磁盘告急时,LVM 是你的救命稻草
在企业运维中,磁盘空间不足是最常见的故障之一。传统分区方案下,一旦分区被创建,调整大小往往需要卸载文件系统、备份数据、重新分区,甚至需要停机维护。对于 7×24 小时运行的业务系统,这种操作几乎不可接受。

LVM(Logical Volume Manager)逻辑卷管理器提供了弹性存储解决方案。它允许你在不中断服务的情况下动态调整逻辑卷大小,支持跨物理磁盘的卷组扩展,还能创建快照用于备份和回滚。本文将以一个真实的数据库服务器扩容案例,带你掌握 LVM 的完整操作流程。
核心内容:从零搭建 LVM 并完成在线扩容
场景背景
某 MySQL 数据库服务器,初始配置为 500GB 系统盘 + 2TB 数据盘(/dev/sdb)。随着业务增长,数据盘空间即将耗尽。我们需要新增一块 2TB 硬盘(/dev/sdc),将其加入现有卷组,并在线扩容数据逻辑卷。
第一步:物理卷(PV)创建与识别
首先确认新磁盘已被系统识别:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
输出示例:
NAME SIZE TYPE MOUNTPOINT
sda 500G disk
├─sda1 500M part /boot
└─sda2 499G part /
sdb 2T disk
└─sdb1 2T part /data
sdc 2T disk
新磁盘 /dev/sdc 已就位,但尚未分区。生产环境中建议对整个磁盘创建物理卷,或使用分区(如 GPT 分区表)以支持大于 2TB 的磁盘:
# 创建 GPT 分区表
parted /dev/sdc mklabel gpt
# 创建单个分区占用全部空间
parted /dev/sdc mkpart primary 0% 100%
# 将分区标记为 LVM 类型(8e00 为 LVM 标识)
parted /dev/sdc set 1 lvm on
# 创建物理卷
pvcreate /dev/sdc1
# 验证物理卷
pvs
输出应显示新 PV 的大小和卷组信息(目前为空)。
第二步:卷组(VG)扩容
假设现有卷组名为 datavg,挂载点为 /data。将新 PV 加入卷组:
# 查看现有卷组
vgs
# 将新 PV 加入卷组
vgextend datavg /dev/sdc1
# 确认卷组大小已更新
vgs datavg
输出示例:
VG #PV #LV #SN Attr VSize VFree
datavg 2 1 0 wz--n- 3.99t 1.99t
此时卷组总容量变为 4TB,可用空间 2TB。
第三步:逻辑卷(LV)在线扩容
关键步骤:扩展逻辑卷,然后调整文件系统大小。顺序不能错——先扩展 LV,再扩展文件系统。
# 查看当前逻辑卷
lvs
# 扩展逻辑卷至全部可用空间
lvextend -l +100%FREE /dev/datavg/datalv
# 或者指定具体大小(例如增加 500GB)
# lvextend -L +500G /dev/datavg/datalv
# 确认逻辑卷大小已更新
lvs
第四步:文件系统扩容(关键)
不同文件系统使用不同命令。生产环境以 XFS 和 ext4 最常见:
XFS 文件系统(推荐用于大容量存储):
# XFS 仅支持在线扩容,不支持缩小
xfs_growfs /data
# 或指定设备
xfs_growfs /dev/datavg/datalv
ext4 文件系统:
# ext4 支持在线扩容和缩小(缩小需谨慎)
resize2fs /dev/datavg/datalv
验证结果:
df -h /data
输出应显示 /data 已扩展至 4TB。
高级场景:跨物理磁盘的条带化性能优化
对于高 I/O 场景,创建逻辑卷时可指定条带化(RAID0-like)提升性能:
# 创建条带化逻辑卷(需要至少 2 个 PV)
lvcreate -L 2T -i 2 -I 64 -n datalv_striped datavg
# -i 2: 使用两个 PV 条带
# -I 64: 条带大小 64KB(通常匹配数据库块大小)
注意:条带化会增加故障风险,建议配合 RAID 硬件或 LVM 镜像使用。
快照:零成本备份与回滚
LVM 快照允许你在几秒内创建逻辑卷的“冻结副本”,用于备份或测试:
# 创建快照(假设原逻辑卷 2TB,快照大小 100GB)
lvcreate -L 100G -s -n datalv_snap /dev/datavg/datalv
# 挂载快照(只读)
mount -o ro /dev/datavg/datalv_snap /mnt/backup
# 完成备份后卸载并删除快照
umount /mnt/backup
lvremove /dev/datavg/datalv_snap
关键参数:快照大小应覆盖快照期间的数据变化量。对于数据库,建议在业务低峰期操作,并配合 FLUSH TABLES WITH READ LOCK 确保一致性。
常见问题与排错
1. lvextend 后文件系统大小未更新
原因:忘记执行 xfs_growfs 或 resize2fs。解决方案:按顺序执行扩展。
2. 卷组显示 VFree 但无法扩展
可能原因:
– 物理卷未正确初始化(检查 pvdisplay)
– 卷组元数据损坏(尝试 vgck datavg)
– 文件系统已满(df -i 检查 inode)
3. 快照空间不足导致自动失效
快照空间耗尽时,快照自动变为无效(snapshot invalid)。通过 lvs -a -o+snap_percent 监控使用率,及时删除或扩展快照。
总结:LVM 最佳实践
核心原则
- 分区与 LVM 分离:系统盘(/boot)使用传统分区,数据盘使用 LVM。
- 预留扩展空间:卷组保留 10%-20% 空闲空间,应对突发扩容需求。
- 文件系统选择:大于 16TB 建议使用 XFS(ext4 有上限限制),小文件密集场景 ext4 表现更优。
- 快照策略:快照大小建议为原卷的 10%-20%,并设置监控告警。
安全操作清单
- 操作前备份
/etc/lvm/目录(包含 LVM 元数据) - 使用
lvdisplay确认逻辑卷路径 - 变更前检查文件系统完整性:
xfs_repair -n /dev/datavg/datalv(卸载后) - 生产环境先在测试机模拟操作
性能调优建议
- 物理卷分散在不同磁盘控制器上(避免单点故障)
- 条带大小与 I/O 模式匹配:数据库建议 64KB-256KB,日志文件建议 4KB-16KB
- 使用
lvchange --contiguous y确保连续分配(对机械硬盘友好)
结语
LVM 是现代 Linux 服务器不可或缺的存储管理工具。掌握 PV→VG→LV 的三层架构,理解 lvextend 与文件系统扩容的配合关系,你就能在磁盘告警时从容应对。本文的实战案例覆盖了从磁盘添加到在线扩容的完整链路,建议收藏以备不时之需。
最后提醒:任何存储变更操作前,请确保有可验证的备份。LVM 的快照功能虽强大,但不能替代异地备份。
💻 安全运维 / Linux运维 / 渗透测试 技术支持
业务需求可联系博客作者
