逻辑卷管理(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 操作,降低人为失误
十三、常用命令速查表
| 功能 | 命令示例 |
|---|---|
| 创建 PV | pvcreate /dev/sdb1 |
| 创建 VG | vgcreate vg_data /dev/sdb1 |
| 扩展 VG | vgextend vg_data /dev/sdc1 |
| 创建 LV | lvcreate -L 10G -n lv_test vg_data |
| 扩容 LV | lvextend -L +5G /dev/vg_data/lv_test |
| 缩小 LV | lvreduce -L 5G /dev/vg_data/lv_test |
| 快照 LV | lvcreate -L 1G -s -n snap /dev/vg_data/lv_test |
| 删除 LV | lvremove /dev/vg_data/lv_test |
| 激活 VG | vgchange -ay |
总结
LVM 通过抽象物理存储,极大提高了磁盘空间管理的灵活性和效率,适合用于需要经常调整容量或跨盘管理场景。熟练掌握 LVM,不仅能提高生产环境的可靠性,也能显著优化存储资源利用率。
在动手之前,务必做好备份,并严格验证每个操作步骤,尤其是涉及缩小卷、删除 PV 或迁移数据的场景,以防止意外丢失数据。