pvmove是LVM在线迁移工具,可将源PV已分配PE安全迁至目标PV而不中断服务;需确保源PV可分配、目标PV已加入同VG且容量足够、无I/O错误;命令如pvmove -i 5 /dev/sdb /dev/sdd,可用watch监控进度;完成后验证Alloc PE为0、LV全active,再依次vgreduce和pvremove。

在 Linux 系统中,pvmove 是 LVM 提供的在线数据迁移工具,用于将一个物理卷(PV)上的所有已分配 PE(Physical Extents)安全迁移到其他 PV 上,全程不中断上层逻辑卷(LV)和业务服务。
确认前提条件
迁移前必须满足以下几点,否则操作会失败或引发数据风险:
- 源 PV(如
/dev/sdb)必须处于allocatable状态,运行pvs -v查看,不能显示[unknown]或missing; - 目标 PV 已通过
pvcreate初始化,并使用vgextend加入同一卷组(VG),且容量 ≥ 源 PV 当前已分配的 PE 总量(可用pvdisplay /dev/sdb | grep "Allocated PE"查); - 系统无 I/O 错误:检查
dmesg | grep -i "sdb.*error"和smartctl -a /dev/sdb,若Reallocated_Sector_Ct或Current_Pending_Sector> 0,应立即迁移,但不可在盘已断连时强行操作。
执行基础迁移命令
最简迁移方式是直接指定源和目标 PV:
pvmove /dev/sdb /dev/sdd
该命令将 /dev/sdb 上所有已用 PE 逐个复制到 /dev/sdd,同时自动更新 LV 的映射关系。迁移过程可被中断、恢复,不影响数据一致性。
推荐加 -i 参数控制中断间隔(非采样),便于监控和应急响应:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
pvmove -i 5 /dev/sdb /dev/sdd
表示每 5 秒暂停一次,释放 I/O 资源,期间可安全执行检查或中止。
实时观察迁移进度
新开终端,用以下命令持续观察:
watch -n 1 'pvs -o +pv_used,pe_count'
重点关注两列变化:
-
/dev/sdb的PV Used值应持续下降; -
/dev/sdd的PV Used应同步上升; - 若
/dev/sdb的值停滞超 2 分钟,立即查dmesg是否出现新 I/O 报错——这可能预示坏道恶化,需中止并评估是否改用更保守策略(如分段迁移)。
验证与收尾操作
当 pvmove 正常退出(echo $? == 0),需完成三步验证:
- 运行
pvdisplay /dev/sdb,确认Alloc PE和Used PE均为0; - 运行
lvscan,确保所有 LV 状态为active,无inactive条目; - 执行
vgreduce vg00 /dev/sdb从卷组中移除引用,再运行pvremove /dev/sdb彻底清除 PV 元数据。
注意:vgreduce 和 pvremove 必须在迁移完成后执行,顺序不可颠倒,否则会导致 VG 元数据异常。

















