将一台机器中的kvm虚拟机迁移到另一台机器的大概步骤:

1、拷贝img镜像到指定机器

scp 或者其他方式 ###2、拷贝虚拟机配置文件 /etc/libvirt/qemu/win7.xml 到目的机器的home目录

3、修改win7.xml中的CPU架构

架构不同报错如下:

1
2
error: Failed to start domain win7
error: the CPU is incompatible with host CPU: Host CPU does not provide required features: fma, pcid, aes, xsave, avx, fsgsbase, bmi1, avx2, bmi2, invpcid, rdseed, adx, smap

查看kvm支持的cpu架构: kvm -cpu ?

如果宿主机使用是不同的cpu架构,这里需要修改 使用lscpu 找到Model name ,修改下面的conroe为对应的model

1
2
3
<cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Conroe</model>
  </cpu>

4、增加图形化访问

1、vnc

修改win7.xml中的graph选项如下:

1
2
3
 <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>

因为vnc默认只监听127.0.0.1地址,所以需要做相应修改:

sudo vim /etc/libvirt/qemu.conf

修改如下字段:

vnc_listen = "0.0.0.0"

重启服务生效:

sudo systemctl restart libvirtd

2、vnc连接遇到的问题

RFB protocol error: invalid message type ...

解决办法:

在 Options 设置中,将 Picture quality 设置为 High,设置为 Automatic 是无法识别

3、spice

修改win7.xml中的graph选项如下:

1
2
3
4
<graphics type='spice' port='5900' autoport='no' listen='0.0.0.0'>
     <listen type='address' address='0.0.0.0'/>
     <image compression='off'/>
   </graphics>

同样spic默认只监听127.0.0.1地址,所以需要做相应修改:

sudo vim /etc/libvirt/qemu.conf

修改如下字段, 找到取消前面的注释:

spice_listen = "0.0.0.0"

重启服务生效:

sudo systemctl restart libvirtd

连接:

remote-viewer spice://ip:port

5、配置完毕,导入img到virsh中

1
2
3
4
5
6
7
8
9
# 导入
sudo virsh define win7.xml

#启动
sudo virsh start win7

#查看vnc端口
sudo virsh vncdisplay win7
# 显示 :0 vnc端口从5900开始,所以对外暴露的端口为: 5900+0