System requirements
Machines
You need two machines for a protected cluster (one node runs VMs but cannot protect them). Three or more are supported. Small fanless or mini PCs are the intended target.
| Requirement | |
|---|---|
| Operating system | Ubuntu 24.04 or 26.04 LTS, Debian 12 or 13 (a fresh install is easiest) |
| Architecture | x86-64 (amd64) — the installer is built for linux-x64; every node in a cluster must use the same architecture |
| Virtualization | Hardware virtualization (Intel VT-x / AMD-V) enabled in the firmware; VMs run under QEMU/KVM through Incus |
| Memory | Enough for the VMs it runs plus the VMs it stands by for — after a failover, the survivor runs both sets |
Other Ubuntu or Debian releases may work but are not tested; the installer warns and continues. Other distributions are refused.
Give the nodes matching CPUs if you want live moves (moving a running VM without a restart). VMs use the host CPU's features, so a live move between different CPU models is refused. Planned moves with a short restart, replication and failover work across different CPUs.
Storage
VM disks live in a ZFS pool managed by Incus. The installer offers two layouts:
- A dedicated disk or partition (
--disk /dev/nvme1n1) — recommended and faster. Everything on it is erased. - The system disk's free space — the default, since a node is normally dedicated to staxmax. If the root filesystem is on LVM (Ubuntu's default install), the pool gets a new logical volume,
staxmax-pool, made from all the unallocated space in its volume group. Otherwise it is a file on the root filesystem sized at its free space less 20 GiB for the OS (minimum 20 GiB; the installer needs at least 25 GiB free). To keep some of it, pass--pool-sizewith a share such as80%or a size such as200GiB. ZFS pools can grow later but not shrink.
Each node needs room for its own VMs and for the replicas it holds of other nodes' VMs. A node only accepts a new replica if the copy still leaves 10% of its pool free, and replication to it pauses once it is below that reserve.
Every node in a cluster uses the same pool name (stax unless you chose otherwise). The join command takes care of that for you.
Network
- All nodes on the same LAN (layer 2). VMs attach to your LAN through macvlan and get their addresses from your router like any other device. After a failover a VM keeps its MAC address, so it must land on the same network to keep its IP.
- A router that answers ping. In a two-node cluster the default gateway is the tiebreaker: a node that can reach neither the other node nor the gateway assumes it is the one cut off and stops its VMs. You can set other tiebreaker addresses in Settings.
- Ports between nodes: TCP 7443 (web UI, API and node-to-node traffic) and TCP 8443 (Incus, used for replication). See Ports and files.
- Internet access during install for the Ubuntu/Debian packages and the Incus repository (pkgs.zabbly.com). Afterwards, internet is only needed for the image catalog and online updates; updates can also be uploaded by hand.
Because of how macvlan works, a node cannot reach its own VMs over the LAN. Other machines on the LAN (including the other nodes) can. Use the console in the web UI, or another machine, to reach a VM.
Optional extras
None of these are required, but each makes failover safer:
- A direct cable between spare Ethernet ports of two nodes. It is found automatically and becomes a second heartbeat path; it needs no IP addresses. See Networking.
- A Shelly smart plug per node, so a survivor can switch the failed node off before taking over its VMs. See Nodes.
- A hardware watchdog (
/dev/watchdog), so a node that hangs or can't stop its VMs is reset. See Installation.