黑帽联盟
标题: KVM 虚拟机冷迁移和热迁移 [打印本页]
作者: 定位 时间: 2025-3-25 21:38
标题: 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 配置文件 传输到目标物理机:(如果磁盘文件很大,可以压缩,在进行传输)
步骤 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 文件:
操作以下步骤之前需要在物理机上创建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
重启网络服务networksystemctl restart network
或者
service network restart
验证网络是否有问题
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
二、热迁移(在线迁移)如果需要 不关机迁移,需满足以下条件:
操作步骤
1. 在源机上启动迁移:
sudo virsh migrate --live --persistent <虚拟机名称> qemu+ssh://目标机IP/system
2. 输入目标机的 root 密码完成迁移。
三、验证迁移结果1. 在目标机上检查虚拟机状态:sudo virsh list
sudo virsh console <虚拟机名称> # 登录验证
2. 测试网络和服务:
- 检查虚拟机能否访问外网。
- 验证关键服务(如 Web、数据库)是否正常运行。
四、常见问题解决1. 虚拟机启动失败<cpu mode='host-passthrough' check='none'/>
2. 网络无法连接
3. 权限问题sudo chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/images/centos7.qcow2
五、总结
迁移方式 | 适用场景 | 优点 | 缺点 |
冷迁移 | 允许关机维护 | 简单可靠,兼容性高 | 需要停机 |
热迁移 | 要求服务不中断 | 无缝迁移,用户体验好 | 配置复杂,需硬件兼容 |
通过以上步骤,你可以将虚拟机安全地迁移到另一台物理机。如果有特殊需求(如 GPU 透传),可能需要额外配置。
欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) |
Powered by Discuz! X2.5 |