知识库技术方案云盘路径不一致导致快照创建报“unable to find volume”

云盘路径不一致导致快照创建报“unable to find volume”

技术方案ZCF · Cloud适用版本ALL文章 IDKB-100551更新于2026-08-17

问题现象

  • 云盘创建快照失败,提示 unable to find volume
  • 该云盘已有快照(即不是一块全新的云盘)。
  • 数据库中记录的云盘路径与主机上实际的 qcow2 路径不一致。

适用场景

  • 产品:ZStack Cloud。
  • 版本:素材说明适用于所有版本。
  • 组件:云盘快照、管理数据库和主存储。

判断方法

  • 确认云盘已有快照。
  • 对比 VolumeEO.primaryStorageUuidVolumeEO.installPath、云主机 libvirt XML 与主机侧存储路径。

解决方案

1. 执行前准备与处理步骤

  1. 在 UI 中确认云盘上已存在快照。
  1. 在运行云主机的物理主机上,导出云主机的 libvirt XML,查看实际的 qcow2 路径:
   # virsh dumpxml $vmuuid

记录 <disk><source file="..."> 条目(即 $device),以及该磁盘在主机上的对应路径。

  1. 确认 UI 和主机上对该云盘都没有正在运行的任务:
   # virsh blockjob $vmuuid $device

$device 替换为 XML 中的磁盘 target,将 $vmuuid 替换为运行中的云主机 UUID。

  1. 备份数据库,关闭云主机高可用、停止定时业务
    # zstack-ctl dump_mysql --file-name zstack-db-backup-master    # 在主管理节点上执行
    # zstack-ctl dump_mysql --file-name zstack-db-backup-slave     # 在备管理节点上执行
  1. 更改数据库

5.1 登陆数据库

    # mysql -u root -pzstack.mysql.password zstack

5.2 查询数据库,确认该云盘的 primaryStorageUuidinstallPath 与主机侧路径不匹配:

   select * from VolumeEO where uuid=$Volume-UUID;

$Volume-UUID 是云盘的 UUID 如果数据库中的值与 XML / 主机侧的值不一致,则进行以下修改

5.3 修改

   update VolumeEO set primaryStorageUuid="$Real-PS-UUID-From-Xml", installPath="$fixed-InstallPath-From-Xml" where uuid="$Volume-UUID";

参数说明:

  • $Real-PS-UUID-From-Xml 是 XML 中存储路径所对应的主存储 UUID。
  • $fixed-InstallPath-From-Xml 是按主存储类型规范化后的 XML 存储路径:
  • 对于 Shared Block 主存储,需要将 /dev/ 替换为 sharedblock://
  • 对于 Ceph 主存储,需要在 pool 前添加 ceph://
  • 如不确定,可以参考同一主存储上其他正常云盘的 installPath 写法。
  1. 合并旧快照

6.1. 登录 ZStack Cloud UI,将全局配置中的"快照增量最大数目"调整为 2,以便更快生成全量快照。

6.2. 连续创建快照:最多两次后即可生成一个全量快照。注意修改快照超时时间。

6.3. 删除先前无法删除的旧快照。

  1. 在 UI 中确认可以成功创建新快照。
  1. 重新启用云主机全局高可用,并检查云平台资源连接性是否正常。

验证方法

  • 可以在 UI 中正常创建新的云盘快照。
  • 生成全量快照后,可以正常删除旧快照。

原因说明

管理数据库中 VolumeEO.installPathVolumeEO.primaryStorageUuid 与云盘在主机上的实际位置不同步,导致快照代码路径无法找到 qcow2 文件,从而返回 unable to find volume

风险与回滚

  • 修改 VolumeEO 前备份数据库并关闭全局云主机高可用。
  • 如果更新值不正确,恢复操作前的数据库备份,并将云盘元数据回退到原值。