VM 迁移至其他存储池得时候,CAS报错: 修正磁盘与基础镜像的关系失败。
检查qemu日志报错:/var/log/libvirt/qemu/
qcow2: Preventing invalid write on metadata (overlaps with snapshot table); image marked as corrupt.
QCOW2:防止对元数据的无效写入(与快照表重叠)
这是什么意思?
(0)
最佳答案
虚拟机在线跨存储池迁移的基本流程如下:
a. 创建临时的磁盘快照,此时虚机的磁盘文件会临时增加一级(3级变4级,或者1级变2级)。以原虚机磁盘是3级为例,执行完这一步之后,虚机的磁盘关系如下,top_tmp(临时磁盘快照文件,在线跨存储池迁移时虚拟机磁盘文件会临时使用)->top(磁盘文件,第3级镜像文件)->base1(第2级镜像文件)->base0(第1级基本镜像文件)。
b. 将上一步中的下面3级磁盘文件(top, base1, base0)拷贝的目的存储池。c. 在线将top_tmp rebase 到目的存储池的top。
d. 在线将top_tmp的内容commit到目的存储池的top中。
e. 修正虚拟机的磁盘关系,使用目的存储池上的top。
f. 清理不需要的磁盘文件top_tmp,完成虚拟机在线跨存储池迁移。
然而,跨存储池在线迁移虚拟机时,如果虚拟机状态突然从运行状态变为关闭状态,那么在执行步骤c、d、e时会由于虚拟机状态变化而无法继续进行,从而造成迁移失败。
那么,我们来看一个实际例子,迁移前虚机的磁盘关系如下:
第3级镜像文件top:win2008R2x64,第2级镜像文件base1:win2008R2x64_base_1,第1级镜像文件base0:win2008R2x64_base_0。
通过qemu-img info命令可以查看到磁盘关系如下:
root@HZ-CAS02-CVK11:/vms/images# qemu-img info win2008R2x64
image: win2008R2x64
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 480M
cluster_size: 2097152
backing file: /vms/images/win2008R2x64_base_1
Format specific information:
compat: 1.1
lazy refcounts: false
root@HZ-CAS02-CVK11:/vms/images# qemu-img info win2008R2x64_base_1
image: win2008R2x64_base_1
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 6.0M
cluster_size: 2097152
backing file: /vms/images/win2008R2x64_base_0
Format specific information:
compat: 1.1
lazy refcounts: false
root@HZ-CAS02-CVK11:/vms/images# qemu-img info win2008R2x64_base_0
image: win2008R2x64_base_0
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 7.1G
cluster_size: 2097152
Format specific information:
compat: 0.10
跨存储池在线迁移虚拟机时,当执行完上述迁移步骤a后,出现磁盘快照文件top_tmp:win2008R2x64.1459322440759,其基础镜像文件backing file为原虚拟机第3级磁盘镜像文件,即top文件:win2008R2x64。
root@HZ-CAS02-CVK11:/vms/images# qemu-img info win2008R2x64.1459322440759
image: win2008R2x64.1459322440759
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 60M
cluster_size: 2097152
backing file: /vms/images/win2008R2x64
backing file format: qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
若迁移过程中虚拟机状态由运行状态变为关闭状态(虚拟机内部操作系统进行了关闭系统操作),后续迁移步骤c、d、e无法进行,并列为相关迁移失败原因,如下截图:
此时,前台查看虚拟机配置,其磁盘文件会使用步骤a创建的磁盘快照文件,即win2008R2x64.1459322440759。
解决办法
参考上文的虚机迁移步骤,可以看出,当出现问题后,虚拟机的镜像变成了4级,其中变化的内容全部会写到临时的top_tmp中。所以,恢复的主要工作就是将这部分内容合并到top(原虚拟机磁盘镜像文件)中,同时修改虚拟机的配置文件(虚拟机名称.xml)调用正确的磁盘镜像文件。
具体步骤如下(以上述虚拟机win2008R2x64为例):
1、 正常关闭虚拟机操作系统。
2、 备份相关文件。
cp top top.bak
示例:cp win2008R2x64 win2008R2x64.bak
cp top_tmp top_tmp.bak
示例:cp win2008R2x64.1459322440759 win2008R2x64.1459322440759.bak
3、 执行数据提交操作,将top_tmp中的数据提交至其baking file文件top中。
qemu-img commit top_tmp
示例:qemu-img commit win2008R2x64.1459322440759
4、 在cas界面上,删除对应的虚机存储设备磁盘top_tmp(即本案例中的win2008R2x64.1459322440759),再使用top文件(即本案例中的win2008R2x64)来创建新的存储设备(注意磁盘类型需要与之前保持一致)。
5、 启动虚机。
6、 验证无误后,删除之前备份的磁盘文件(top.bak、top_tmp.bak,即本案例中的win2008R2x64.bak、win2008R2x64.1459322440759.bak)。
(0)
你好,在线跨存储池迁移的时候,都会创建top_tmp临时磁盘快照文件 吗? 跨主机迁移非存储池也会创建top_tmp临时磁盘快照文件 ? 迁移创建op_tmp临时磁盘快照文件 是必要条件吗
(0)
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论