静态迁移又称为离线迁移(Offline Migration)。在虚拟机关机或暂停的情况下从一台宿主机迁移到另一台宿主机。

静态迁移虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件和配置文件到目标宿主机中,实现迁移。静态迁移大致分为:

  • 宿主机使用本地存储存放虚拟机磁盘文件(本文基于本地磁盘存储虚拟机磁盘文件)
  • 宿主机之间使用共享存储存放虚拟机磁盘文件(目标虚拟主机上重新定义虚拟机即可)

1:开始操作前我们需要先关闭虚拟机

virsh shutdown vm-001

virsh domstate vm-001

2:查看虚拟机数据盘位置

[root@server ~]# virsh domblklist vm-001
Target     Source
------------------------------------------------
vda        /data/kvm/images/vm-001.qcow2

3:迁移虚拟机数据盘及虚拟机配置到目标服务器

[root@server ~]# scp /var/lib/libvirt/images/vm-001.qcow2 root@192.168.100.100:/data/kvm/images
root@192.168.100.100's password: 
vm-001.qcow2                                                                                                               100%  237GB 110.0MB/s   36:48    

[root@server ~]# scp /etc/libvirt/qemu/vm-001.xml root@192.168.100.100:/etc/libvirt/qemu/
root@192.168.100.100's password: 
vm-001.xml                                                                                                                                                      100% 4409     3.9MB/s   00:00    

4:查看迁移完成的虚拟机数据

[root@server ~]# ll /etc/libvirt/qemu/vm-001.xml 
-rw-------. 1 root root 4406 Nov 17 01:49 /etc/libvirt/qemu/vm-001.xml

[root@server ~]# ll /data/kvm/images/vm-001.qcow2 
-rw-r--r--. 1 qemu qemu 254764777472 Nov 17 02:48 /data/kvm/images/vm-001.qcow2

5:在新的服务器中根据配置文件重新注册虚拟机

[root@server ~]# virsh define /etc/libvirt/qemu/vm-001.xml 
Domain vm-001 defined from /etc/libvirt/qemu/vm-001.xml

6:启动迁移之后的虚拟机

[root@server ~]# virsh start vm-001 
Domain vm-001 started

到此为止一个虚拟机的迁移工作就到此为止了。

但是会有一种意外情况,当目标服务器和原来的服务器硬件配置不一样时,启动会报CPU错误:

[root@server ~]# virsh start vm-001 
error: Failed to start domain vm-001
error: the CPU is incompatible with host CPU: Host CPU does not provide required features: hle, rtm

这是因为两台宿主机的CPU类型不一致导致的,解决方法也很简单,将虚拟机XML文件中的CPU类型改为与当前宿主机一致即可。

解决办法也很简单,请按照如下步骤操作~

1:查看当前宿主机的CPU架构类型

[root@server ~]# virsh capabilities |grep model
      <model>Broadwell-noTSX-IBRS</model>
    <secmodel>
      <model>selinux</model>
    </secmodel>
    <secmodel>
      <model>dac</model>
    </secmodel>

2:修改虚拟机XML文件中的CPU类型(可以自己创建一个新的虚拟机,看配置文件取替换最为稳妥)

3:重新注册并启动虚拟机

[root@server ~]# virsh undefine vm-001
Domain vm-001 has been undefined

[root@server ~]# virsh define /etc/libvirt/qemu/vm-001.xml 
Domain vm-001 defined from /etc/libvirt/qemu/vm-001.xml

[root@server ~]# virsh start vm-001
Domain vm-001 started

Hello World