解决虚拟机创建快照后删除报错,重启该虚拟机后删除成功的问题

2023-11-05

问题描述:
在ovirt中,创建快照后删除该快照失败,只有重启虚拟机后该快照才能删除

日志中均出现如下报错:

2018-02-19 01:51:45,792+0800 ERROR (jsonrpc/7) [virt.vm] (vmId=’a5935784-6d8a-4a4e-ab18-bb8c9b8cce9b’) Live merge failed (job: 7b217072-2149-4439-ab28-4a8bc52ada3d) (vm:4918)
Traceback (most recent call last):
File “/usr/share/vdsm/virt/vm.py”, line 4914, in merge
flags)
File “/usr/lib/python2.7/dist-packages/vdsm/virt/virdomain.py”, line 69, in f
ret = attr(*args, **kwargs)
File “/usr/lib/python2.7/dist-packages/vdsm/libvirtconnection.py”, line 123, in wrapper
ret = f(*args, **kwargs)
File “/usr/lib/python2.7/dist-packages/vdsm/utils.py”, line 926, in wrapper
return func(inst, *args, **kwargs)
File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 674, in blockCommit
if ret == -1: raise libvirtError (‘virDomainBlockCommit() failed’, dom=self)
libvirtError: Requested operation is not valid: can’t keep relative backing relationship

问题使用libvirt virsh复现步骤:

$ cat build.sh 
#!/bin/bash

sudo qemu-img create -f qcow2 base.qcow2 10G
#sudo qemu-img create -f qcow2 sn1.qcow2 -o backing_file=base.qcow2 10G

sudo virsh define /opt/libvirt/vm1.xml 
sudo virsh start vm1

sudo virsh domblklist vm1

sudo virsh snapshot-create-as --domain vm1 snap1 \
    --diskspec vda,file=/opt/libvirt/sn1.qcow2 \
    --disk-only --atomic --no-metadata

sudo virsh snapshot-create-as --domain vm1 snap2 \
    --diskspec vda,file=/opt/libvirt/sn2.qcow2 \
    --disk-only --atomic --no-metadata

sudo virsh snapshot-create-as --domain vm1 snap3 \
    --diskspec vda,file=/opt/libvirt/sn3.qcow2 \
    --disk-only --atomic --no-metadata

sudo virsh domblklist vm1

sudo qemu-img info --backing-chain \
     /opt/libvirt/sn3.qcow2

sudo virsh domblklist vm1

#sudo virsh blockcommit vm1 vda --verbose --pivot --active

echo "-------merge"

sudo virsh blockcommit --domain vm1 vda --base /opt/libvirt/sn1.qcow2  \
     --top /opt/libvirt/sn2.qcow2 --keep-relative --wait --verbose

sudo virsh domblklist vm1

sudo qemu-img info --backing-chain /opt/libvirt/vm1.xml


$ cat unbuild.sh 
#!/bin/bash

sudo virsh destroy vm1
sudo virsh undefine vm1
sudo rm ./*.qcow2


$ cat vm1.xml 
<domain type='kvm'>  //如果是Xen,则type=‘xen’
    <name>vm1</name> //虚拟机名称,同一物理机唯一
    <uuid>fd3535db-2558-43e9-b067-314f48211343</uuid>  //同一物理机唯一,可用uuidgen生成
    <memory>524288</memory>
    <currentMemory>524288</currentMemory>  //memory这两个值最好设成一样
    <vcpu>2</vcpu>            //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l 
    <os>
        <type arch='x86_64' machine='pc-i440fx-vivid'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
        <boot dev='hd'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动
        <bootmenu enable='yes'/>  //表示启动按F12进入启动菜单
    </os>
    <features>
        <acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口
        <apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器
        <pae/>   //Physical Address Extension,物理地址扩展
    </features>
    <clock offset='localtime'/>  //虚拟机时钟设置,这里表示本地本机时间
    <on_poweroff>destroy</on_poweroff>  //突发事件动作
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>   //设备配置
        <emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
        <disk type='file' device='disk'> //硬盘
            <driver name='qemu' type='raw'/>
            <source file='/opt/libvirt/base.qcow2'/>
            <target dev='vda' bus='virtio'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> //域、总线、槽、功能号,slot值同一虚拟机上唯一
        </disk>
        <disk type='file' device='cdrom'>//光盘
            <driver name='qemu' type='raw'/>
            <source file='/home/pencc/图片/Linx-Node-201711-amd64.iso'/>
            <target dev='hdc' bus='ide'/>
            <readonly/>
        </disk>
        <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'>  //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
            <listen type='address' address='0.0.0.0'/>
        </graphics>
  </devices>
</domain>

通过gdb调试排查,发现问题在于创建快照后该快照结构体中的relPath为null,重启虚拟机后能得到该relPath,说明只有重启后重构快照链时才会赋值,而真实的relPath存储在dd->disk->src->relPath中,故在创建快照链流程中的qemuDomainSnapshotDiskDataCollect中添加VIR_STEAL_PTR即可。

修改后实测多次均ok。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决虚拟机创建快照后删除报错,重启该虚拟机后删除成功的问题 的相关文章

  • 正常关闭电源失效,强行关闭虚拟机电源

    三种方法 可以任选一种执行操作 1 后台开启Troubleshooting options 使用Alt F1登录 或者使用SSH工具登录 查看进程 ps grep vmx more 如果知道虚拟机名可以直接grep vmname 杀死进程
  • docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp

    Docker容器做端口映射报错 docker Error response from daemon driver failed programming external connectivity on endpoint lamp3 46b7
  • ESXI安装Mikrotik RouterOS(ROS)软路由部署指南(附授权镜像下载)

    一 什么是RouterOS ROS ROS优点与缺点 RouterOS 简称ROS 是一种路由操作系统 基于Linux开发 兼容x86 PC的路由软件 是目前功能较强 应用较广的软路由系统 适用于中小企事业单位 网吧 宾馆和运营商 通过该软
  • oVirt engine安装手册

    oVirt Engine安装需求 硬件需求 Resource Minimum Recommended CPU 双核CPU 四核或者多个双核CPU 内存 4G内存 不安装warehouse并且内存不被其他程序使用 16G 硬盘 25G可用空间
  • 10 KVM虚拟机配置-虚拟CPU和虚拟内存

    文章目录 10 KVM虚拟机配置 虚拟CPU和虚拟内存 10 1 概述 10 2 元素介绍 10 3 配置示例 10 KVM虚拟机配置 虚拟CPU和虚拟内存 10 1 概述 本节介绍虚拟CPU和虚拟内存的常用配置 10 2 元素介绍 vcp
  • 52 最佳实践-安全最佳实践-sVirt保护

    文章目录 52 最佳实践 安全最佳实践 sVirt保护 52 1 概述 52 2 开启sVirt保护 52 2 1 开启主机的SELinux 52 2 2 创建开启sVirt功能的虚拟机 52 2 3 确认sVirt开启成功 52 最佳实践
  • QEMU虚拟机中如何安装Virtio驱动

    在计算机虚拟化中 Virtio是一种半虚拟化解决方案 即需要对Guest OS进行一定的修改 安装相应的驱动程序 能够对虚拟机的I O性能进行大幅的提升 在QEMU KVM的环境中 Virtio的后端驱动由QEMU程序提供 不需要额外的安装
  • WebVirtMgr新建KVM虚拟机

    WebVirtMgr新建KVM虚拟机 一 登录WebVirtMgr 二 KVM节点配置 1 链接qemu相关命令 2 删除宿主机容器的默认网络 三 创建网络 1 关闭NetworkManager 2 创建网桥 3 使用命令行创建网桥 4 创
  • CPU虚拟化技术

    基本概念 物理CPU数量 实际服务器插槽上的CPU个数 核 一块CPU上面能处理数据的芯片组的数量 超线程 在一个实体芯片组中提供两个逻辑线程 逻辑CPU数量 物理CPU数量 核 超线程 若支持超线程 该值为2 vCPU 虚机分配的CPU
  • virtio代码分析(一)-qemu部分

    virtio内容众多 代码分布于qemu linux dpdk等中 而且分为frontend和backend 可以运行于userspace也可以运行于kernelspace 极其难以理解 不看代码只看原理性文档往往流于表面 只有真正看懂了代
  • VMware ESXi网络配置

    目录 一 ESXi网络配置方法 二 虚拟机网络配置方法 一 ESXi网络配置方法 1 搭建完成ESXi平台后 即可为它设置系统IP 如下图 在此界面按F2 输入用户名密码后进入配置界面 2 左侧菜单栏可以看到 Configure Manag
  • Linux——Docker网络通信

    文档中使用的镜像不同 自行选择镜像 Docker Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务 一 Dockerhost单主机网络 Docker网络从覆盖范围可分为单个host上的容器和跨多个host的网络 DO
  • VMware Workstation无法提供该虚拟机所需的所有图形功能

    报错信息 VMware Workstation无法提供该虚拟机所需的所有图形功能 在该虚拟机引导后 图形硬件 图形驱动程序或Vware软件版本可能已发生变化 该虚拟机将继续运行 但在关闭该虚拟机之前 某些图形操作可能会出现不可预见的行为 原
  • libvirt介绍和使用

    libvirt介绍和使用 导读 why what libvirt具体介绍 API 剖析 driver 剖析 如何使用libvirt why what 实现一朵可运行 可运维的云 需要完整的实现三层 VIM层 VNFM层 NFVO层 其中实现
  • 虚拟化技术-KVM的安装及管理

    1 宿主机环境准备 KVM需要宿主机CPU必须支持虚拟化功能 因此如果是在vmware workstation上使用虚拟机做宿主机 那么必须要在虚拟机配置界面的处理器选项中开启虚拟机化功能 1 CPU开启虚拟化 硬件 处理器 2核 勾选虚拟
  • 问题:your cpu does not support kvm extensions

    问题 我的BIOS开启了CPU虚拟化 但是虚拟机仍然显示your cpu does not support kvm extensions 解决 1 关闭虚拟机 2 虚拟机上单击右键 设置 3 选择下图选项 4 重启虚拟机 问题解决
  • 57 KVM工具使用指南-制作 LibcarePlus 热补丁

    文章目录 57 KVM工具使用指南 制作 LibcarePlus 热补丁 57 1 概述 57 2 手动制作 57 3 通过脚本制作 57 KVM工具使用指南 制作 LibcarePlus 热补丁 57 1 概述 LibcarePlus 支
  • Windows Server 2019 会话远程桌面-快速部署(RemoteApp)

    目录 一 实验要求 二 搭建远程桌面服务RDS 三 需要软件安装 1 安装Firefox 浏览器 2 安装一款视频播放器 3 安装WPS office 套件 四 发布应用 1 发布Firefox 浏览器 2 发布一款视频播放器 3 发布WP
  • [转]漫谈虚拟化-计算虚拟化中的 I/O 虚拟化

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 今天 咱们继续
  • vmware fusion个人版

    个人免费版虚拟机 不要访问中文网站 以下链接都是英文网站 如果之前将该网站的国家设置成中国 请将其设置回美国后再打开链接 首先注册VMware Fusion Player 账号 并激活 https my vmware com web vmw

随机推荐

  • Vue全局注册组件的几种方式

    Vue全局注册组件的几种方式 1 extend vue js 代码 var com Vue extend template h1 这是第一种方式 h1 Vue component MyComponent com 此时的组件名为 MyComp
  • MySQL数据备份和恢复

    MySQL数据备份和恢复 数据备份 mysqldump是MySQL数据库备份工具 可以备份MySQL数据库中的数据和结构 生成 sql文件 方便数据的迁移和恢复 使用mysqldump工具前一定要配置环境变量 打开开始菜单 搜索 环境变量
  • 谷歌gn编译文件的使用简介

    Gn是什么 它是Google用来维护chromium项目的编译工具 现在相关的开源项目都基于gn来进行编译管理 目前一些大型系统的都会使用gn 例如谷歌 鸿蒙 Gn就是一个构建脚本生成器 是之前gyp的升级版本 并且gn是基于c 编写 效率
  • Python论文绘图利器seaborn.lineplot

    Python论文绘图利器seaborn lineplot 提示 前言 Python论文绘图利器seaborn lineplot 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 Python论文绘图利器seabor
  • Java中的equals()方法

    equals 在哪里 首先我们知道Java中Object类是所有类的父类 它里面定义了equals 方法 public boolean equals Object obj return this obj 可以看到是使用 来进行比较的 那么
  • 20 个常用的 CSS 技巧

    Sandy 推荐 高级工程师 游戏开发 下面这几个CSS技巧你可能不知道 1 彩色照片变黑白 2 所有元素垂直居中 3 禁用鼠标 4 模糊文字 小编学完能量满满的 觉得对CSS又充满了爱 你也来看看 原文链接 http caibaojian
  • sql 关联了2张表的 update 语句(转)

    转自 SQL Update 使用一个表的数据更新另一张表 update 关联两个表 基本上 select 能支持的关联和子查询操作 都能在 update 语句中使用 在 where 条件中使用子查询 update a set a age 1
  • Spark WARN cluster.ClusterScheduler: Initial job has not accepted any resources;check your cluster

    当我在Spark集群模式执行以下命令时 root debian master home hadoop spark 0 8 0 incubating bin hadoop1 run example org apache spark examp
  • DBA成长随笔---Oracle 11g,性能优化之等待事件

    目录 等待的定位方式 等待事件分类 观察等待事件的视图 常见等待事件 等待事件主要可以分为两类 即空闲 IDLE 等待事件和非空闲 NON IDLE 等待事件 空闲等待事件 是指Oracle正等待某种工作 比如用sqlplus登录之后 但没
  • 远程桌面连接出现了内部错误怎么解决?

    远程桌面连接是一种非常方便的工具 可以让用户从远程访问其他计算机的桌面界面 但是 有时候在连接远程桌面时会出现内部错误 导致无法连接或者连接后无法正常使用 在本文中 我们将会讨论远程桌面连接出现内部错误的原因和解决方法 1 确认网络连接 在
  • 2023牛客暑期多校第三场部分题解

    索引 A B D E G H I J A 直接输出两个数的差即可 再判一下无解的情况 B 其实思路还挺顺的 首先拿的牌肯定是一段增一段减一段增一段减 的序列 并且 gt n gt n gt n 的开头和 n
  • React中使用antd DatePicker限制日期选择

    场景 React中使用antd DatePicker限制日期选择 有下面一些场景 1 今天之前的日期不可选择 不包括今天 disabledDate current gt let current current format YYYY MM
  • 多标签学习之白话版

    简单的机器学习 就是把人类的学习方式教给机器 斯 cdot 沃索迪 1 任务的提出 单标签学习 假设你不知道河豚长什么样子 给你 1000 张照片 并标注哪些有河豚 再给你 100 张新的照片 你能判断哪些照片里面有河豚吗 本例中 从 10
  • charles介绍及代理设置

    一 介绍 你别说 这个真挺好看 有的叫花瓶 有的叫青花瓷 二 说明 安装charles后 如果不是正版 需要破解 破解码去百度查一个即可 否则试用期过后 使用半小时后就自动关闭了 需要重新打开呢 破解码输入路径 help register
  • ElasticSearch系列18:Mapping 设计指南

    点击上方 方才编程 即可关注我 本文导读 ElasticSearch 的 mapping 该如何设计 才能保证检索的高效 想要回答这个问题 就需要全面系统地掌握 mapping 各种参数的含义以及其适用的场景 ps 本文基于ElasticS
  • SQL 解析在 CloudQuery 中的应用

    hi 好久不见 今天将为大家带来一期干货满满的技术分享 作为一款数据库管控平台 大家通常认为 CloudQuery 的核心能力是对平台的管控 包括统一入口管理 权限体系 审计分析等 但实际上 CloudQuery 的核心技术点之一在于其独特
  • 二叉树-(将有序数组转换成二叉搜索树)

    coding utf 8 Author leadingme Mail leadingme qq com MyWebsite leadingme top 将有序数组转换成二叉搜索树 算法要求 将一个按照升序排序的有序数组转换为一颗高度平衡的二
  • 信号编程之signal函数

    作用1 站在应用程序的角度 注册一个信号处理函数 作用2 忽略信号 设置信号默认处理 信号的安装和恢复 相关宏定义 typedef void sighandler t int define SIG ERR sighandler t 1 de
  • 未找到与约束。。。匹配的导出

    问题截图 解决办法 就是微软官方的一个安装补丁KB2781514 来弥补这两个补丁的 http www microsoft com zh CN download details aspx id 36020 下载安装即可解决问题
  • 解决虚拟机创建快照后删除报错,重启该虚拟机后删除成功的问题

    问题描述 在ovirt中 创建快照后删除该快照失败 只有重启虚拟机后该快照才能删除 日志中均出现如下报错 2018 02 19 01 51 45 792 0800 ERROR jsonrpc 7 virt vm vmId a5935784