可以在线安全迁移PV数据,需确保VG有足够空闲PE、源PV非唯一PV、LV处于激活状态;执行pvmove /dev/sdb后监控进度,迁移完用vgreduce和pvremove清理;全程业务不中断。

可以在不中断业务的前提下,用 pvmove 将一个物理卷(PV)上的数据安全迁移到其他 PV 上,前提是该 PV 所属的卷组(VG)中还有足够空闲空间,且逻辑卷(LV)处于在线、可读写状态。
确认迁移前提条件
迁移前必须满足以下几点,否则 pvmove 会失败或引发风险:
- 目标 VG 中存在未分配的物理扩展(PE),总容量 ≥ 源 PV 已使用的 PE 数量(可用
pvs -o +pv_used查看) - 源 PV 不能是 VG 中唯一 PV(即不能整个 VG 只有它一个),否则无法腾空
- 所有依赖该 PV 的 LV 必须处于激活状态(
lvs显示owi-a---或类似状态),且文件系统已挂载、正在使用也没关系 - 确保内核支持 device-mapper,并已加载
dm_mod模块(现代发行版默认满足)
执行标准 pvmove 迁移流程
操作本身分三步:检查 → 迁移 → 移除。全程无需停机,LV 和上层服务持续可用。
-
查看源 PV 使用情况:
pvs /dev/sdb(假设要迁 /dev/sdb),确认 Used 列数值和 PE 总数 -
启动迁移:
pvmove /dev/sdb(自动选择 VG 内其他空闲 PV 作为目标);如需指定目标 PV,用pvmove /dev/sdb /dev/sdc -
监控进度:
pvs -o +pv_used或pvmove -i 15(每15秒刷新一次进度);也可用watch -n 5 'pvs -o +pv_used'
应对迁移中常见问题
实际操作中可能遇到卡顿、中断或资源争用,需针对性处理:
- 若迁移过慢,可限制 I/O 影响:加
--background放入后台,或用ionice -c2 -n7降低磁盘优先级 - 若中途被中断(如 Ctrl+C),
pvmove会自动保存进度,下次运行同命令即可续传 - 若目标 PV 空间不足导致失败,先用
vgextend扩容 VG,或用pvmove -n lv_name /dev/sdb指定只迁移某 LV 的数据,分批操作 - 迁移完成后,用
vgreduce my_vg /dev/sdb将空 PV 从 VG 中移除;再用pvremove /dev/sdb清理元数据(此步才真正释放设备)
验证迁移结果与业务连续性
迁移不是结束,验证才能确保万无一失:
- 运行
lvs -o +devices,确认所有 LV 的 PV 分布不再包含 /dev/sdb - 检查文件系统一致性(可选):
e2fsck -f /dev/my_vg/my_lv(仅当使用 ext4 等需检查时) - 在业务低峰期做一次简单读写测试,例如
dd if=/dev/zero of=/mnt/testfile bs=1M count=100 oflag=direct - 观察
dmesg和journalctl -u lvm2-lvmetad是否有 device-mapper 相关报错


















