CAS虚拟机删除快照失败

2026-03-23发表
  • 0收藏
钟俊 六段

描述

问题描述:

CAS虚拟机删除快照失败。

解决方法:

参考官网文档《H3C CAS云计算管理平台 虚拟机快照、迁移、备份常见问题与排查手册》


3.2.1  删除虚拟机外部快照失败

1. 问题现象

删除虚拟机外部快照时失败,无法正常删除。

2. 问题原因

可能导致此问题的原因较多,如下:

·     可能原因一:虚拟机可能已经有一个blockjob的任务。

·     可能原因二:在删除过程中,可能出现了网络闪断。

·     可能原因三:虚拟机镜像有损坏。

·     可能原因四:虚拟机xml文件中backingStor记录过长。

·     可能原因五:因为老版本存在虚拟机有外部快照时,迁移存储时触发问题,引起libvirt中镜像链和实际镜像链不一致的情况。

3. 可能原因一解决方法

查看libvirt日志/var/log/libvirt/libvirtd.log,通常在相应时间段有日志”disk "vdx" already in active block job”

执行virsh qemu-monitor-command vmname --pretty "{"execute":"query-block-jobs"}"命令,查看正在执行的有关任务。

说明

在主机后台执行virsh list --all命令,查看具体虚拟机名称或者id

 

根据上述命令的回显查看该blockjob是什么任务。可以等待该任务完成,或者确定是否能取消该任务,如果可以则执行virsh blockjob --domain vmname --abort vdx命令,取消任务。

4. 可能原因二解决方法

网络闪断会导致前台对删除快照任务的管理,出现删除失败。

·     排查方法:在虚拟机所在CVK主机使用后台执行ps -ef | grep disk_commit | grep vmname命令查找该任务查看是否有一个python脚本在运行,有则说明后台任务还在运行

·     问题解决方法:可以等待后台任务进行。或者执行virsh qemu-monitor-command vmname "{"execute":"block-job-cancel","arguments":{"device":"drive-virtio-disk0", "force":true}}"命令取消掉该任务。‘drive-virtio-disk0’可以通过上面的query-block-jobs命令进行查询。取消任务时如果提示获取不了lock相关错误,可以多次尝试。

5. 可能原因三解决方法

·     排查方法:对basetop镜像执行qemu-img check /path/top命令查看是否存在error

·     问题解决方法:对于存在error的镜像关闭虚拟机,对虚拟机进行备份,然后执行qemu-img check -r all /path/top命令修复,待修复完成后再次尝试删除虚拟机外部快照。

6. 可能原因四解决方法

·     排查方法:在删除快照失败时,在libvirtd.log中查找日志是否有“Excessive depth in document: 256 use XML_PARSE_HUGE option”内容。如有则表示存在xml文件中backingStor记录过长的问题。

·     问题解决方法:该问题已出相应补丁,请参考https://zhiliao.h3c.com/Theme/details/222484进行处理。

7. 可能原因五解决方法

·     排查方法:在libvirtd.log中查找日志是否有“qemu block name "/path1" doesn"t match expected "/path2 "”的内容。再执行virsh qemu-monitor-command vmname--pretty "{ "execute": "query-block" }"命令和qemu-img info –backing-chain /top命令对比两个信息的镜像链是否一致。确认libvirt中镜像链和实际镜像链是否一致。

·     问题解决方法:关闭虚拟机后再重新启动,使libvirt更新镜像链信息。

3.2.2  在线删除外部快照时,任务台进度卡在99%

1. 问题现象

用户在在线删除外部快照时,任务进度在任务管理台停留在99%,长时间无变化,删除操作无法完成。

2. 问题原因

可能的原因包括:

·     前端下发删除快照任务后,由于监控任务的通道异常,导致系统无法实时获取任务进度,进而表现为进度卡在99%

·     存储性能较低或快照文件占用空间过大,导致后台快照删除过程耗时较长,任务迟迟未能完成。

·     若删除的是虚拟机的顶层快照,且近期有大量新增数据、数据分布随机且IOPS较高,易产生大量脏数据,加重存储负载,从而影响快照删除进度,导致任务长时间停留在99%

3. 排查方法

(1)     在虚拟机所在主机执行virsh domblklist $vmname命令,查看虚拟机所有磁盘信息。随后使用virsh blockjob --info $vmname vdx命令,判断是否有磁盘正在执行任务。如果所有磁盘均无任务,初步怀疑为前台任务残留。此时可进一步查阅 `disk_commit.log` 日志,搜索对应虚拟机快照删除过程是否出现 Commit top xxx Commit complete 字段,以确认commit任务是否已完成。

(2)     如发现有后台blockjob任务,建议使用virsh qemu-monitor-command VM-1 --hmp --cmd info block-jobs命令获取具体任务执行信息。根据命令回显,判断commit是否仍在进行。例如,若回显中的completed字段和of字段数据持续变化,说明commit任务仍在处理中;若长时间未完成,可能是由于脏数据产生速率高于commit处理速率,导致任务无法顺利结束。

 

¡     Type commit:表示当前为commit类型的任务。

¡     Device drive-virtio-disk1:对应虚拟机磁盘设备名称。

¡     Completed 217088000:已完成的commit字节数。

¡     of 6356205568:总需commit的数据量(字节)。

¡     speed limit 31457280:任务处理限速(字节)。

4. 解决方法

(1)     如确认是前台删除任务残留,可通过重启Tomcat服务进行恢复。重启前请务必确保任务管理台无其他正在进行的任务,以免影响其他任务的正常执行。

(2)     若删除任务仍在持续执行,可尝试使用virsh blockjob $vmname $vdx --bandwidth xx命令,适当提升任务的带宽限速值,加快快照删除进度,并持续观察任务完成情况。

(3)     如需立即终止删除任务,可执行以下命令强制取消正在进行的快照删除任务:bash virsh qemu-monitor-command $vmname "{"execute":"block-job-cancel","arguments":{"device":"drive-virtio-disk0", "force":true}}"。其中,`drive-virtio-disk0` 可通过前述的info block-jobs命令查询获得。请注意,强制取消快照删除任务可能导致虚拟机磁盘快照链不一致,并且被取消的快照无法恢复。此操作风险较高,除非特殊情况,否则不建议使用。

3.2.3  离线删除外部快照时,任务台进度卡在99%

1. 问题现象

在进行离线删除外部快照操作时,任务管理台显示进度卡在99%,长时间无变化,快照删除任务未能及时完成。

2. 问题原因

可能的原因包括:

·     删除快照任务下发后,由于监控任务通道异常,系统无法及时获取任务的实际进度,进而导致进度卡在99%

·     存储性能较低或快照文件占用空间较大,后台处理速度较慢,导致快照删除任务长时间无法完成。

3. 排查方法

(1)     在虚拟机所在的CVK主机上,使用以下命令查找该虚拟机的快照删除任务是否在后台运行:bash ps -ef | grep disk_commit | grep vmname。如果未查询到相关任务,初步判断为前台任务残留。此时可进一步查看 `disk_commit.log` 日志,检索是否存在“Commit top xxx Commit complete”字段,以确认对应的commit任务是否已经完成。

(2)     通过以下命令查找是否存在离线快照删除任务:bash ps -elf | grep "qemu-img commit"可结合virsh domblklist vmname命令显示的磁盘路径,确认 `qemu-img commit` 命令是否为当前虚拟机的快照删除进程,并记录对应进程的PID(如图示658340)。

 

(3)     使用qemu-img info命令查看commit路径下快照文件的信息,获取快照文件的实际空间大小。例如,可关注 `disk_size` 字段(如 5.14 GiB)。

 

(4)     通过iotop -P命令,监控对应快照删除进程的 “DISK READ” 速度。此速度可视为快照实际的删除速度。结合前面获取的快照空间大小和当前读写速度,可以初步评估快照删除任务的总耗时,并根据任务启动时间大致推算任务预计完成时间。

 

4. 解决方法

(1)     如确认是前台快照删除任务残留,可通过重启Tomcat服务进行恢复。重启前请务必检查任务管理台,确保没有其他正在进行的任务,以免影响其他任务的正常执行。

(2)     如确认后台快照删除任务仍在执行,可暂停其他非必要的存储操作,耐心等待后台删除任务完成。如果确需立即终止删除任务,可通过以下命令强制停止对应的 `qemu-img commit` 进程:bash kill -9 <进程PID>。其中,`<进程PID>` 为通过排查方法获取的快照删除进程号。需要注意,强制终止进程可能导致虚拟机磁盘快照链不一致,且被取消的快照无法恢复,存在数据丢失或一致性风险,除非特殊情况,不建议采用此方法。

3.3  通过后台命令查看删除虚拟机快照的进度

CAS前台执行删除虚拟机快照时,显示的进度可能不准确。如需获取更精确的进度信息,可通过底层命令进行查看。目前仅支持查询在线删除虚拟机外部快照的进度。

(1)     通过SSH工具登录主机后台,执行命令virsh qemu-monitor-command fiotest --pretty "{"execute":"query-block-jobs"}"查看虚拟机block jobs状态。

说明

·     offset数值接近len数值时,表示脏数据即将全部commit,即将完成删除快照。

·     offset数值等于len数值且管理平台界面仍还在删除快照:说明原脏数据已处理完,但当前虚拟机业务负载较高,新的脏数据产生量较大,无法在指定周期内一次性处理虚拟机新产生的脏数据,导致无法立即切换至base镜像。待脏数据产生减少后,删除即可完成。

 

(2)     执行命令virsh qemu-monitor-command fiotest --hmp info block查看虚拟机磁盘信息。

说明

drive-virtio-disk0对应/vms/images/fiotest_inc_1为虚拟机当前top镜像,通过此信息可确认目标磁盘,表示该磁盘镜像正在进行快照删除操作。

 

提出建议

    +

亲~登录后才可以操作哦!

确定

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作