在两台宿主KVM服务器之间冷迁移虚拟机

发布于:2025-07-11 ⋅ 阅读:(23) ⋅ 点赞:(0)

前面步骤,后面操作日志

在KVM环境下进行冷迁移(虚拟机关机状态迁移)的步骤如下,整个过程需确保虚拟机处于完全关闭状态:

详细步骤

_1. 关闭虚拟机(源宿主机操作)

# 检查虚拟机状态

virsh list --all

# 关闭虚拟机(若未关机)

virsh shutdown <虚拟机名称> # 优雅关机

# 或强制关机(如果shutdown无效)

virsh destroy <虚拟机名称> # 强制断电

_2. 备份虚拟机配置文件(源宿主机操作)

# 导出虚拟机XML配置

virsh dumpxml <虚拟机名称> > /path/to/backup/<虚拟机名称>.xml

_3. 复制虚拟机磁盘文件到目标宿主机

确认磁盘路径(从XML配置或以下命令获取):

virsh domblklist <虚拟机名称>

使用scp或rsync复制磁盘文件(以rsync为例,保留权限):

# 源宿主机执行(复制到目标宿主机的存储目录)

rsync -avP /var/lib/libvirt/images/<虚拟机磁盘>.qcow2 user@目标主机IP:/var/lib/libvirt/images/

注意:替换/var/lib/libvirt/images/为实际存储路径(如LVM卷、NFS等)。

_4. 复制配置文件到目标宿主机

scp /path/to/backup/<虚拟机名称>.xml user@目标主机IP:~/

_5. 在目标宿主机上注册虚拟机

bash

# 定义虚拟机

virsh define ~/<虚拟机名称>.xml

# 验证是否添加成功

virsh list --all

_6. 调整配置文件(如有必要)

修改磁盘路径(如果目标主机存储路径不同):

bash

virsh edit <虚拟机名称>

找到<disk>段,修正source file路径:

xml

<disk type='file' device='disk'>

<source file='/correct/path/to/<虚拟机磁盘>.qcow2'/>

...

</disk>

检查网络配置(如网桥名称不同):

修改<interface>段中的source bridge值(例如从br0改为br1)。

_7. 启动虚拟机(目标宿主机操作)

virsh start <虚拟机名称>

_8. 验证迁移

检查虚拟机状态:

virsh console <虚拟机名称> # 连接控制台

验证网络、服务是否正常。

_9. 清理源宿主机(迁移成功后)

# 注销虚拟机(保留磁盘文件则跳过删除)

virsh undefine <虚拟机名称> # 移除配置

# 删除磁盘文件(确认迁移成功后再执行)

rm /var/lib/libvirt/images/<虚拟机磁盘>.qcow2

关键注意事项

磁盘路径一致性

确保目标宿主机的存储路径与XML配置中的路径一致(或修改XML),否则启动失败。

网络配置

若源/目标宿主机使用不同名称的网桥,需在XML中更新<interface>配置。

存储类型兼容性

共享存储(如NFS):无需复制磁盘文件,直接修改XML指向共享路径。

本地存储:必须复制磁盘文件(如上述步骤)。

虚拟机名称冲突

目标宿主机上不能存在同名虚拟机,否则define会失败。

权限问题

确保目标宿主机的libvirt用户(通常为qemu或libvirt-qemu)有权访问磁盘文件:

chown root:libvirt-qemu /var/lib/libvirt/images/<磁盘文件>.qcow2

[root@cloud42 ~]# virsh list --all

Id Name State

---------------------------------------------

- worker3.prod.opencloud.com shut off

[root@cloud42 ~]# cd /

[root@cloud42 /]# ls

bin boot dev etc home iso lib lib64 media mnt opt proc root run sbin software srv sys tmp usr var work work-20250220.tar

[root@cloud42 /]# cd work

[root@cloud42 work]# mkdir temp

[root@cloud42 work]# cd temp/

[root@cloud42 temp]# ls

[root@cloud42 temp]# virsh dumpxml worker3.prod.opencloud.com /work/temp/worker3.xml

error: unexpected data '/work/temp/worker3.xml'

[root@cloud42 temp]# virsh dumpxml worker3.prod.opencloud.com > /work/temp/worker3.xml

[root@cloud42 temp]# ls

worker3.xml

[root@cloud42 temp]# virsh domblklist worker3.prod.opencloud.com

Target Source

--------------------------------------------------------------------

vda /var/lib/libvirt/images/worker3.prod.opencloud.com.qcow2

sda /software/rhcos-4.17.0-x86_64-live.x86_64.iso

[root@cloud42 temp]# ls

worker3.xml

[root@cloud42 temp]# rm -f worker3.xml

[root@cloud42 temp]# ls

[root@cloud42 temp]# virsh dumpxml worker3.prod.opencloud.com > /work/temp/worker3.xml

[root@cloud42 temp]# ls

worker3.xml

[root@cloud42 temp]# virsh domblklist worker3.prod.opencloud.com

Target Source

--------------------------------------------------------------------

vda /var/lib/libvirt/images/worker3.prod.opencloud.com.qcow2

[root@cloud42 temp]# rsync -avP /var/lib/libvirt/images/worker3.prod.opencloud.com.qcow2 root@10.11.13.51:/var/lib/libvirt/images

root@10.11.13.51's password:

sending incremental file list

worker3.prod.opencloud.com.qcow2

643,304,587,264 100% 111.85MB/s 1:31:25 (xfr#1, to-chk=0/1)

sent 643,461,644,161 bytes received 35 bytes 116,961,127.73 bytes/sec

total size is 643,304,587,264 speedup is 1.00

[root@cloud42 temp]# pwd

/work/temp

[root@cloud42 temp]# scp /work/temp/worker3.xml root@10.11.13.51:~/

root@10.11.13.51's password:

worker3.xml 100% 5539 645.0KB/s 00:00

[root@cloud42 temp]#

在目标机器上的操作

[root@cloud51 5.1.2]# cd /root

[root@cloud51 ~]# ls

anaconda-ks.cfg worker3.xml

[root@cloud51 ~]# virsh define ~/worker3.xml

Domain 'worker3.prod.opencloud.com' defined from /root/worker3.xml

[root@cloud51 ~]# virsh list --all

Id Name State

----------------------------------------------

- worker3.prod.opencloud.com shut off

[root@cloud51 ~]#

打开web console,可以看到迁移的虚拟机。


网站公告

今日签到

点亮在社区的每一天
去签到