KVM 虚拟机冷迁移和热迁移
背景:将一台物理机上的 KVM 虚拟机迁移到另一台物理机(通过 virt-manager 创建),可以通过以下步骤完成。迁移分为 冷迁移(关机迁移) 和 热迁移(在线迁移) 两种方式,这里以更通用的冷迁移为例:一、冷迁移(关机迁移)
步骤 1:在源物理机上准备虚拟机
1. 关闭虚拟机确保虚拟机已完全关闭:sudo virsh shutdown <虚拟机名称>
sudo virsh list --all # 确认状态为 "shut off"
2. 确认虚拟机磁盘文件路径
查找虚拟机的磁盘文件(通常为 .qcow2 或 .raw 格式):
sudo virsh dumpxml <虚拟机名称> | grep "source file"
输出示例:
<source file='/var/lib/libvirt/images/centos7.qcow2'/>
3. 导出虚拟机 XML 配置文件
将虚拟机的配置导出为 XML 文件:
sudo virsh dumpxml <虚拟机名称> > /tmp/vm.xml
步骤 2:将文件传输到目标物理机将虚拟机的 磁盘文件 和 XML 配置文件 传输到目标物理机:(如果磁盘文件很大,可以压缩,在进行传输)# 使用 scp 传输文件(假设目标机 IP 为 192.168.1.100)
sudo scp /var/lib/libvirt/images/centos7.qcow2 root@192.168.1.100:/var/lib/libvirt/images/
sudo scp /tmp/vm.xml root@192.168.1.100:/tmp/
步骤 3:在目标物理机上恢复虚拟机
1. 确保目标机已安装 KVM在目标机上安装 KVM 和相关工具:
sudo apt update && sudo apt install qemu-kvm libvirt-daemon-system virt-manager # Ubuntu/Debian
sudo yum install qemu-kvm libvirt libvirt-client virt-install virt-manager virt-viewer # CentOS/RHEL
2. 导入虚拟机磁盘文件
将磁盘文件放到正确的路径(需与 XML 配置中的路径一致):
sudo mv /tmp/centos7.qcow2 /var/lib/libvirt/images/
3. 修改 XML 配置文件(可选)
如果目标机的硬件配置(如网络桥接名称、CPU 型号)与源机不同,需手动编辑 XML 文件:
sudo vi /tmp/vm.xml
[*]检查 <source bridge='br0'/> 是否与目标机的桥接名称一致。
[*]检查 <cpu> 配置是否兼容目标机的 CPU(如改为 host-passthrough)
[*]mac地址也改下
操作以下步骤之前需要在物理机上创建br0桥接(em1为物理机的网卡设备)
DEVICE="em1"
ONBOOT="yes"
TYPE=Ethernet
NAME="em1"
BRIDGE=br0
BOOTPROTO=none
NM_CONTROLLED=no
DEVICE="br0"
ONBOOT="yes"
ARPCHECK=no
TYPE=Bridge
BOOTPROTO=static
GATEWAY="网关地址"
IPADDR="主机 - 主ip"
NETMASK="子网掩码"
DNS1="dns地址"
DNS2="8.8.8.8"
IPADDR1="ip1"
NETMASK1="子网掩码"
IPADDR2="ip2"
NETMASK2="子网掩码"
IPADDR3="ip3"
NETMASK3="子网掩码"
IPADDR4="ip4"
NETMASK4="子网掩码"
IPADDR5="ip5"
NETMASK5="子网掩码"
IPADDR6="ip6"
NETMASK6="子网掩码"
NM_CONTROLLED=NO
禁用掉NetworkManager服务
systemctl disable NetworkManager
systemctl stop NetworkManager
重启网络服务network
systemctl restart network
或者
service network restart
验证网络是否有问题
ping baidu.com
4. 导入虚拟机配置
使用 XML 文件定义虚拟机:
sudo virsh define /tmp/vm.xml
5. 启动虚拟机
sudo virsh start <虚拟机名称>
sudo virsh list --all # 确认状态为 "running"
virsh autostart <虚拟机名称>
6. 删除default网络,该网络是默认的,NAT模式需要用到;桥接模式不需要 ,直接删除该网络(得删除,不然每次物理机重启之后,会启用这个网络,导致网络出问题)
virsh net-destroy default
virsh net-autostart --disable default
virsh net-undefine default
二、热迁移(在线迁移)如果需要 不关机迁移,需满足以下条件:
[*]两台物理机的 CPU 型号相同(或兼容)。
[*]共享存储(如 NFS、iSCSI)或使用 直接内存复制。
[*]网络互通且防火墙允许迁移端口(默认 49152-49215)。
操作步骤
1. 在源机上启动迁移:
sudo virsh migrate --live --persistent <虚拟机名称> qemu+ssh://目标机IP/system
2. 输入目标机的 root 密码完成迁移。
三、验证迁移结果1. 在目标机上检查虚拟机状态:sudo virsh list
sudo virsh console <虚拟机名称> # 登录验证
2. 测试网络和服务:
[*]检查虚拟机能否访问外网。
[*]验证关键服务(如 Web、数据库)是否正常运行。
四、常见问题解决1. 虚拟机启动失败
[*]错误:CPU 不兼容
解决:修改 XML 中的 CPU 配置为兼容模式:
<cpu mode='host-passthrough' check='none'/>
2. 网络无法连接
[*]错误:桥接名称不一致
解决:编辑 XML 文件,将 <source bridge='br0'/> 改为目标机的桥接名称。
3. 权限问题
[*]错误:Cannot access storage file
解决:确保磁盘文件权限正确:
sudo chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/images/centos7.qcow2
五、总结
迁移方式 适用场景 优点 缺点
冷迁移 允许关机维护 简单可靠,兼容性高 需要停机
热迁移 要求服务不中断 无缝迁移,用户体验好 配置复杂,需硬件兼容
通过以上步骤,你可以将虚拟机安全地迁移到另一台物理机。如果有特殊需求(如 GPU 透传),可能需要额外配置。
页:
[1]