# ZSvirt FAQ (Part 2): 10 Questions on Migration, Backup, APIs, Community, and Licensing

> Part 2 answers 10 questions on migration and backup/recovery, APIs and SDKs, documentation and community, and open-source scope: three VMware migration paths, Veeam plans, Java SDK initialization and HTTP 202, Session and AccessKey authentication, vulnerability reporting, and production use.

- Published: 2026-10-28
- Updated: 2026-10-28
- Author: [ZSvirt Team](https://github.com/ZSvirt)
- Category: Best Practice
- Tags: ZSvirt, FAQ, VMware Migration, Backup, API, Java SDK, Open Source, ZSvirt FAQ, ZMigrate migration, OVF import, VMDK import, ZSvirt backup, ZSvirt restore, ZSvirt off-site backup, ZSvirt Java SDK, ZSvirt API authentication, ZSvirt GPL 3.0

[Image available on the canonical HTML page: ZSvirt FAQ: 20 questions from global users, Part 2](https://zsvirt.io/blog/zsvirt-faq-part-2/)

This is Part 2 of the ZSvirt FAQ. [Part 1](https://zsvirt.io/blog/zsvirt-faq-part-1) answered 10 questions on installation and login, Windows, GPU, and ARM support, and networking and storage. Part 2 covers migration and backup/recovery, API and SDK, documentation and community, and open-source scope and platform selection.

### What this FAQ covers

- **Migration and backup/recovery**
  - Q11: Migrating from VMware: how do I choose a migration method?
  - Q12: How do I import an OVF? What if the data disk is not recognized?
  - Q13: What are the plans for Veeam integration? How do built-in backup, recovery, and off-site sync work?
- **API and SDK**
  - Q14: How do I initialize the Java SDK? How do I get the final result of an HTTP 202?
  - Q15: Does ZSvirt support API integration? How do authentication and calls work?
- **Documentation and community**
  - Q16: Where is the official documentation? Why are the ZStack/ZSphere names still used?
  - Q17: How do I report a fault, a feature request, or a UI translation issue?
  - Q18: How are security vulnerabilities reported and handled?
- **Open-source scope and platform selection**
  - Q19: Can the open-source edition be used in production for free? How does it relate to OpenStack?
  - Q20: How do I evaluate the platform and its performance? What automation entry points are available?

## Migration and backup/recovery

### Q11: Migrating from VMware: how do I choose a migration method?

**Choose ZMigrate live migration, full OVF import, or VMDK disk import based on your downtime window and the files you already have.**

#### ZMigrate live migration

Fits bulk migrations or cases that need minimal downtime. No agent is installed in the source VM; data syncs while the source VM runs, and the final cutover is the only downtime.

Sequence: deploy ZMigrate → upload the VDDK → configure the data gateway → add the VMware source platform → create a migration task → sync and verify → stop the source VM and cut over.

Live migration has a concurrency limit; OVF and VMDK offline imports are not subject to it.

#### Full OVF import

Fits cases where a downtime window for export is acceptable. Power off the source VM, export the complete file set — the `.ovf` file, the associated VMDKs, and the MF file — then import it through *New VM > Import VM*.

#### VMDK disk import

Fits cases where the VMDK already exists and only the disk data needs to move. Add the VMDK as a platform image; the platform converts it to qcow2 or raw depending on the image storage type, then create a VM from the image. CPU, memory, and networking are configured again, and the BIOS mode must match the source VM.

References: [Three migration methods and workflows](https://zsvirt.io/blog/zmigrate-workflow-walkthrough), [Agentless migration](https://zsvirt.io/blog/why-we-open-sourced-zsvirt), [Concurrency scope](https://zsvirt.io/blog/two-weeks-after-open-sourcing-zsvirt)

### Q12: How do I import an OVF? What if the data disk is not recognized?

**An OVF import needs the complete file set, matching references, and usable image storage.**

Standalone and distributed image repositories are supported, and the temporary template created by the import is cleaned up automatically by default after the VM is created.

1. Prepare the `.ovf` file, all associated VMDKs, and the MF file. File names, count, and configuration must match the OVF description.
2. Go to *New VM > Import VM*, upload the file set, select the image storage, run location, and target datastore, and submit the import.
3. Disk 1 uses IDE by default and data disks use VirtIO. If the guest lacks the VirtIO driver, the data disk is only recognized after [VM Tools](https://docs.zsvirt.io/en/docs/user-guide/compute/vm/vmtools/install-windows) is installed and started. **Do not initialize the original data disk.**

Reference: [Import guide](https://docs.zsvirt.io/en/docs/user-guide/compute/vm/basic-operations/import-vm)

### Q13: What are the plans for Veeam integration? How do built-in backup, recovery, and off-site sync work?

**The API Proxy package for Veeam integration is planned for a later release; the release date will follow the official announcement.**

Built-in backup and recovery are available now:

1. Add backup storage. To reuse image storage, select an enabled, connected standalone image repository and enter the backup network CIDR.
2. Create a VM backup plan: choose the objects, backup storage, and policy. Run one backup and wait for a successful restore point.
3. Under *Data Protection > Protected Resources*, select the VM and the successful backup, click *New VM*, and configure the run location and network. Attach the restored VM to an isolated network for verification so it does not conflict with the source VM.

#### Prerequisites

Before creating a backup plan, confirm that backup quota is available, the VM is running or suspended, and it is not bound to another backup plan. **Shared disks and RDM disks are not covered by backup.**

#### Off-site sync

Add off-site backup storage first, then configure off-site sync in the backup plan. To create a VM from an off-site backup, sync the backup back to local backup storage first.

References: [Backup plans](https://docs.zsvirt.io/en/docs/user-guide/backup/vm-backup/create-plan), [Reusing image storage](https://docs.zsvirt.io/en/docs/user-guide/backup/backup-storage/local/reuse-image-storage), [Restore steps](https://docs.zsvirt.io/en/docs/user-guide/backup/restore/create-vm-from-backup)

## API and SDK

### Q14: How do I initialize the Java SDK? How do I get the final result of an HTTP 202?

**Initialize the Java SDK with `ZSClient.configure(config)`. An HTTP 202 means the request was accepted; the final result still has to be retrieved.**

#### The `setConfig()` error

Before calling an Action's `call()` method, create and configure a `ZSConfig` object, then call `ZSClient.configure(config)`. The `setConfig()` in the error message is a wrong method name in the hint text.

Reference: [SDK initialization source](https://github.com/zsvirt/zsvirt/blob/4a4d3061b123596393ae577b29c0bc7f22627769/sdk/src/main/java/org/zstack/sdk/ZSClient.java#L118)

#### Handling an HTTP 202

The Java SDK polls for the final result by default. With a WebHook configured and callback handling in place, the result arrives through the callback. When calling the REST API directly, send a GET request to the `location` in the response body; if it also returns 202, keep polling until the final business result arrives. Failure details are in the `error` field.

References: [SDK async result handling](https://github.com/zsvirt/zsvirt/blob/4a4d3061b123596393ae577b29c0bc7f22627769/sdk/src/main/java/org/zstack/sdk/ZSClient.java#L320), [Server-side result query](https://github.com/zsvirt/zsvirt/blob/4a4d3061b123596393ae577b29c0bc7f22627769/rest/src/main/java/org/zstack/rest/RestServer.java#L715)

### Q15: Does ZSvirt support API integration? How do authentication and calls work?

**ZSvirt provides a RESTful API with Session and AccessKey authentication.**

- **Session**: after the account login API succeeds, use the `inventory.uuid` from the response as the Session UUID and send `Authorization: OAuth <SessionUUID>` in the request header.
- **AccessKey**: fill in accessKeyId and accessKeySecret on the Action object in the Java SDK and let the SDK sign the request. For direct REST calls, generate `Authorization: ZStack <AccessKeyID>:<Signature>` as documented, and include a Date header that matches the signature calculation.

Query VMs with a valid session:

```
curl -H 'Authorization: OAuth <SessionUUID>' \
  'http://<management-node-IP>:8080/zstack/v1/vm-instances'
```

Replace the URL with the actual API address. On success, the VM list is in the `inventories` field.

References: [Account login API](https://docs.zsvirt.io/en/docs/api-reference/system-management/user-configuration/log-in-by-account), [Query VM API](https://docs.zsvirt.io/en/docs/api-reference/compute/vm/query-vm-instance), [AccessKey authentication](https://docs.zsvirt.io/en/docs/api-reference/access-key)

## Documentation and community

### Q16: Where is the official documentation? Why are the ZStack/ZSphere names still used?

**Installation docs, the user guide, the API reference, and categorized FAQs are all available from the [documentation center](https://zsvirt.io/en/docs).**

ZSvirt was open-sourced from the ZStack ZSphere commercial product and now develops independently. Some code, configuration, and documentation still use the ZStack/ZSphere naming — environment variables, configuration items, dependencies, paths, and commands. These names exist for compatibility and do not affect normal use of ZSvirt.

Reference: [Naming note](https://docs.zsvirt.io/en/docs/quick-start)

### Q17: How do I report a fault, a feature request, or a UI translation issue?

**Fault reports need reproducible information; feature requests need the use case.**

Submit faults, feature requests, and UI translation issues to [Issues](https://github.com/zsvirt/zsvirt/issues); use [Discussions](https://github.com/zsvirt/zsvirt/discussions) for usage questions. A fault report should include:

```
ZSvirt/SDK version and deployment method:
Server, OS, CPU, network, and storage:
Reproduction steps, expected result, and actual result:
Time of failure with time zone, task/resource ID:
Raw error and logs from the corresponding period:
```

Remove passwords, tokens, and business-sensitive data from logs before posting an Issue or Discussion. For UI translation issues, include the page path and the original text.

Reference: [Contributing guide](https://github.com/zsvirt/zsvirt/blob/main/CONTRIBUTING.md)

### Q18: How are security vulnerabilities reported and handled?

Report suspected vulnerabilities privately by email: `security@zsvirt.io` (preferred) or `community@zsvirt.io` (fallback).

Do not disclose vulnerability details in a public Issue. Include the affected version, reproduction conditions, impact scope, sanitized evidence, and a way to reach you.

Maintainers receive and verify reports under the [security policy](https://github.com/zsvirt/zsvirt/security/policy), assess fixes or mitigations, and coordinate disclosure.

## Open-source scope and platform selection

### Q19: Can the open-source edition be used in production for free? How does it relate to OpenStack?

**ZSvirt was open-sourced from ZSphere and develops independently. The source code is GPL 3.0, can be used in production, and carries no platform license fee.**

ZSvirt follows its own technical path and is not an OpenStack derivative. Vendor drivers, third-party software, and commercial services follow their own licenses and pricing.

References: [Open-source scope](https://zsvirt.io/blog/why-we-open-sourced-zsvirt), [Production use and technical path](https://zsvirt.io/blog/two-weeks-after-open-sourcing-zsvirt)

### Q20: How do I evaluate the platform and its performance? What automation entry points are available?

For features and management, see the [comparison article](https://zsvirt.io/blog/zsvirt-vs-proxmox-ve). For performance and compatibility, validate on your target hardware, storage, and workloads following the [PoC guide](https://zsvirt.io/blog/evaluate-zsvirt-as-a-vmware-alternative).

Automation entry points: [REST API](https://docs.zsvirt.io/en/docs/api-reference), [SDK](https://docs.zsvirt.io/en/docs/api-reference/sdk-specifications), [Terraform provider](https://docs.zsvirt.io/en/docs/terraform-for-zsphere).

Installation and login, Windows, GPU, and ARM support, and networking and storage are covered in [Part 1](https://zsvirt.io/blog/zsvirt-faq-part-1).

---

- Source code: [https://github.com/zsvirt/zsvirt](https://github.com/zsvirt/zsvirt)
- Download Center: [https://zsvirt.io/download](https://zsvirt.io/download)
- Documentation Center: [https://zsvirt.io/en/docs](https://zsvirt.io/en/docs)

## Join the Community

- **Issue reports**: [GitHub Issues](https://github.com/zsvirt/zsvirt/issues)
- **Community discussions**: [GitHub Discussions](https://github.com/zsvirt/zsvirt/discussions)
- **Social media**:
  - YouTube: [https://youtube.com/@ZSvirt](https://youtube.com/@ZSvirt)
  - LinkedIn: [https://www.linkedin.com/in/zsvirt-community/](https://www.linkedin.com/in/zsvirt-community/)
  - X/Twitter: [https://x.com/ZSvirt](https://x.com/ZSvirt)
  - Discord: [https://discord.com/invite/KHsw63z9xA](https://discord.com/invite/KHsw63z9xA)
  - Email: [community@zsvirt.io](mailto:community@zsvirt.io)

## Official links


- [Canonical HTML page](https://zsvirt.io/blog/zsvirt-faq-part-2/)
- [Discuss on GitHub](https://github.com/ZSvirt/zsvirt/discussions)
