---
title: 虚拟机热迁移方案指导（Qemu-2.12&Libvirt-4.5）-官方技术文章-鲲鹏社区
description: 从CentOS 7.6迁移到openEuler LTS-SP1虚拟机热迁移指导。
keywords: Qemu,虚拟机热迁移,方案指导,Libvirt,官方技术文章,鲲鹏社区,介绍,二
url: https://www.hikunpeng.com/developer/techArticles/20250911-11?envFlag=1
section: (其他)
---

# 虚拟机热迁移方案指导（Qemu-2.12&Libvirt-4.5）-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20250911-11?envFlag=1
描述: 从CentOS 7.6迁移到openEuler LTS-SP1虚拟机热迁移指导。
关键词: Qemu,虚拟机热迁移,方案指导,Libvirt,官方技术文章,鲲鹏社区,介绍,二

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

虚拟机热迁移方案指导（Qemu-2.12&Libvirt-4.5）

虚拟机热迁移方案指导（Qemu-2.12&Libvirt-4.5）

跨平台迁移openEuler

发表于 2025/09/11

0

作者 | 朱勇

# 一、介绍

从CentOS 7.6迁移到openEuler LTS-SP1虚拟机热迁移指导。

# 二、环境信息

| 类别 | 源环境 | 目标环境 |
| --- | --- | ---|
| 操作系统 | CentOS 7.6(kernel 3.10.0-957) | openEulerLTS-SP1(4.19.90-2012.5.0.0054) |
| Qemu | 2.12.0 | 2.12.0 |
| Libvirt | 4.5.0 | 4.5.0 |

# 三、虚拟化软件安装

## 1、背景介绍

这里不作源环境CentOS 7.6上qemu-2.12和libvirt-4.5的安装介绍，主要介绍目标环境openEuler上qemu-2.12和libvirt-4.5的安装。

由于项目背景，用户环境上qemu-2.12还在进行rpm包构建，libvirt-4.5的rpm包已经构建完成，因此qemu-2.12使用源码安装，libvirt使用yum安装。使用本文档进行迁移方案验证时可以先看看仓库中qemu-2.12的包是否构建完成（当前仓库中已经构建好了部分qemu-2.12的包，但是缺少qemu-common的包，还不能正常使用），如果构建完成了也可以使用yum安装。

## 2、卸载openEuler系统自带的libvirt

卸载openEuler系统自带的libvirt：

```
yum remove libvirt
```

## 3、安装qemu-2.12

1、安装依赖软件。

```
yum -y install gcc gcc-c++ automake make libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol usbredir-devel libaio-devel python2 python3 libgcrypt
yum install pixman-devel -y
yum -y install openssl-devel
yum -y install libjpeg-turbo-devel
yum -y install opus-devel
yum -y install gnutls-devel //该项是启用GNUTLS选项，VNC秘钥启用需要
```

2、配置yum源。1.备份repo文件。

```
mv /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak
```

2.打开repo文件。

```
vim /etc/yum.repos.d/epol_update.repo
```

3.按“i”进入编辑模式，添加以下内容。

```
[compatible]
name=compatible
baseurl=https://api.compass-ci.openeuler.org/rpm/testing/openeuler-20.03-LTS-SP1/compatible/f35/$basearch/
enabled=1
gpgcheck=0
[extras]
name=extras
baseurl=https://api.compass-ci.openeuler.org/rpm/testing/openeuler-20.03-LTS-SP3/extras/$basearch/
```

4.按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。

7、安装qemu-2.12.0。

```
yum install qemu*
```

8、（可选）如果缺少依赖，还原yum源设置进行安装。

```
mv /etc/yum.repos.d/openEuler.repo.bak /etc/yum.repos.d/openEuler.repo
mv /etc/yum.repos.d/epol_update.repo /etc/yum.repos.d/epol_update.repo.bak
```

## 4、安装libvirt-4.5.0

1、安装libvirt-4.5.0。

```
yum install libvirt-4.5.0
```

2、如果缺少依赖，还原yum源设置进行安装。

```
mv /etc/yum.repos.d/openEuler.repo.bak /etc/yum.repos.d/openEuler.repomv /etc/yum.repos.d/epol_update.repo /etc/yum.repos.d/epol_update.repo.bak
```

3、安装完毕后输入virsh version验证。回显显示正确版本即为安装成功。

## 5、安装virt-install-1.5.0

1、virt-install的安装不是必需的，如果需要安装虚拟机，则通常使用virt-install较为方便。这里采取一种较为简单的方式：

```
yum install virt-viewer
git clone https://github.com/virt-manager/virt-manager.git -b v1.5.0
cd virt-manager
./virt-install --version
```

2、验证虚拟机安装。

```
wget https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS-SP1/virtual_machine_img/x86_64/openEuler-20.03-LTS-SP1.x86_64.qcow2.xz
xz -d openEuler-20.03-LTS-SP1.x86_64.qcow2.xz
./virt-install --name VM01 --ram 8192 --vcpus=8 --disk path=./openEuler-20.03-LTS-SP1.x86_64.qcow2 --force --import --autostart --network network=default
```

3、这里虚拟机使用的是NAT模式，虚拟机启动后建议进入虚拟机执行以下命令，否则使用virsh console VM01进入虚拟机时会卡住。

```
echo "ttyS0" >> /etc/securetty
grubby --update-kernel=ALL --args="console=ttyS0" # 更新内核参数
reboot
```

# 四、虚拟机热迁移

目标主机需要设置主机名称并将其配置到源主机的/etc/hosts文件中。

这里假定目标主机名称已设置为target。

1、首先查看目标主机是否开启16509端口。

```
lsof -i:16509
```

2、在源主机上检查是否可以传输数据。

```
virsh -c qemu+tcp://root@target/system
```

3、如果不能连接，在目标主机上按以下步骤进行配置。

1. 编辑/etc/libvirt/libvirtd.conf文件，添加以下内容。

```
listen_tls = 0listen_tcp = 1tcp_port = "16509"listen_addr = "0.0.0.0"auth_tcp = "none"
```
2. 编辑/etc/sysconfig/libvirtd文件，修改LIBVIRTD_ARGS参数的值。

```
LIBVIRTD_ARGS="--listen"
```
3. 重启libvirt。

```
service libvirtd restart
```
4. 如果无法重启服务，还原/etc/sysconfig/libvirtd文件配置，并用以下命令启动。

```
libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf
```
5. 配置完毕后请再次检查源主机上通过以下命令是否可以传输数据。

```
virsh -c qemu+tcp://root@target/system
```

4、热迁移。

- 如果使用了共享存储，则热迁移命令为：

```
virsh migrate --live --verbose VM01 qemu+ssh://target/system
```
- 如果没有使用共享存储，需先在目标主机创建和源主机相同目录的镜像文件，热迁移命令为：

```
virsh migrate --live --verbose VM01 qemu+ssh://target/system --unsafe --copy-storage-all
```

# 五、问题处理

#### ImportError: No module named gi

解决办法：

```
pip install pycairopip install PyGObject
```

#### ImportError: No module named libvirt

解决办法：

```
yum install libvirt-python-4.5.0-1.x86_64.rpm #需要自己构建rpm包
```

#### ImportError: No module named libxml2

解决办法：

```
yum install python2-libxml2
```

#### ValueError: Namespace Libosinfo not available

解决办法：

```
yum install libosinfo
```

#### No module named ipaddr

解决办法：

```
pip install ipaddr
```

#### ImportError: No module named requests

解决办法：

```
pip install requests
```

#### WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer

解决办法：

```
export DISPLAY="<客户端IP>:0.0"
```

#### 安装虚拟机报错

报错如下：

```
internal error: process exited while connecting to monitor: libvirt:  error : cannot execute binary /bin/qemu-system-x86_64: Permission denied
```

解决办法：

```
setenforce 0
```

#### 输入virsh version命令报错failed to get the hypervisor version

报错如下：

解决办法：

源码编译时指定的qemu安装路径在“/usr/local/qemu”下面，virsh命令寻找模拟器是在“/usr/bin”目录下找的，在“/usr/bin”目录下创建qemu-system-x86_64二进制文件的软链接即可。

```
ln -s /usr/local/qemu/bin/qemu-system-x86_64 /usr/bin/qemu-system-x86_64
```

#### Virt-install命令报错Failed to connect socket to '/var/run/libvirt/virtlogd-sock': Connection refused

报错如下：

```
Failed to connect socket to '/var/run/libvirt/virtlogd-sock': Connection refused
```

解决办法：

```
systemctl status virtlogd
```

#### Virsh console 卡住

执行命令后，界面卡住没有响应，现象如下：

解决办法，在虚拟机内执行：

```
echo "ttyS0" >> /etc/securettygrubby --update-kernel=ALL --args="console=ttyS0" # 更新内核参数reboot
```

本页内容
