Proxmox Native ZFS: Snapshots, Rollback, and Replication Without the Myths
Proxmox VE's native ZFS gives you fast VM snapshots and incremental replication, but rollback requires the VM to still exist and HA needs explicit cluster setup.
16 Aug 2025, 10:25 UTC

The rollback problem
You patched a VM, and now it will not boot. Or you deleted the wrong disk. The instinct is to reach for a snapshot and undo the damage. Proxmox VE ships with native ZFS support, so snapshots feel like the obvious answer—but the actual rollback path has boundaries that catch people out. The most common mistake is assuming that a ZFS snapshot is a full backup that survives VM deletion, or that replication alone gives you automatic failover.
The useful takeaway: Proxmox's ZFS snapshots are fast, space-efficient rollback points for an existing VM, while replication is a data-movement tool. High availability is a separate, explicit configuration.
What Proxmox ZFS actually gives you
Proxmox VE can create and manage ZFS pools directly from the web UI without extra packages. Once a pool is added as storage, VM disks live as ZFS volumes inside datasets. You can snapshot those datasets per VM, and you can replicate them to another Proxmox node.
Snapshots use copy-on-write: they record only the blocks that change after the snapshot is taken, so they are cheap in both time and space. That makes them ideal for pre-upgrade safety nets.
Snapshots are rollback points, not archives
A snapshot preserves the disk state of a VM while that VM still exists in Proxmox. If you run qm destroy <vmid>, Proxmox removes the VM configuration and its associated volumes. A snapshot taken before destruction does not give you a one-click path to recreate the VM. For that, you need a backup, not a snapshot.
Replication moves data; HA is a decision
Proxmox replication tasks copy ZFS datasets to another node using incremental ZFS send/receive streams. The first transfer sends the whole dataset; later jobs send only changed blocks. This is useful for disaster recovery and as a building block for HA, but it does not, by itself, restart a VM when a node fails. Automatic failover requires a Proxmox cluster with quorum—a majority of nodes agreeing on cluster state—and the VM registered as an HA resource.
A correct snapshot and rollback workflow
This example uses a test VM on a dedicated disk. Run all commands as root on the Proxmox node that owns the storage.
Create the ZFS pool. In the UI, go to Datacenter → Storage → Add → ZFS, name it
tank, and select a dedicated disk such as/dev/sdb. Do not reuse a disk that holds the OS or other data.Verify the pool. Run:
zpool status tankExpected output includes
state: ONLINE. If it showsDEGRADEDorOFFLINE, stop and investigate disk health before adding VMs.Create a VM on the pool.
qm create 101 --name testvm --memory 2048 --cores 2 \ --scsi0 tank:vm-101-disk-0,format=rawThis creates VM 101 with a raw ZFS volume as its first disk.
Take a snapshot before a risky change.
qm snapshot 101 pre-upgradeVerify it exists:
qm listsnapshot 101You should see
pre-upgradein the list.Make the change, then roll back. After the bad update, stop the VM for a clean state, then run:
qm rollback 101 pre-upgradeThis returns
vm-101-disk-0to its snapshot state. Any writes made after the snapshot are discarded.Check the result.
qm status 101If the status shows
stoppedand the VM boots normally afterward, the rollback worked.
Risk: qm rollback is destructive to post-snapshot data. It also requires the VM ID to still exist. There is no supported CLI path that resurrects a destroyed VM from a snapshot alone.
Where ZFS gets expensive
ZFS is powerful, but it is not free. Plan around these limits before you commit production workloads.
- Memory pressure. The ZFS adaptive replacement cache (ARC) uses RAM to accelerate reads and to track metadata. A common rule of thumb is roughly 1 GB of RAM per TB of pool capacity. On a host with limited memory, the kernel may swap, which hurts latency and can destabilize the pool.
- Deduplication cost. ZFS dedup stores a hash table in memory to avoid writing duplicate blocks. It is CPU- and RAM-intensive. Unless you run many near-identical VMs and have verified the savings, leave dedup disabled. The default
lz4compression is usually the better trade-off. - Dedicated disks. A ZFS pool expects to own its underlying devices. Mixing a pool with other partitions or filesystems on the same disk makes replacement and recovery harder.
- Replication bandwidth. The first replication job sends the entire dataset. Over a slow WAN, that initial sync can saturate the link or stall. Schedule the first run during a maintenance window.
Practical next steps
If you want to adopt native ZFS on Proxmox, start small and verify each layer.
- Provision a dedicated disk and create a ZFS pool in the UI.
- Confirm health with
zpool statusand confirm the storage appears in Datacenter → Storage. - Deploy one non-critical VM, take a snapshot with
qm snapshot, and practiceqm rollback. - If you need off-node protection, configure a replication job to a second node, but treat it as a data-recovery step. For automatic failover, build a cluster and register the VM with the HA manager explicitly.
Snapshots and replication make ZFS a strong storage layer for Proxmox, but they are tools with specific contracts. Respect the boundary between rollback and backup, and between replication and HA, and the platform becomes far more predictable.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.