CAS虚拟机删除快照失败。
参考官网文档《H3C CAS云计算管理平台 虚拟机快照、迁移、备份常见问题与排查手册》
删除虚拟机外部快照时失败,无法正常删除。
可能导致此问题的原因较多,如下:
· 可能原因一:虚拟机可能已经有一个blockjob的任务。
· 可能原因二:在删除过程中,可能出现了网络闪断。
· 可能原因三:虚拟机镜像有损坏。
· 可能原因四:虚拟机xml文件中backingStor记录过长。
· 可能原因五:因为老版本存在虚拟机有外部快照时,迁移存储时触发问题,引起libvirt中镜像链和实际镜像链不一致的情况。
查看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命令,取消任务。
网络闪断会导致前台对删除快照任务的管理,出现删除失败。
· 排查方法:在虚拟机所在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相关错误,可以多次尝试。
· 排查方法:对base和top镜像执行qemu-img check /path/top命令查看是否存在error。
· 问题解决方法:对于存在error的镜像,可关闭虚拟机,对虚拟机进行备份,然后执行qemu-img check -r all /path/top命令修复,待修复完成后再次尝试删除虚拟机外部快照。
· 排查方法:在删除快照失败时,在libvirtd.log中查找日志是否有“Excessive depth in document: 256 use XML_PARSE_HUGE option”内容。如有则表示存在xml文件中backingStor记录过长的问题。
· 问题解决方法:该问题已出相应补丁,请参考https://zhiliao.h3c.com/Theme/details/222484进行处理。
· 排查方法:在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更新镜像链信息。
用户在在线删除外部快照时,任务进度在任务管理台停留在99%,长时间无变化,删除操作无法完成。
可能的原因包括:
· 前端下发删除快照任务后,由于监控任务的通道异常,导致系统无法实时获取任务进度,进而表现为进度卡在99%。
· 存储性能较低或快照文件占用空间过大,导致后台快照删除过程耗时较长,任务迟迟未能完成。
· 若删除的是虚拟机的顶层快照,且近期有大量新增数据、数据分布随机且IOPS较高,易产生大量脏数据,加重存储负载,从而影响快照删除进度,导致任务长时间停留在99%。
(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:任务处理限速(字节)。
(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命令查询获得。请注意,强制取消快照删除任务可能导致虚拟机磁盘快照链不一致,并且被取消的快照无法恢复。此操作风险较高,除非特殊情况,否则不建议使用。
在进行离线删除外部快照操作时,任务管理台显示进度卡在99%,长时间无变化,快照删除任务未能及时完成。
可能的原因包括:
· 删除快照任务下发后,由于监控任务通道异常,系统无法及时获取任务的实际进度,进而导致进度卡在99%。
· 存储性能较低或快照文件占用空间较大,后台处理速度较慢,导致快照删除任务长时间无法完成。
(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” 速度。此速度可视为快照实际的删除速度。结合前面获取的快照空间大小和当前读写速度,可以初步评估快照删除任务的总耗时,并根据任务启动时间大致推算任务预计完成时间。
(1) 如确认是前台快照删除任务残留,可通过重启Tomcat服务进行恢复。重启前请务必检查任务管理台,确保没有其他正在进行的任务,以免影响其他任务的正常执行。
(2) 如确认后台快照删除任务仍在执行,可暂停其他非必要的存储操作,耐心等待后台删除任务完成。如果确需立即终止删除任务,可通过以下命令强制停止对应的 `qemu-img commit` 进程:bash kill -9 <进程PID>。其中,`<进程PID>` 为通过排查方法获取的快照删除进程号。需要注意,强制终止进程可能导致虚拟机磁盘快照链不一致,且被取消的快照无法恢复,存在数据丢失或一致性风险,除非特殊情况,不建议采用此方法。
在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镜像,通过此信息可确认目标磁盘,表示该磁盘镜像正在进行快照删除操作。
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作