10. Backup, restore, and upgrade
POC deployment manual chapter. Verified against the 2026.10 mainline; command output follows the installer delivered for that engagement.
Back to overview · Full table of contents · Download full PDF
This chapter: what a platform backup covers, how to create and copy it off-host, how to restore from a backup, what to prepare before an upgrade, how to upgrade from the console or the command line, and what to do when a problem appears after upgrade. Restore changes currently running data. Read every Note in the matching section before you run it. The readers are the customer system administrator and the implementation engineer.
10.1 Backup scope
zenova backup and the console Backup & Restore page use the same backup. It backs up only what the installer deployed and manages.
| Content | Included | Who is responsible |
|---|---|---|
| PostgreSQL deployed by the installer | Yes | Platform administrator |
| Existing PostgreSQL | No | Customer database administrator, using the database's own backup mechanism |
| ClickHouse | Yes (installer-deployed and existing service are both exported through the HTTP interface) | Platform administrator |
| Bundled object storage / local directory | Yes | Platform administrator |
| Existing S3 | No | Customer storage administrator, using the storage's own mechanism |
Install state (.env, .env.runtime, etc, state/install.json) | Yes, including the master key | Platform administrator |
Secret-service material /etc/zenova/secret-service/ | No | Platform administrator backs it up off-host separately per section 8.1 |
Backups are stored under /opt/zenova/data/backups/<backup-id>/. Space estimate:
Space needed ≈ local PG data directory + local object-data directory + 1 GiB
Procedure
- Estimate space for one backup.
# Install host · root · read-only (estimate space for a backup)
du -sh /opt/zenova/data/*
df -h /opt/zenova/data- From the
duoutput, take the sizes of the local PostgreSQL and local object-storage data directories (directory names follow the actual output), add 1 GiB, and compare with free space fromdf.
Note: for the two classes that are not included, agree in writing with the customer before handover who is responsible and how often they back up, and agree that restore will bring them to the same point in time as the platform backup. Restoring only the platform backup while existing PG or S3 is not restored in sync produces inconsistent data.
Note: secret-service material is not in the platform backup. When restoring onto another host, without the off-host backup of the original host's /etc/zenova/secret-service/, every credential the platform stored cannot be decrypted.
10.2 Create, export, and copy off-host
Procedure
- Create a backup and record the backup ID printed on screen (looks like
zb-20261020T020000Z-1a2b3c4d).
# Install host · root · write (create a backup)
sudo zenova backup- List local backups and confirm that ID.
# Install host · root · read-only
sudo zenova backup list- Export as a
.zbackuparchive.
# Install host · root · write (export the archive)
sudo zenova backup export <backup-id> --output /root/zenova-install/<backup-id>.zbackup
sha256sum /root/zenova-install/<backup-id>.zbackup- Copy the archive and digest to a controlled location in a different failure domain from the install host (a different host, different site, or offline media). Register storage location, keeper, digest, and date. After the copy succeeds, delete the on-host export file.
- Delete local backups that are no longer needed, by ID.
# Install host · root · delete (delete one local backup; it cannot be recovered)
sudo zenova backup delete <backup-id>Command line versus console (console is the Backup & Restore tab under Maintenance on the platform admin console):
| Action | Command line | Console |
|---|---|---|
| Back up now | sudo zenova backup | Create backup |
| List backups | sudo zenova backup list (newest first) | Backup list |
| Export archive | sudo zenova backup export <backup-id> --output <file> | Download on the backup row |
| Import archive | sudo zenova backup import <file> | Upload backup |
| Delete backup | sudo zenova backup delete <backup-id> | Delete on the backup row |
What you will see
- After a command-line backup finishes, it prints the backup ID.
- After Create backup on the console, it reports "backup has started; it will appear in the list when finished." The job goes through Prepare, Install state, Platform database, Analytics database, Object storage, Verify.
- Backup list shows Created at, Version, Initiator, Size, Included content. Components not included show as (not included) with the reason.
- The export file mode is 0600.
Note: the export file is not compressed, not additionally encrypted, and contains the master key. Anyone who has it can unpack the credentials the platform stored. Keep it at the highest classification. Do not send it over instant messaging, email, or a ticket.
Note: a backup that exists only on the install host does not count as a backup. When the host disk fails, or wipe-and-reinstall runs (which deletes every local backup), the local backups are gone with it.
Note: backups are triggered by hand from the page or the command line. The platform does not provide scheduled automatic backup or expiry cleanup. Periodic backup, off-site copy, and cleanup are arranged by the customer in their operations process. When a backup, restore, or upgrade is already in progress, a new backup is blocked.
10.3 Restore
Applies to: data was deleted or corrupted by mistake and the platform must return to the state of a given backup; or verifying that a backup works on a rehearsal host.
Prerequisite: all of the following must hold, or restore is refused.
| Condition | Notes |
|---|---|
| Same version | The backup's version matches the version installed on this host. When they differ, install or upgrade this host to the backup's version first |
| Same product, deployment form, and platform | For example both are Zentrix Gateway, single-host bare metal, Linux x86 |
| No upgrade in progress | Wait until the upgrade finishes |
| Control-plane group services already stopped | Control plane, runtime store, background worker |
Note: restore overwrites current data with the backup. Every write after the backup (configuration changes, call records, usage, audit, and similar) is permanently lost and cannot be undone. Before restore, take another backup of the current environment, export it, and copy it off-host, as a way back if restore fails or the wrong backup is chosen.
Note: existing PostgreSQL and existing S3 are not in restore scope. When they are in use, the corresponding administrators restore their data to the same point in time as the platform backup using their backup mechanisms; otherwise platform data is inconsistent.
Procedure
- First take another backup of the current environment, export it, and copy it off-host (see section 10.2).
# Install host · root · write (protective backup before restore)
sudo zenova backup
sudo zenova backup list
sudo zenova backup export <current-backup-id> --output /root/zenova-install/<current-backup-id>.zbackup- Stop the control-plane group services. Use
zenova statusto see service names; skip components that are not enabled.
# Install host · root · write (stop the control-plane group; console and admin APIs unavailable)
sudo zenova status
sudo zenova stop zenova-worker
sudo zenova stop zenova-runtime-store
sudo zenova stop zenova-control-plane- Run restore. The argument may be a backup ID or a
.zbackuparchive (import first, then restore). When prompted, type the confirmation wordRESTORE.
# Install host · root · write (overwrite current data with the backup; cannot be undone)
sudo zenova restore <backup-id-or-.zbackup-file>- After restore finishes and before starting the control-plane group, restart the secret service, authorization service, and bundled object storage so they load the restored data. Omit
rustfswhen bundled object storage is not used.
# Install host · root · write (restart dependency services; load restored data)
systemctl restart spicedb secret-service rustfs
systemctl status spicedb secret-service rustfs --no-pager- Start the control-plane group.
# Install host · root · write (start the control-plane group)
sudo zenova start zenova-control-plane
sudo zenova start zenova-runtime-store
sudo zenova start zenova-worker
sudo zenova status- Check: sign in to the console; confirm gateway nodes are online; run acceptance once under Deployment configuration › Latest acceptance; complete one real call per section 7.3, and confirm that model, routing, permission, audit, and alert configuration match the backup.
- Record the point in time that can be restored to, restore duration, missing content, and external-dependency data that must be rebuilt.
What you will see
zenova restorefirst requiresRESTORE; any other input does not run. Completion output follows the actual output.- When restore is started from the console (backup row Restore → Restore from backup → type
RESTORE→ Start restore), the page shows Restoring, then Stop console services, restore of each component, and Start console services, and finishes with "Restore completed." - Restore is refused while the control plane is still running, or while an upgrade or backup job is in progress.
Note: during restore the old data is kept until the new data is fully in place. Once restore has finished, overwritten data can be recovered only from the protective backup in step 1.
Note: when restoring onto another host, first complete an install of the same version, product, and form, put the off-host backup of the original host's /etc/zenova/secret-service/ back in place, then run the steps above. Before overwriting a production environment, complete one restore rehearsal on an isolated rehearsal host.
10.4 Prepare before upgrade
Procedure
- Read the target version's release notes. Confirm what changed, known issues, and whether a database change is involved.
- Confirm you can upgrade directly from the current version to the target version. When the current version is earlier than the target version's "lowest version that can upgrade directly", upgrade to an intermediate version first, then to the target version.
- Confirm every capability currently enabled. The target-version offline package must include every currently enabled capability. Missing any enabled component fails the pre-upgrade check.
# Install host · root · read-only (view current version and services)
sudo zenova statusYou can also check version and each capability's state under Current version on console System maintenance › System Updates.
- For the current product, platform, and every enabled capability, download the target-version installer and offline package from the download site, check SHA-256 per Chapter 2, and copy them onto removable media to bring on site. The platform does not fetch upgrade packages online. Upgrade packages are always uploaded on site on the System Updates page or run from the command line.
- When there are remote gateway nodes, confirm the target-version offline package contains node packages for those nodes' OS. When it does, the control-plane upgrade upgrades online nodes one by one before the console is switched (see section 10.5). When it does not (for example the node and control-plane platforms differ), the pre-upgrade Gateway nodes check fails; first upgrade those nodes by hand per Chapter 9 Upgrade a node. Nodes already at the target version are skipped. A node is drained during upgrade. Drain does not change DNS or the load balancer: when the ingress pool has only one node, the public ingress is unavailable while it upgrades.
- Complete one backup, export it, copy it to a different failure domain, and record the backup ID (see section 10.2).
- Agree a maintenance window with the customer and notify console users.
Note: the pre-upgrade check decides whether this run is a fast switch or a downtime upgrade, and states the impact on the System Updates page. On a fast switch the console switch takes a few seconds; operations are slightly slow or briefly unavailable, and gateway calls are not affected. When a downtime upgrade is required (a large-table change exceeds the switch-window budget, a pending analytics-database downtime migration, and similar), the upgrader stops the old services to finish the migration. During that time both the console and gateway calls on the central node are unavailable. Remote gateway nodes that were already upgraded to the target version keep serving with the configuration already issued (a downtime migration does not start if a node is offline or not yet at the target version). The "about 600 seconds" shown in preflight is a fixed hint; actual duration follows data volume. Downtime upgrade supports only single-host deployments. Schedule the maintenance window against the impact the check gives.
Note: the platform does not provide a rollback command. After an upgrade finishes, returning to the old version can only restore the pre-upgrade backup (see section 10.6). That backup cannot be skipped.
Note: when the current version has Operations observability enabled, before upgrading to a version that no longer provides that capability you must disable Operations observability on the current version's System maintenance › System Updates. Otherwise the pre-upgrade check refuses the upgrade: Deployment configuration fails, and expanding View technical details (command line zenova upgrade prints a "Details:" line) shows "capability 'Operations observability' has been retired in the new version; disable it on the current version's System Updates page first, then upgrade". Capability packages complete also reports that the upgrade package is missing an enabled capability. They are the same cause; disable it as prompted. You do not need another upgrade package. After the upgrade, you may delete the prometheus, alertmanager, grafana, loki, and tempo directories under <install-directory>/data/ by hand to reclaim disk.
10.5 Upgrade
Prerequisite: every preparation in section 10.4 is done, and no other upgrade is in progress.
Upgrade from the console
Procedure
- As root, open System maintenance › System Updates.
- Upload the
.zpkgprepared in section 10.4. If the upload is interrupted, you can Resume upload. - After upload finishes, the system runs the pre-upgrade check automatically. Check each result. When an item fails, follow the prompt, then click Recheck.
| Check | When it fails |
|---|---|
| License | The page only offers Recheck. Have the tenant administrator update the license under System Settings › Global settings › License, then recheck |
| Disk space | Clean or expand, then recheck |
| Platform match | Download the upgrade package for this host's platform again |
| Deployment configuration | Follow the prompt to Deployment configuration and correct it |
| Capability packages complete | Download an upgrade package that includes every currently enabled capability again |
| Node packages required by gateway nodes are complete | Download an upgrade package that includes the node packages for the platforms listed in the prompt |
| Lowest version that can upgrade directly | Upgrade to an intermediate version first |
| Analytics database | When no analytics database is configured, follow the prompt and run zenova install --reconfigure to deploy one or to fill in existing ClickHouse |
Check names and count on the console follow the actual UI and may also include infrastructure version, database-change duration, version order, and similar. When PostgreSQL or ClickHouse deployed by the installer does not meet the version requirement, run sudo zenova infra upgrade <infrastructure-package> in a maintenance window, then recheck. When using an existing database, the database administrator upgrades it.
- After every item passes, click Upgrade and confirm with the root password in the dialog.
- Watch progress until the upgrade finishes. Do not shut the server down.
- After the upgrade: under Upgrade history, check version, result, duration, and operator; click Run acceptance under Deployment configuration › Latest acceptance; complete one real call per section 7.3.
What you will see
- The upgrade goes through nine stages. Stages that do not apply are skipped:
| # | Stage |
|---|---|
| 1 | Prepare |
| 2 | Gateway nodes |
| 3 | Console switch |
| 4 | Frontend |
| 5 | Built-in gateway |
| 6 | Add-on capabilities |
| 7 | Agents |
| 8 | Data tidy-up |
| 9 | Finish |
- When there are remote gateway nodes, the Gateway nodes stage upgrades online nodes one by one before the console is switched: each is drained, the package is swapped, it passes ingress self-check, then it returns to the ingress pool. Progress looks like "gateway node gw-sh swapping package". If any node upgrade fails, the console is not switched. The result is "not successful; restored to the previous version", listing the failed nodes and reasons. Failed nodes automatically switch back to the old version and keep serving; nodes already upgraded stay on the new version.
- The check result states this run's impact: on a fast switch the console switch takes a few seconds and gateway calls are not affected; on a downtime upgrade the console and gateway calls on the central node are unavailable during the upgrade, and remote gateway nodes keep serving (see section 10.4).
- The result is one of Completed, Completed, some items need attention, Not successful; restored to the previous version, or Needs manual handling (follow the actual UI).
Upgrade from the command line
Procedure
- Unpack the target-version installer in the install-host staging directory and run the upgrade with the new-version installer.
# Install host · root · write (upgrade to the target version)
cd /root/zenova-install
tar xzf <target-version-installer>.tar.gz
sudo ./zenova upgrade <target-version-offline-package>.zpkg
echo $?- Judge the result by exit code; after it finishes, check the same way as console step 6.
What you will see
- The command completes upload, pre-upgrade check, and switch in order, and keeps showing progress. It is the same flow and the same upgrade record as a console upgrade.
- Exit codes:
| Exit code | Meaning | Remedy |
|---|---|---|
| 0 | Upgrade completed | Check version, run acceptance, and make a real call |
| 4 | Completed, but some items stayed on the old version | Follow the output for those items, then check again |
| 1 | Upgrade failed | Keep the output and follow section 10.6 |
| 2 | Pre-upgrade check failed or did not start | Follow the check result, then rerun; this host has not changed |
| 3 | An upgrade is already in progress | Wait for the current upgrade to finish; do not start another |
| 5 | The command stopped following while the upgrade is still running | Run sudo zenova upgrade status and wait for it to finish |
| 130 | Command-line follow was interrupted (Ctrl-C); an already-accepted upgrade keeps running | Same as above |
Note: you must run zenova upgrade with the new-version installer. The already-installed old-version program may not recognize a new-version upgrade package.
Note: only one upgrade can run at a time. Console-started and command-line-started upgrades can see each other. Do not start another from one place while one is running in the other.
10.6 Problems after upgrade
Applies to: the upgrade failed, or after it finished the new version has a problem that cannot be accepted.
The platform does not provide a rollback command. Handling depends on the upgrade result:
| Upgrade result | Current state | Remedy |
|---|---|---|
| Not successful; restored to the previous version | Failed before database changes were committed; the system has already switched back to the previous version; this host is still running the old version | No rollback needed; follow the prompt, fix the cause, and upgrade again |
| Needs manual handling | The upgrade stopped mid-way | Keep the output and sudo zenova upgrade status, and submit support per Chapter 12 |
| Completed, but the new version has a problem | The new version's database changes have been committed; it cannot switch back to the old version | Upgrade to a version that includes the fix; or restore the pre-upgrade backup on the original version per section 10.3 |
Note: restoring the pre-upgrade backup loses every write after that backup. Restore requires this host's version to match the backup's version. First install this host onto the original version per Chapter 11, then restore per section 10.3. That is why section 10.4 requires a backup copied off-host before upgrade.
Procedure
- Inspect the current version and the last upgrade's result.
# Install host · root · read-only
sudo zenova status
sudo zenova upgrade status- Choose handling from the table above. After it is handled, complete one real call per section 7.3 and run acceptance once under Deployment configuration › Latest acceptance.
Note: when there are remote gateway nodes, after handling, check each node's status and version in the node list; follow the actual output.
Capability notes
| Not provided | Alternative |
|---|---|
| Backing up existing PostgreSQL and existing S3 | Protected by the customer database administrator and storage administrator using their backup mechanisms, aligned in time with the platform backup |
| Platform backup including secret-service material | Back up /etc/zenova/secret-service/ off-host separately per section 8.1 |
| Scheduled automatic backup and expiry cleanup | The customer regularly runs zenova backup, exports and copies off-host, and deletes expired backups per their operations process |
| Restoring across version, product, or form | First install or upgrade this host to the backup's version and form, then restore |
| Rolling back to the version before the upgrade | Upgrade to a fixed version, or restore the pre-upgrade backup on the original version |
Previous: 9. Add a remote gateway node · Next: 11. Wipe-and-reinstall and changing product
9. Add a remote gateway node
POC deployment manual chapter. Verified against the 2026.10 mainline; command output follows the installer delivered for that engagement.
11. Wipe-and-reinstall and changing product
POC deployment manual chapter. Verified against the 2026.10 mainline; command output follows the installer delivered for that engagement.