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 映射搞乱。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
