虚拟机迁移不动,通常不是虚拟机本身坏了,而是底层环境卡住了。 先按“存储→网络→CPU/内存→磁盘IO”的顺序排查,绝大多数问题都能锁定到共享存储或网络传输上,别急着反复点击重试,更别强制关机,避免把一次迁移失败升级成虚拟机损坏。
虚拟机迁移失败原因:先判断卡在哪一步
迁移过程涉及两个宿主机和一个共享存储(或网络传输),任何一环出问题,迁移就会停在某个进度条上,要排查原因,先看现象:是迁移一直0%,还是到80%后回滚,还是直接报错,不同阶段指向不同原因,别一股脑查日志。
共享存储状态异常导致迁移卡住
热迁移的核心是共享存储,如果两台宿主机访问的是同一个存储卷,迁移时只需要同步内存数据,一旦存储卷只读、断连、或出现延迟抖动,虚拟机内存数据就无法正常写入,迁移就会卡住。
- 登录宿主机管理端,查看存储卷是否处于在线状态,例如vCenter中存储图标变成灰色或黄色,说明有问题。
- 在命令行执行
vmkfstools -P(VMware环境下)或vgs/lvs(Linux KVM)验证存储可写性。 - 检查存储设备和交换机之间的光纤或网线连接,看是否有丢包或错误计数。
行业共识认为,较大比例的虚拟机迁移卡住问题与共享存储异常有关,所以排查第一步应当是存储,而不是虚拟机本身。
网络带宽和延迟拖慢迁移进度
迁移过程中内存数据和磁盘数据都要通过网络传输,如果迁移流量走的是业务网段,又或者物理链路只有千兆且被占满,那么迁移速度会慢到看起来像“不动了”,你在页面上看到进度条几乎不走,其实后台还在一点点传,只是太慢。
- 查看宿主机网卡流量,确认是否跑满,在Linux下用
iftop或nload,在Windows Server下用任务管理器里的资源监视器。 - 检查迁移流量是否被交换机限速,是否经过防火墙或安全策略拦截。
- 如果跨区域迁移,检查网络往返延迟(RTT),延迟超过10ms甚至更高,迁移会很吃力,经常超时回滚。
虚拟机CPU/内存配置不一致
热迁移要求两端宿主机CPU架构和特性集兼容,如果源端虚拟机启用了某些CPU指令集,而目标宿主机不支持,迁移就会在验证阶段失败,内存配置不一致也可能导致迁移完成后无法启动。
- 在虚拟机关机状态下,将CPU模式改为“兼容”或“host-passthrough”(KVM)共享SSE、AVX等特性。
- 确认两端宿主机的内存插槽和NUMA拓扑差异,特别是大内存虚拟机,比如源宿主机是8条内存插满,目标宿主机只有4条,迁移后可能出现内存带宽不一致。
磁盘IO瓶颈与快照影响
如果虚拟机上挂着多个快照,迁移时需要合并快照数据,IO压力会明显增大,共享存储本身磁盘IO跟不上,也会导致迁移进度长期不刷新,你会看到虚拟机一直响应正常,但迁移就是不走。
- 在迁移前清理无用快照,保留快照数量尽量不超过两个。
- 检查存储端读写延迟,在Linux用
iostat -x 1查看await和util。await超过20ms就需要注意了。
虚拟机热迁移卡住怎么解决:分步骤排查与操作
知道原因后,按下面的顺序动手操作,每一步都确认通过再进入下一步,不要跳过,这比乱试命令靠谱得多。
第一步:检查宿主机和虚拟机的资源状态
先确认源宿主机和目标宿主机的CPU、内存、磁盘空间是否充足,如果目标宿主机剩余内存不足,迁移任务会一直等待调度,表现就是卡在0%。
- 打开宿主机管理界面,看目标宿主机可用内存是否大于虚拟机内存规格。
- 在命令行执行
free -h查看内存,df -h查看磁盘空间。 - 确认虚拟机没有处于IO等待状态,在虚拟机内部执行
,看top
wa指标是否过高,CPU空闲但wa很高,说明存储有问题。
第二步:验证共享存储和网络连接
- 从源宿主机到目标宿主机执行
ping -s 1400,发送大包测试MTU一致性,如果大包不通,说明MTU配置有问题,可能导致迁移数据反复重传。 - 在两端宿主机上分别访问同一存储挂载点,创建一个临时文件再删除,确认读写正常。
- 检查存储和网络的错误计数器,在esxi中输入
esxcli network nic stats get,在Linux中用ethtool -S,看rx_errors或tx_errors是否为0。
第三步:调整迁移参数和重试策略
如果网络带宽确实有限,可以限制迁移带宽,避免因过载导致连接被重置,在VMware中,可以设置迁移速率:
- 在vCenter中,编辑虚拟机“迁移”设置,选择“带宽”限制。
- 在KVM中,可以调整
migration bandwidth参数,或者使用migrate-set-speed命令。
如果迁移一直卡在某个进度,可以取消迁移,等待几分钟后重试一次,但重试前必须确认存储锁已经释放,业内专家指出,频繁重试而不清理残留锁,会加重集群负担,导致其他虚拟机也受影响。
第四步:处理迁移中断后的残留锁
迁移失败后,源宿主机上可能残留虚拟机的进程或存储锁,强制清除前,确认虚拟机没有在任何位置运行。
- 在VMware中,查看任务列表,确认迁移任务已取消,若仍显示“正在迁移”,需要等待后台清理线程结束。
- 在Proxmox(PVE)中,执行
qm stop <vmid>后检查ls -l /var/lock/,删除对应锁文件(需要谨慎,确认虚拟机未运行)。 - 对于NFS存储,可以使用
showmount -a查看挂载状态,必要时重新挂载。
预防虚拟机迁移不动:日常维护建议
与其等迁移卡住再去救,不如在平时做好几件事,减少迁移故障率,很多迁移问题其实是可以提前避免的。
定期检查集群健康状态
- 每周查看宿主机日志,过滤
error、timeout、reset等关键字。 - 使用vCenter的“主机配置文件”功能,核对主机软硬件版本一致性。
- 对存储阵列做定期巡检,关注缓存命中率和磁盘坏道。
配置合理的迁移网络和存储策略
- 业务网络和迁移网络物理分离,大型集群建议万兆网卡做专门的迁移通道。
- 共享存储不要使用单点NFS,尽量用冗余的FC-SAN或具备多路径的iSCSI。
- 为虚拟机开启“迁移兼容性”选项,确保跨主机CPU特性一致。
虚拟机迁移不动怎么办:常见问题与解答
迁移一直停留在0%怎么办?
停留在0%说明迁移任务刚建立,网络层还没有开始传输数据,优先检查目标宿主机是否被其他任务占用,或者存储卷是否被只读挂载,排除后,取消迁移并重新发起一次,同时观察宿主机日志中的连接建立信息。
迁移失败后原虚拟机还能启动吗?
热迁移失败时,原虚拟机通常还保留在源宿主机上,能够继续运行,但如果迁移过程中存储锁未释放,启动可能报错,此时需要等待锁超时,或在确认存储端没有IO活动后手动解除锁,切勿在源宿主机虚拟机运行的同时强制启动同名虚拟机,会导致数据损坏。
跨虚拟化平台迁移需要注意什么?
跨平台迁移(如VMware到KVM)无法使用在线热迁移,只能关机后通过导出OVF或转换工具操作,转换完成后需要重新安装虚拟机内的驱动,因此建议先做一次小范围验证,确认业务兼容后再批量迁移。
虚拟机迁移不动,原因多数集中在存储、网络和CPU兼容性这三方面。 遇到问题别慌,按上述步骤逐项排查,绝大多数迁移卡顿都能解决,平时把迁移网络和存储基础打好,远比事后修故障更省心。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/612169.html





