逻辑卷管理(LVM, Logical Volume Manager)是 Linux 系统中非常重要的存储管理方式,允许灵活、高效地管理磁盘空间。相比传统固定分区,LVM 提供了动态调整、跨盘扩容、快照等先进功能。

本文将从原理、核心概念、详细操作步骤、快照、迁移、错误修复、与启动关系、常见问题及最佳实践等多个层面详细解析,帮助深入掌握 LVM。


一、LVM 基础与原理

什么是 LVM?

LVM 是 Linux 的逻辑卷管理框架,把物理存储资源(磁盘或分区)抽象成逻辑卷,便于灵活管理、动态扩容、跨盘存储等需求。


核心概念

名称解释
PV(Physical Volume)物理卷,对应实际磁盘或分区,是最基本的构建块。
VG(Volume Group)卷组,由多个 PV 组成的存储池,用于管理容量分配。
LV(Logical Volume)逻辑卷,从 VG 中划分出来,用于挂载文件系统。
PE(Physical Extent)物理扩展块,VG 中的最小分配单元,默认大小一般是 4MB(也可设置更大)。

工作机制

1️⃣ 把物理磁盘或分区初始化为 PV(pvcreate
2️⃣ 将多个 PV 合并为 VG(vgcreate
3️⃣ 从 VG 中划分出 LV(lvcreate
4️⃣ 对 LV 格式化文件系统并挂载使用

此架构支持在线扩容、快照备份、迁移,为生产环境带来极大便利。


二、前期准备与环境检查

查看现有磁盘

lsblk
fdisk -l

确保新磁盘或分区未被挂载且无重要数据。


安装 lvm2 工具

在大多数发行版中,LVM 工具包 lvm2 已预装;若没有,可手动安装:

# Debian/Ubuntu
apt install lvm2

# RHEL/CentOS
yum install lvm2

三、PV 操作详解

创建 PV

pvcreate /dev/sdb1
pvcreate /dev/sdc1

执行后,可查看状态:

pvdisplay
pvs

扩展 PV

当需要将新的磁盘加入 VG,只需新建 PV 并用 vgextend 添加即可。


删除 PV

如果 PV 未被使用,可直接删除:

pvremove /dev/sdb1

若已经在 VG 中,需要先迁移数据并移除(见后文 pvmove 部分)。


四、VG 操作详解

创建 VG

vgcreate vg_data /dev/sdb1 /dev/sdc1

查看卷组信息:

vgdisplay
vgs

扩展 VG

vgextend vg_data /dev/sdd1

移除 PV 并缩小 VG

迁移 PV 上的数据:

pvmove /dev/sdb1
vgreduce vg_data /dev/sdb1

删除 VG

vgremove vg_data

五、LV 操作详解

创建 LV

lvcreate -L 50G -n lv_backup vg_data
  • -L: 指定大小,可用 -l 指定 PE 数量
  • -n: 逻辑卷名称

格式化 LV

mkfs.ext4 /dev/vg_data/lv_backup

挂载 LV

mkdir /mnt/backup
mount /dev/vg_data/lv_backup /mnt/backup

开机自动挂载,可写入 /etc/fstab

/dev/vg_data/lv_backup /mnt/backup ext4 defaults 0 0

扩容 LV(在线或离线)

在线扩容(xfs 文件系统)

lvextend -L +20G /dev/vg_data/lv_backup
xfs_growfs /mnt/backup

离线扩容(ext4)

lvextend -L +20G /dev/vg_data/lv_backup
resize2fs /dev/vg_data/lv_backup

缩小 LV(非常谨慎)

umount /mnt/backup
e2fsck -f /dev/vg_data/lv_backup
resize2fs /dev/vg_data/lv_backup 30G
lvreduce -L 30G /dev/vg_data/lv_backup
mount /dev/vg_data/lv_backup /mnt/backup

⚠️ 缩小操作容易导致数据丢失,务必先备份。


删除 LV

lvremove /dev/vg_data/lv_backup

六、快照(Snapshot)

创建快照

lvcreate -L 5G -s -n lv_backup_snap /dev/vg_data/lv_backup
  • -s: 创建快照
  • 快照大小一般取决于变更数据量

使用快照

mount /dev/vg_data/lv_backup_snap /mnt/snapshot

删除快照

lvremove /dev/vg_data/lv_backup_snap

七、PV 数据迁移(pvmove)

当需更换硬盘或清理磁盘时,可迁移物理卷数据:

pvmove /dev/sdb1
vgreduce vg_data /dev/sdb1
pvremove /dev/sdb1

八、系统启动与 LVM

根分区使用 LVM

若根分区使用 LVM,需在 initramfs 或 initrd 阶段加载 LVM 模块,否则无法启动。

修复启动无法找到卷组

vgscan
vgchange -ay

若需要手动恢复,可进入 rescue 模式执行。


九、LVM 与自动挂载

/etc/fstab 中指定 LV,可自动挂载,无需额外操作。例如:

/dev/vg_data/lv_backup /mnt/backup ext4 defaults 0 0

若 VG/LV 无法激活,系统会进入紧急模式,可在恢复后执行:

vgchange -ay
mount -a

十、典型错误与修复思路

情况修复方式
LV 无法挂载检查 lvdisplay,确认激活,vgchange -ay
VG 丢失vgscan 后再激活
PV UUID 不匹配pvcreate --uuid 恢复原有 UUID
缩小 LV 导致损坏若有快照或备份,可回滚

十一、优缺点总结

优点

✅ 动态扩容、缩减
✅ 跨磁盘卷组管理,空间利用率高
✅ 快照支持,方便备份与恢复


缺点

⚠️ 配置和管理复杂,出错风险高
⚠️ 性能可能略低于裸分区(尤其涉及快照时)
⚠️ 误操作风险较大(例如缩减 LV)


十二、实用技巧与最佳实践

  • 始终保持最新备份,尤其是缩小或删除卷前
  • 对于数据库、虚拟机等高变动性数据,可使用快照做定期备份
  • 使用 RAID + LVM,可以同时享有冗余与灵活管理
  • 写脚本批量自动化执行 LVM 操作,降低人为失误

十三、常用命令速查表

功能命令示例
创建 PVpvcreate /dev/sdb1
创建 VGvgcreate vg_data /dev/sdb1
扩展 VGvgextend vg_data /dev/sdc1
创建 LVlvcreate -L 10G -n lv_test vg_data
扩容 LVlvextend -L +5G /dev/vg_data/lv_test
缩小 LVlvreduce -L 5G /dev/vg_data/lv_test
快照 LVlvcreate -L 1G -s -n snap /dev/vg_data/lv_test
删除 LVlvremove /dev/vg_data/lv_test
激活 VGvgchange -ay

总结

LVM 通过抽象物理存储,极大提高了磁盘空间管理的灵活性和效率,适合用于需要经常调整容量或跨盘管理场景。熟练掌握 LVM,不仅能提高生产环境的可靠性,也能显著优化存储资源利用率。

在动手之前,务必做好备份,并严格验证每个操作步骤,尤其是涉及缩小卷、删除 PV 或迁移数据的场景,以防止意外丢失数据。

Leave a Reply

Your email address will not be published. Required fields are marked *