故障原因:快照删除卡在99%通常意味着底层存储合并未完成,强制关机导致快照链元数据不一致,虚拟机磁盘文件仍被锁定或引用关系损坏。
排查步骤:
1. 在CVM上确认虚拟机状态和所在CVK:
登录CVM,执行 virsh list --all 查看虚拟机定义是否存在。
执行 virsh dominfo <虚拟机名> 查看状态。
2. 检查存储池中虚拟机磁盘文件:
进入虚拟机磁盘所在目录(通常为 /vms/images/<虚拟机UUID>/)。
执行 ls -lh 查看是否存在残留的快照文件(如 *.snap 或 *-delta 文件)。
执行 qemu-img info <磁盘文件> 查看磁盘链是否完整,是否有 backing file 指向不存在的文件。
3. 检查CVK上的存储任务:
在CVM上执行 cat /var/log/libvirt/qemu/<虚拟机名>.log 查看启动失败的具体报错。
常见报错为 Cannot find backing file 或 Permission denied。
4. 尝试手动启动虚拟机:
执行 virsh start <虚拟机名>,观察报错信息。
解决方案:
1. 如果磁盘链完整但虚拟机定义损坏:
在CVM上执行 virsh undefine <虚拟机名>(不删除磁盘文件)。
重新注册虚拟机:virsh define /etc/libvirt/qemu/<虚拟机名>.xml。
2. 如果存在残留快照文件:
先备份虚拟机磁盘文件。
使用 qemu-img commit -d <快照文件> 将快照合并到父磁盘,或使用 qemu-img rebase -b <父磁盘> <子磁盘> 修复链。
合并完成后重新定义虚拟机。
3. 如果磁盘链损坏严重无法修复:
使用 qemu-img convert -f qcow2 -O qcow2 <损坏磁盘> <新磁盘> 导出数据。
新建虚拟机,挂载转换后的磁盘文件启动。
4. 克隆失败的原因相同,需先修复源虚拟机磁盘链。
预防建议:
删除快照前确保存储空间充足,避免合并过程中断。
删除快照操作不要在业务高峰期执行。
定期检查存储池状态:ceph -s 或 df -h 查看空间使用率。
暂无评论