
本文是 ZSvirt 开源 FAQ 的下篇。上篇回答了安装部署与登录、Windows/GPU/ARM 支持、网络与存储配置,共 10 个问题;下篇继续整理迁移与备份恢复、API 与 SDK 调用、文档与社区反馈、开源范围与平台选型。
问题列表一览
- 迁移与备份恢复
- 问题 11:从 VMware 迁入 ZSvirt,如何选择迁移方式?
- 问题 12:OVF 如何导入?数据盘未识别怎么办?
- 问题 13:Veeam 对接有何计划?内置备份、恢复和异地同步怎么做?
- API 与 SDK 调用
- 问题 14:Java SDK 如何初始化?HTTP 202 如何获取最终结果?
- 问题 15:ZSvirt 支持 API 对接吗?如何认证和调用?
- 文档与社区反馈
- 问题 16:官方文档在哪里?为什么保留 ZStack/ZSphere 的历史命名?
- 问题 17:故障、功能需求和界面翻译问题如何反馈?
- 问题 18:安全漏洞如何报告和处理?
- 开源范围与平台选型
- 问题 19:开源版能免费用于生产吗?和 OpenStack 是什么关系?
- 问题 20:平台选型与性能如何评估?有哪些自动化对接入口?
迁移与备份恢复
问题 11:从 VMware 迁入 ZSvirt,如何选择迁移方式?
可根据停机窗口和现有文件,选择 ZMigrate 在线迁移、OVF 整机导入或 VMDK 磁盘导入。
ZMigrate 在线迁移
适合批量迁移或需要缩短停机时间的场景。无须在源 VM 内安装代理,源 VM 运行时同步数据,最终割接时再停机。
操作顺序:部署 ZMigrate → 上传 VDDK → 配置数据网关 → 添加 VMware 源平台 → 创建迁移任务 → 同步并测试验证 → 停止源 VM 并割接。
在线迁移有并发限制;OVF、VMDK 离线导入不受该在线并发限制。
OVF 整机导入
适合可安排停机导出的场景。关闭源 VM,导出包含 .ovf、关联 VMDK 和 MF 文件的完整文件集,再通过“新建虚拟机 > 导入虚拟机”导入。
VMDK 磁盘导入
适合已有 VMDK、只需迁移磁盘数据的场景。将 VMDK 添加为平台镜像,平台按镜像存储类型自动转换为 qcow2 或 raw,再用镜像创建 VM。CPU、内存和网络需重新配置,BIOS 模式须与源 VM 一致。
问题 12:OVF 如何导入?数据盘未识别怎么办?
OVF 导入需准备完整文件集,确保引用匹配,并配置可用的镜像存储。
支持单机及分布式镜像仓库,生成 VM 后默认自动清理对应临时模板。
- 准备
.ovf、全部关联的 VMDK 和 MF 文件,文件名、个数及配置须与 OVF 描述一致。 - 进入“新建虚拟机 > 导入虚拟机”,上传文件集,选择镜像存储、运行位置和目标数据存储,提交导入。
- 导入后的硬盘 1 默认使用 IDE,数据盘使用 Virtio。客户机缺少 Virtio 驱动时,安装并启动 VMTools 后,系统才可识别数据盘。不要初始化原有数据盘。
参考:导入手册
问题 13:Veeam 对接有何计划?内置备份、恢复和异地同步怎么做?
Veeam 对接所需的 API Proxy 包计划在后续版本提供,具体发布日期以官方发布为准。
当前推荐使用 ZSvirt 内置备份与恢复功能,操作步骤如下:
- 添加备份存储;复用镜像存储时,选择已启用、已连接的单机镜像仓库,填写备份网络 CIDR。
- 创建 VM 备份计划,选择对象、备份存储和策略;执行一次备份,等待生成成功的恢复点。
- 在“数据保护 > 已保护资源”选择 VM 和成功的备份数据,点击“新建虚拟机”,配置运行位置和网络后创建。恢复验证时接入隔离网络,避免与源 VM 冲突。
适用条件
创建备份计划前,确认备份额度可用,VM 处于运行或暂停状态,且未绑定其他备份计划。共享盘和 RDM 盘不在备份范围内。
异地同步
提前添加异地备份存储后,可在备份计划中配置异地同步。使用异地备份创建 VM 前,需先将备份同步回本地备份存储。
API 与 SDK 调用
问题 14:Java SDK 如何初始化?HTTP 202 如何获取最终结果?
Java SDK 初始化使用 ZSClient.configure(config)。HTTP 202 表示已受理,仍需获取最终结果。
提示 setConfig() 未调用
使用 Action 的 call() 方法前,先创建并配置 ZSConfig 对象,再调用 ZSClient.configure(config)。报错中的 setConfig() 是提示文字中的错误方法名。
参考:SDK 初始化源码
收到 HTTP 202
Java SDK 默认轮询获取最终结果;配置 WebHook 并接入回调处理后,通过回调获取结果。直接调用 REST API 时,对响应体中的 location 发起 GET 请求;若仍返回 202,则继续轮询,直至获得最终业务结果。失败信息见 error 字段。
问题 15:ZSvirt 支持 API 对接吗?如何认证和调用?
ZSvirt 提供 RESTful API,支持 Session 和 AccessKey 签名认证。
- Session:账户登录 API 调用成功后,以响应中的
inventory.uuid作为 Session UUID,请求头使用Authorization: OAuth <SessionUUID>。 - AccessKey:在 Java SDK 的 Action 对象中填写 accessKeyId、accessKeySecret,由 SDK 签名;直接 REST 调用按文档生成
Authorization: ZStack <AccessKeyID>:<签名>,并携带与签名计算一致的 Date 请求头。
使用有效 Session 查询虚拟机:
curl -H 'Authorization: OAuth <SessionUUID>' \
'http://<管理节点IP>:8080/zstack/v1/vm-instances'
示例 URL 按实际 API 地址替换;查询成功后,虚拟机列表位于响应的 inventories 字段。
参考:账户登录 API、查询虚拟机 API、AccessKey 认证
文档与社区反馈
问题 16:官方文档在哪里?为什么保留 ZStack/ZSphere 的历史命名?
安装文档、用户手册、API 文档和分类 FAQ 均已开放,入口见文档中心。
ZSvirt 由 ZStack ZSphere 商业化项目开源并独立发展而来,部分代码、配置和文档仍保留 ZStack/ZSphere 的历史命名(如环境变量、配置项、依赖、路径、命令等)。这些命名仅用于兼容,不影响 ZSvirt 正常使用。
参考:命名说明
问题 17:故障、功能需求和界面翻译问题如何反馈?
故障反馈需附可复现信息,功能请求需说明使用场景。
故障、功能需求和界面翻译问题提交到 Issues,使用交流发布到 Discussions。故障反馈请附:
ZSvirt/SDK 版本与部署方式:
服务器、系统、CPU、网络和存储:
复现步骤、预期结果与实际结果:
失败时间及其时区、任务/资源 ID:
原始错误与对应时段日志:
在 GitHub 提交 Issue 或发布 Discussion 前,请移除日志中的密码、令牌和业务敏感数据;界面翻译问题请附页面路径和原文。
参考:贡献指南
问题 18:安全漏洞如何报告和处理?
疑似漏洞请通过安全邮箱私下报告:首选 security@zsvirt.io,备选 community@zsvirt.io。
不要在公开 Issue 披露漏洞细节。报告附受影响版本、复现条件、影响范围、脱敏证据及回联方式。
维护者按安全政策接收和验证报告,评估修复或缓解措施,并协调披露。
开源范围与平台选型
问题 19:开源版能免费用于生产吗?和 OpenStack 是什么关系?
ZSvirt 由 ZSphere 开源并独立发展,源代码采用 GPL 3.0,可用于生产,无需支付平台许可费。
ZSvirt 采用独立技术路线,不是 OpenStack 衍生项目。厂商驱动、第三方软件及商业服务遵循各自的许可和收费规则。
问题 20:平台选型与性能如何评估?有哪些自动化对接入口?
功能与管理方式可参考官方对比文章;性能和兼容性需按 PoC 指南,在目标硬件、存储和业务负载下验证。
自动化对接入口:REST API、SDK、Terraform Provider。
安装部署与登录、Windows/GPU/ARM 支持、网络与存储配置见上篇。
- 代码仓库:https://github.com/zsvirt/zsvirt
- 下载中心:https://zsvirt.io/zh/download
- 文档中心:https://zsvirt.io/docs
加入社区
- 问题反馈:GitHub Issues
- 社区讨论:GitHub Discussions
- 社交媒体:
- YouTube:https://youtube.com/@ZSvirt
- LinkedIn:https://www.linkedin.com/in/zsvirt-community/
- X/Twitter:https://x.com/ZSvirt
- Discord:https://discord.com/invite/KHsw63z9xA
- Email:community@zsvirt.io