Supported versions and limits
What CertiStack Community runs against, what it supports, and what it does not do. This page has the full table of Proxmox versions; other pages link here.
Supported versions
CertiStack reads the Proxmox VE version (from the PVE API), the PBS server's
version and the proxmox-backup-client version (from proxmox-backup-client
version), and says whether the release evidence covers that pair:
certistack doctorprints the three versions and the status as itsversion_supportcheck, and asversionsin its JSON;certistack planshows the same check first, andcertistack runmakes it before it reads a backup or creates anything;- the report records
pve_version,pbs_version,pbs_client_versionandversion_support, so the evidence says which pair it is evidence for.
| Status | Meaning | What CertiStack does |
|---|---|---|
tested |
A run passed on this pair of versions. | Nothing to say: the check passes. |
untested |
The versions are known and in range, but the release evidence does not cover the pair. Results with it are not covered by that evidence. | doctor and plan warn; run goes on, warns once, and the report says untested. |
unknown |
A version could not be read (the PVE API did not answer, proxmox-backup-client is not installed, or it could not reach PBS to ask the server). It counts as untested; it is never an error by itself. |
The same warning, naming the version that was not read; the report says unknown. |
unsupported |
A version is older than this release supports. | doctor fails the check; plan and run refuse before anything is created, with the same text, which names the three versions and the reason. |
The table, as this release has it:
| Proxmox VE | PBS | Status |
|---|---|---|
| 9.x | 4.x | tested |
| 8.4 | 4.x | tested |
| 8.4 | 3.x | tested |
| 9.x | 3.x | tested |
| 8.x | 4.x | untested |
| 8.x | 3.x | untested |
| 7.x and older | any | unsupported |
| any | 2.x and older (server or client) | unsupported |
8.x means any PVE 8 release other than 8.4, which has its own row.
Any other pair, such as a newer major release than the evidence covers, is
untested; so is a proxmox-backup-client of another major version than the one
the evidence ran with. That is the PBS server's major, except where the Proxmox VE
release ships the other client: Proxmox VE 8.4 ships the 3.x client and was tested
with it against PBS 3 and PBS 4 servers, and Proxmox VE 9 ships the 4.x client and
was tested with it against PBS 3 and PBS 4 servers.
The table is the code's (internal/support) and this page restates it. The
PBS server's version is read only where the client can reach the repository, so
run doctor on the node with the environment file of a run (--env-file) to
see all three.
Both the controller and the Proxmox VE node must be amd64. Releases publish
amd64 only; an arm64 build from source runs the offline commands (validate,
verify-report) and cannot drive an amd64 node.
Supported recovery contract
| Area | Supported | Boundary |
|---|---|---|
| Controller | A Linux amd64 host, or the unprivileged controller container image. | The controller is not a PVE host agent. It needs no host mounts, KVM, Docker socket or PVE shell. |
| Hypervisor | Proxmox VE 9.x or 8.4 on amd64, with PBS 3.x or 4.x (the tested pairs in the table above), qemu-img and a usable /dev/kvm. |
The node preflight check kvm fails on a node without /dev/kvm, and the run stops before it creates anything; a node that is itself a VM needs nested virtualization turned on. The untested and unsupported pairs are in the table above too. A temporary node worker does the node-local mapping, overlay, QMP and guest-agent work and the cleanup, with the privileges in the Terraform and PVE permissions page. |
| Backups and disks | PBS snapshots mapped read-only. Only QEMU VM backups (vm/<id>) are listed and restored; container (LXC) backups are ignored. One copy-on-write overlay per recovered disk, on any bus (SCSI, VirtIO, SATA, IDE). A UEFI VM's efidisk0 and tpmstate0 are restored as disposable raw copies (this needs overlay_storage). |
The VM boots with the source's boot order, limited to the restored disks. Backed-up disks a plan leaves out are listed as omitted in the report. Cloud-Init and other media that are not in the backup are not recovered. |
| VM configuration | Backed-up CPU, memory, firmware, machine type, SCSI controller, MAC and NIC model can be inherited. | Source tags, bridge, VLAN and firewall settings, hooks, startup rules, arbitrary QEMU arguments and device passthrough are never replayed. |
| Isolated network | One PVE simple or vxlan SDN VNet with no gateway, SNAT, routed path or physical uplink. |
Restored guests on the one VNet reach each other as far as their own firewalls allow. Production-connected networks, DHCP fallback and routed multi-VLAN topologies are not supported. |
| Linux guest network | ifcfg, NetworkManager, Netplan, systemd-networkd and ifupdown are adapted on the disposable overlays only. guestfish opens the overlays of every restored disk together, so a root file system or volume group that spans several disks is inspected whole. |
network_recovery.mode: preserve leaves a guest's network as it is. A run refuses before boot a guest whose operating system needs a disk the plan leaves out, a plan whose restored disks hold more than one operating system, and a network configuration it cannot evaluate offline. Rules in a guest's initramfs and NetworkManager command-line overrides are not modelled. See guest network recovery. |
| Windows and other guests | The guest keeps its own network (preserve). Check it with wire or guest-agent probes. |
CertiStack does not rewrite a Windows guest's network or one it does not recognise; a plan with wire probes and the default mode is refused with unsupported guest network layout. |
| Probes | QMP readiness; tcp, http(s), dns, ldap, mssql and smb probes from the worker to the guest; optional in-guest guest-agent checks. |
Wire probes prove that the worker reached the guest, not that the guest can reach anything. HTTPS certificates must chain to a CA the worker trusts and match the declared name; verification bypasses are not supported. The one exception is the mssql probe's TDS 8.0 strict path, which asserts that the engine answers, not who it is (see the known limits). |
| Evidence | A full mapped-image digest pass, a JSON report (unsigned in the Community Edition), and verified teardown evidence. | A --skip-integrity report is a test-only report and is not accepted as production evidence. |
Known limits
- The SSH identity is root-equivalent. The worker maps images and creates loop devices, so the account that uploads it is root on the node. See the access modes.
- One operation per node. A second
runorrecoveron a node that is busy is refused. See rules for scheduled runs. - Guests with software RAID or LVM leave host-assembled devices. The node's
own udev rules assemble a mapped disk's Linux software RAID arrays (
md126) and activate its LVM volumes on the loop device's partitions, and a loop that those devices hold cannot be released. Before it unmaps a map, CertiStack stops them, and only the ones it can prove are the run's: every member is a partition of a loop it mapped for the run, and nothing is mounted. A device of the host's own, or one built from a mix, is never touched. If one cannot be stopped, the cleanup fails and names it, and Troubleshooting has the commands. - A loop device that something still holds can outlive cleanup. At the end of a run
CertiStack detaches each PBS map's loop device. If a process or a mount still holds
one open, the kernel finishes the detach when the last holder lets go, and
losetup -ashows such a loop attached to/. For a loop held only that way, cleanup reports it released and warns; it does not check what holds it. If it stays, Troubleshooting has the commands. - One flat sandbox network per plan. All of a plan's VMs share one isolated L2 VNet.
- The sandbox has no gateway, so a service that needs a default route does not start. k3s is one: it exits with "no default routes found" and restarts every few seconds, so a probe of its API port fails. Services that only listen (web servers, databases, brokers) are not affected.
- A large multi-VM tier needs room for its copies. When the disks of a tier's VMs together exceed the
node's page-cache budget,
copy_before_boot: autocopies every VM of the tier to local storage, the ones that fit as well, so that none runs from a cache the later VMs' reads would push out. If it cannot (overlay storage on the cluster database's disk, too little room,storage.max_copy_gib), the plan and the run warn, and a VM that runs from the backup can still time out long after its boot. Put overlay storage on a disk of its own with room for the tier's disks, or split the tier. See Troubleshooting. - A service can start slowly in the sandbox. The restored VM boots from
copy-on-write overlays, and heavier services (Grafana took several minutes to
listen) need a longer
startup_grace_period_secthan a plain web server. - Probes start on the worker. The result records the origin
(
worker_host,guest_qgaorhypervisor_qmp). Use a guest-agent probe for an assertion that must run inside the guest. - The
mssqlprobe proves that the engine answers PRELOGIN, not that a login works, and on a strict-encryption server it does not check the certificate. It sends a cleartext PRELOGIN first. A server that forces TDS 8.0 strict encryption (SQL Server 2022 with Force Strict Encryption) answers that with a TLS record or drops it, and the probe then retries once, on a fresh connection, with TLS first (ALPNtds/8.0, TLS 1.2 or later) and the PRELOGIN inside the tunnel. On that path the server's certificate is not verified (a default SQL Server certificate is self-signed), so the result shows that a SQL Server engine answered, not whose; the report's detail says "TDS 8.0 strict" and "certificate not verified". Nothing but PRELOGIN is exchanged. - The node's clock must be within 10 minutes of the controller's. A report
stamped further off than that is refused, and
planandrunwarn when the clock is off by 5 minutes or more. - A pre-provisioned VNet must be exclusive. CertiStack does not check what else is attached to it, and it credits a wire probe to whatever answers on the target address.
- PVE 8 has no SDN configuration lock. Do not run on two nodes of one PVE 8
cluster at the same time, and keep other SDN changes off the cluster during a
run. Without the lock, CertiStack reads the cluster's pending zones, VNets,
controllers and subnets itself before it applies. It does not read IPAM or DNS
objects: on PVE 8.4.0 their list calls refuse the
pendingparameter, so they have no pending state to read, and other PVE 8 releases are not checked. Where you cannot rule out an unapplied change of any kind, use a pre-provisioned sandbox (network.lifecycle: preprovisioned), which changes no SDN object. - No trusted timestamp. A signed report's signature shows that a trusted key signed it, not when; an unsigned one shows neither. Record a hash of each archived report; see Signed reports.
- Unsigned JSON only. The Community Edition writes the report unsigned and does not render HTML binders or PDF certificates. Signing is an Enterprise Edition feature; see Reports and verification for judging an unsigned report and Signed reports for a signed one. See editions.
The reasons behind a refusal are in troubleshooting.