文档目录

来源与分类

  • 来源渠道:内部 Jira/TIC。
  • 分类结论:产品问题。
  • 确认依据:TIC 在 SAN 环境稳定复现,确认当前 top 无法挂载而两个 image cache 可挂载,并定位 SharedBlock resize 因错误大小执行 shrink、卷只剩约 64 MB;ZSV-8228 的代码在 resize 前增加“当前虚拟大小已足够则跳过”。
  • 内部追踪:TIC-3700、ZSV-8228。

问题元数据

  • 问题编号:TIC-3700、ZSV-8228
  • 组件/产品:ZVF ZSphere
  • 状态:已修复
  • 报告/受影响版本:4.10.3
  • 最后更新时间:2026-09-02

问题描述

4.10.3 的 SharedBlock/SAN 路径在关闭 虚拟机 后导出 OVA/创建镜像时,会进入 qcow2 resize/commit 相关流程。旧代码未先比较当前虚拟大小,在上层传入错误的小尺寸时仍允许 qemu-img resize --shrink;现有分析观察到原卷被截断到约 64 MB,后续 Linux 根文件系统的 superblock 和数据不可读。修复在 SharedBlock 非在线 resize 中启用 skip_if_sufficient:当前 qcow2 虚拟大小大于等于请求值时直接跳过缩小。

现象

  • Windows 虚拟机可能正常,而 CentOS 7.9 等 Linux 虚拟机无法启动。
  • 启动日志出现 XFS 文件系统错误、bad superblock,xfs_repair 无法修复;检查卷虚拟大小可见异常缩小。
  • 当前 top 的 /dev/centos/root 无法通过 libguestfs 挂载,而关联 image cache 的根文件系统仍可挂载。image cache 健康只证明基础镜像未坏,不能恢复 虚拟机 后续业务数据。
  • 问题在 SAN/SharedBlock 数据存储可稳定复现,本地存储未复现。

影响

原 虚拟机 卷发生数据截断,可能不可恢复;这是数据安全问题,不只是导出任务失败。把截断后的 LV 重新扩回原大小不会还原已丢失的数据,反复执行 xfs_repair 也可能进一步改变唯一现场。

规避方案

  • 已验证自助规避:4.10.3 SAN/SharedBlock 环境在升级前停止“从现有 虚拟机/硬盘创建镜像”和“导出 OVA”,不要用生产 虚拟机 验证是否命中。Windows 可启动、本地存储未复现都不能证明 SAN Linux 虚拟机 安全。
  • 已经发生后,立即停止 虚拟机 启动、OVA 导出、resize、commit 和文件系统修复操作;保存任务 UUID、卷/快照链、导出前后虚拟大小、Agent 日志和锁状态,并先对受影响 LV 做存储侧只读保护/副本。
  • 暂无经验证的通用临时方案可以修复已经被截断的数据。支持协助方案只能从导出前的已验证备份、存储快照或其它完整副本恢复到新卷;image cache 只能重建基础系统,不能替代业务数据备份。
  • 恢复成功判据:新卷大小与备份一致、文件系统只读检查通过、虚拟机 在隔离网络启动并完成业务校验;异常处理是备份也损坏、大小不一致或挂载失败时保留现场,不在原卷继续尝试。
  • 预防性升级后先用可丢弃测试 虚拟机 在 SAN 上执行一次关闭、导出 OVA、再次启动和数据校验,确认原卷虚拟大小不变,再恢复生产导出流程。

受影响产品

  • ZVF ZSphere:4.10.3
  • 部署形态和依赖组件:SAN 数据存储上的 XFS 数据盘参与 OVA 导出;非 XFS、非 SAN 或未执行 OVA 导出时不套用本问题结论。

修复状态

  • 当前状态:已修复。
  • 修复版本:4.10.6;本地提交历史显示 ZSV-8228 合入 zsv_4.10.6。
  • 关联缺陷/修复记录:ZSV-8228。shared_block_plugin.resize_volume() 调用 qemu_img_resize(..., skip_if_sufficient=True),当前虚拟大小已达到请求值时不再执行 shrink。

关联信息

SAN 数据存储虚拟机导出 OVA 后再次启动进入文件系统 Emergency Mode | 产品已知问题 · KB | ZStack 资源中心