黑帽联盟

 找回密码
 会员注册
查看: 31|回复: 0
打印 上一主题 下一主题

[资源教程] KVM 虚拟机冷迁移和热迁移

[复制链接]

898

主题

38

听众

3375

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    奋斗
    昨天 15:40
  • 签到天数: 1700 天

    [LV.Master]伴坛终老

    背景:将一台物理机上的 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、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部