CentOS 7.9 的卷组由两块云盘组成,为了换掉老盘执行 pvmove,跑到六成时机房网络抖动、SSH 断开,重连后 pvs 里源盘和目标盘都显示在用,业务目录读写正常但速度掉了一半。

一开始怀疑是「两个 PV 的 PE 大小不一致,搬迁过程中做了逐块转换,速度被拖得很慢」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。pvmove 进程随 SSH 会话退出被杀,只迁完一部分逻辑区,PV 里同时留了两处数据。也可能是卷组没有配置 mirror,pvmove 的数据搬迁没有任何冗余保护。

另外,云盘本身有 IOPS 上限,两块盘同时读写把额度抢光,pvmove 进度几乎不动。

动手时先确认中断的状态还剩多少没迁完

pvs -o pv_name,pv_used,pv_free && lvs -o lv_name,devices

接着在后台重新拉起搬迁并断开终端

nohup pvmove /dev/vdb > /root/pvmove.log 2>&1 &

盯住进度,别让两条搬迁同时跑

while pgrep -x pvmove >/dev/null; do pvs; sleep 10; done

等前面都确认过,再确认源盘已经空出来再移出卷组

pvmove -i 5 /dev/vdb && vgreduce vg_data /dev/vdb && pvremove /dev/vdb

别只看报错消失,验证要多做一步。pvmove 结束后 pvs 显示源盘 PFree 等于 PSize,lvs 里逻辑卷的设备只剩新盘,业务目录读写速度恢复到迁移前的水平。

pvmove 一定要放进 nohup 或 screen 里跑,SSH 一断进程就跟着没了;中断后别再对同一块盘开第二条搬迁,很容易把 PE 映射搞乱。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189