首页/云/云平台与虚拟化速查/virsh migrate 热迁移实操
虚拟化操作94 条

virsh migrate 热迁移实操

virsh migrate 在宿主间迁移运行中的域:--live 热迁移、--copy-storage-all 在无共享存储时复制磁盘;目标主机的 libvirt 连接与权限要提前验证。

云平台与虚拟化速查云更新于 2026-10-13

virsh migrate 是什么

virsh migrate 把运行中的虚机从一台宿主迁到另一台,内存状态持续复制,服务中断通常在秒级。共享存储场景只传内存,无共享存储时用 --copy-storage-all 全量复制磁盘,耗时随数据量增长。--persistent 让目标端保留定义,--undefinesource 在迁移成功后注销源端定义。

基本信息

基本形态virsh migrate --live vm1 qemu+ssh://root@node2/system
定义处理--persistent 目标保留定义;--undefinesource 迁后注销源
无共享存储--copy-storage-all(全量存储复制)
观察进度--verbose 输出进度;virsh domjobinfo 查看详细信息
传输通道qemu+ssh、qemu+tls、qemu+tcp,需提前配好认证

典型使用场景

  • 宿主维护下线前把虚机迁到其他节点,避免业务停机
  • 无共享存储的搬迁场景,用存储复制一次性搬走虚机
  • 手工均衡节点负载,把热点宿主上的虚机迁走
  • 容灾演练中验证迁移流程与目标端可用性

带存储复制的迁移

带存储复制的迁移
virsh migrate --live --persistent --verbose --copy-storage-all \
  vm1 qemu+ssh://root@node2/system
virsh domjobinfo vm1              # 迁移中查看数据剩余量与带宽
virsh domblklist vm1              # 迁移后核对磁盘映射是否完整
# 目标端确认:virsh list --all 与 virsh dominfo vm1
# 事前准备:SSH 免密、known_hosts、目标端同一 libvirt 存储路径

迁移方式对照

方式传输内容适用场景
共享存储热迁移只传内存与设备状态两节点共用同一存储,中断时间最短
--copy-storage-all全量复制磁盘 + 内存状态无共享存储,磁盘数据量不大
增量磁盘复制仅复制目标端已有磁盘的差异块目标端已有相同基线磁盘,节省搬迁时间
关机迁移完整磁盘与定义文件可停机业务,不受网络带宽限制
迁移失败常见三类原因:目标端 CPU 型号或特性不兼容、迁移网络带宽不足、磁盘路径在目标端不存在;排查先看源端日志与 libvirt 报错原文。
大内存虚机的热迁移会在收尾阶段反复重传脏页,内存写入密集的业务可能长时间无法收敛,必要时用停机时间目标或迁前限流业务写入。
迁移前后的存储路径、网络名称与 CPU 特性都要一致:目标端宿主的 CPU 型号较旧或缺特性时迁移会被拒绝,可先比对两侧 CPU 标志再安排窗口。

易错点

  • SSH 免密与 known_hosts 未准备:qemu+ssh 连接阶段直接失败
  • 无共享存储时未加 --copy-storage-all:迁移报找不到磁盘
  • 目标端磁盘目录路径与源端不一致,迁移成功但虚机无法启动
  • 只加 --persistent 而未确认源端定义,导致两台宿主同时存在同一虚机定义

数据来源与参考

  • libvirt 文档:Migration
  • virsh migrate 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌