lvm不支持直接拆分卷组,必须通过释放空间、移出物理卷、创建新卷组的路径实现:先用pvmove迁移数据,再vgreduce移出pv,最后pvcreate和vgcreate构建新vg。

直接拆分一个已存在的卷组(VG)为多个独立卷组,在 LVM 中没有“原地拆分”命令。LVM 不支持把一个 VG 的物理区域(PE)直接切块划归给新 VG。实际操作必须通过“释放空间 → 创建新 VG → 迁移数据(可选)”的路径完成,核心是利用未分配空间或先缩小逻辑卷腾出空间。
确认当前 VG 状态和可用空间
先检查是否有未分配空间,这是最简单的情况:
- 运行
vgdisplay <vgname></vgname>,重点看 Free PE / Size 字段 - 如果有空闲空间(比如显示 “1024 PE / 4.00 GiB free”),可直接用于新建 VG —— 但注意:未分配空间属于该 VG,不能直接划走;要新建 VG,必须用未被任何 VG 占用的物理卷(PV)
- 若无空闲空间,需先从现有 LV 缩容腾出空间,再将对应 PV 移出原 VG
腾出物理卷(PV)用于新建 VG
这是拆分的本质步骤:把某块硬盘或分区(PV)从原 VG 中移除,再加入新 VG。前提是该 PV 上的 LE 全部已迁移或清空:
- 用
pvdisplay -m <pvpath></pvpath>查看该 PV 是否被 LV 使用(关注 “Used PE” 和映射关系) - 如果该 PV 已被 LV 使用,需先用
pvmove <pvpath></pvpath>把数据迁移到同 VG 内其他 PV 上(确保 VG 内有足够空闲 PE) - 迁移完成后,用
vgreduce <old_vgname><pvpath></pvpath></old_vgname>将该 PV 从原 VG 中移除 - 此时该 PV 变为“孤立 PV”,可用
pvremove <pvpath></pvpath>清除 LVM 元数据(可选,新建 VG 前通常需要)
创建新卷组并验证
将腾出的 PV 初始化并组成新 VG:
- 重新初始化 PV:
pvcreate <pvpath></pvpath>(如/dev/sdb1) - 创建新 VG:
vgcreate <new_vgname><pvpath></pvpath></new_vgname>(如vgcreate cinder-volumes /dev/sdb1) - 验证:
vgdisplay <new_vgname></new_vgname>应显示正确大小;vgs应列出两个 VG - 后续可在新 VG 中创建 LV:
lvcreate -L 10G -n cinder-volumes <new_vgname></new_vgname>
常见误区提醒
避免以下典型错误操作:
- 误用
lvcreate -n xxx centos:这仍在原 VGcentos内建 LV,不是新建 VG - 试图用
vgsplit拆分 VG:该命令仅适用于将一个 VG 拆分为两个(要求原 VG 包含多个 PV,且目标 PV 上无 LV 引用),不适用于单 PV VG 或已有数据分布复杂的场景 - 跳过
pvmove直接vgreduce:会报错 “Cannot remove PV … still in use” - 未格式化新 LV 就挂载:创建 LV 后必须
mkfs.ext4 /dev/<new_vgname>/<lvname></lvname></new_vgname>,再mount











