KVM(Kernel-based Virtual Machine)迁移虚拟机是虚拟化管理中的重要操作,主要用于实现负载均衡、资源优化或主机维护,迁移分为实时迁移(Live Migration)和冷迁移(Cold Migration),前者在虚拟机运行状态下完成,后者需关闭虚拟机,以下是KVM迁移虚拟机的详细命令及操作流程,涵盖不同场景下的实现方法。

准备工作
迁移前需确保:
- 源主机和目标主机网络互通,且配置相同网段或使用隧道(如GRE、VXLAN)。
- 两台主机安装相同版本的KVM、QEMU和libvirt,并开启SSH免密登录。
- 共享存储(如NFS、iSCSI)或确保虚拟机磁盘文件可跨主机访问(若使用本地存储,需手动复制磁盘文件)。
- 防火墙允许libvirt默认端口(16509)及通信端口(如5900-5930用于VNC)。
实时迁移命令(在线迁移)
实时迁移通过virsh命令实现,核心命令为virsh migrate,语法如下:
virsh migrate --live [--p2p] [--tunnel] [--unsafe] [--persistent] [--verbose] [--bandwidth MB/s] DOMAIN qemu+ssh://USER@TARGET_HOST/system [migrate://]DISK_IMAGE_PATH
参数说明:
--live:实时迁移(不关闭虚拟机)。--p2p:点对点迁移(不通过libvirtd代理)。--tunnel:通过SSH隧道传输数据(默认)。--unsafe:强制迁移(可能导致数据不一致,慎用)。--persistent:迁移后目标主机保留虚拟机配置。--bandwidth:限制迁移带宽(单位MB/s)。DOMAIN:虚拟机名称或ID。qemu+ssh://USER@TARGET_HOST/system:目标主机连接URI(需SSH免密)。DISK_IMAGE_PATH:磁盘路径(若使用共享存储可省略)。
示例:
-
基本实时迁移(通过SSH隧道,默认方式):
virsh migrate --live myvm qemu+ssh://root@192.168.1.100/system
-
指定带宽限制(限制为100MB/s):
(图片来源网络,侵删)virsh migrate --live --bandwidth 100 myvm qemu+ssh://192.168.1.100/system
-
使用本地磁盘迁移(需提前将磁盘文件复制到目标主机):
virsh migrate --live myvm qemu+ssh://192.168.1.100/system file:///var/lib/libvirt/images/myvm.qcow2
冷迁移命令(离线迁移)
冷迁移需先关闭虚拟机,再通过virsh define或手动复制文件实现。
步骤:
-
关闭虚拟机:
virsh shutdown myvm
-
导出虚拟机配置:
(图片来源网络,侵删)virsh dumpxml myvm > myvm.xml
-
复制磁盘文件到目标主机:
scp /var/lib/libvirt/images/myvm.qcow2 root@192.168.1.100:/var/lib/libvirt/images/
-
在目标主机导入配置:
virsh define myvm.xml
-
启动虚拟机:
virsh start myvm
迁移后验证
-
检查虚拟机是否在目标主机运行:
virsh list --all
-
确认虚拟机网络、存储等功能正常。
常见问题与解决
-
迁移失败,提示“permission denied”
- 原因:SSH免密登录未配置或目标主机目录权限不足。
- 解决:执行
ssh-copy-id root@TARGET_HOST,并确保目标主机目录(如/var/lib/libvirt/images/)对源主机可写。
-
迁移卡顿或中断
- 原因:网络带宽不足或磁盘I/O性能瓶颈。
- 解决:增加
--bandwidth参数限制流量,或优化网络配置(如使用万兆网络)。
FAQs
Q1: 实时迁移时虚拟机卡顿如何处理?
A: 可能是网络带宽不足或目标主机资源紧张,可通过virsh migrate --bandwidth限制迁移速率,或检查目标主机CPU、内存是否充足,确保两台主机间网络延迟低于5ms。
Q2: 冷迁移后虚拟机无法启动怎么办?
A: 检查目标主机磁盘路径是否正确,以及XML配置中的<source>路径是否与实际磁盘位置一致,可使用virsh edit myvm修改配置文件,确保<disk type='file' device='disk'>中的<source file='/path/to/disk'/>路径正确。
