H3C UIS 虚机迁移存储失败后,二级镜像无法删除(提示 “被虚拟机使用”),核心原因是虚机配置或 UIS 存储元数据中仍残留该二级镜像的关联记录,需通过 “元数据清理 + 虚机配置校验” 两步解决,具体操作如下:
一、核心原因分析
迁移中断后,即使通过blockcommit合并了镜像,UIS 的以下环节仍可能残留关联:
- 虚机 XML 配置文件:虚机后台配置中,仍记录着二级镜像的路径引用(未同步更新为合并后的一级镜像)。
- UIS 存储元数据:存储池的元数据未标记 “二级镜像已解除关联”,系统判定其仍被虚机占用。
- 虚机快照 / 备份依赖:若二级镜像曾关联快照或备份任务,残留的依赖关系会阻止删除。
二、分步解决方案
步骤 1:确认虚机已停止(关键前提)
- 登录 UIS Manager 控制台,进入「虚拟机」页面,找到目标虚机,强制关闭电源(避免在线状态下配置锁定)。
- 若虚机无法正常关机,可通过 UIS 节点的 SSH 命令行强制停止:
virsh list --all
# 强制关闭目标虚机(替换<VM_NAME>为虚机名)
virsh destroy <VM_NAME>
步骤 2:清理虚机配置中的二级镜像引用
导出并编辑虚机 XML 配置
- 通过 UIS 节点 SSH 执行命令,导出虚机配置文件:
virsh dumpxml <VM_NAME> > /tmp/vm_config.xml
- 用文本编辑器(如
vi)打开/tmp/vm_config.xml,搜索二级镜像的文件名(如vm_disk_secondary.qcow2):- 找到
<disk>标签下的source file字段,确认是否仍指向该二级镜像。 - 若存在引用,将其修改为合并后的一级镜像路径(如
vm_disk_primary.qcow2),保存文件。
重新导入虚机配置
- 执行命令覆盖原配置,生效修改:
# 先删除原配置,再导入新配置(替换<VM_NAME>)
virsh undefine <VM_NAME>
virsh define /tmp/vm_config.xml
步骤 3:清理 UIS 存储元数据关联
登录 UIS 存储后端
- 若使用 UIS 本地存储,登录对应计算节点;若使用共享存储(如 UIS SAN),登录存储管理节点。
- 进入存储池目录(通常为
/var/lib/libvirt/images/或自定义存储路径),执行命令查看文件关联:fuser -m <二级镜像文件名>
# 若输出进程ID,执行kill命令终止(如kill -9 12345)
通过 UIS Manager 刷新存储元数据
- 登录 UIS Manager,进入「存储 → 存储池」,找到目标存储池,点击「刷新」按钮。
- 等待刷新完成后,再次尝试删除二级镜像:进入「存储 → 镜像」,选中二级镜像,点击「删除」,确认无关联后即可删除。
步骤 4:兜底方案(若仍无法删除)
若上述步骤无效,可通过强制删除存储元数据记录解决(需谨慎操作):
- 登录 UIS 数据库(需联系 H3C 技术支持获取数据库账号,默认不开放),找到存储镜像关联表(如
tbl_storage_image)。 - 搜索二级镜像的 ID 或文件名,删除对应的数据库记录(需确保无其他依赖)。
- 重启 UIS Manager 服务,刷新页面后再尝试删除镜像:
# 重启UIS Manager服务(不同版本命令可能不同)
service uis-manager restart
三、注意事项
- 数据备份:操作前务必备份一级镜像(合并后的基础镜像),避免误删导致虚机数据丢失。
- 权限检查:确保执行命令的用户(如
root)拥有存储目录的读写权限,避免因权限不足导致配置无法修改。 - 售后支持:若涉及 UIS 数据库操作,建议优先联系 H3C 技术支持,提供虚机 ID 和存储路径,由官方协助清理元数据,降低操作风险。
暂无评论