Backup Manager
The Backup Manager provides automated and on-demand backups for virtual servers. It supports incremental, differential, and full backups with multiple storage backends, retention policies, and end-user self-service.
Overview
Backups are taken at the block level while the virtual server continues running, with minimal performance impact. Intelligent consistency detection ensures backups are application-safe without requiring downtime.
The system is designed to be reliable and gentle on busy hypervisors. Backup concurrency, I/O priority, CPU priority, bandwidth limits, and disk read limits are all configurable per storage or per schedule. Resource controls ensure backups run in the background without impacting VM performance, even on heavily loaded hypervisors.
Backups can be stored on SSH/SFTP servers, S3-compatible object storage (AWS, MinIO, Wasabi, R2, B2), FTP/FTPS servers, or any suitable provider supported by rclone. There is also a tight native integration with Proxmox Backup Server, providing chunk-level deduplication and efficient storage without requiring any additional software on your hypervisors.
Supported Storage Backends
| Backend | Incremental | Encryption | Deduplication |
|---|---|---|---|
| SSH/SFTP | |||
| S3-compatible (AWS, MinIO, Wasabi, R2, B2) | |||
| Proxmox Backup Server (PBS) | |||
| FTP/FTPS | |||
| Rclone |
Local filesystem storage is supported by the backup engine but is not currently available in VirtFusion. Backups stored locally on the hypervisor do not provide protection against hardware failure and cannot be accessed from other hypervisors, limiting the ability to restore VMs after a migration or hardware loss. A remote storage backend is strongly recommended.
Backup Types
| Type | Description |
|---|---|
| Full | Complete disk image. Forms the baseline for an incremental chain. |
| Incremental | Only blocks changed since the last backup. Smallest and fastest. |
| Differential | All blocks changed since the last full backup. |
| Copy | Standalone full backup without affecting the incremental chain. |
The system automatically manages backup chains. After a configurable interval (default: 7 days), a new full backup is taken to start a fresh chain.
Supported Disk Types
| Disk Format | Incremental | Notes |
|---|---|---|
| qcow2 | Recommended. Persistent dirty bitmaps survive VM reboots and live migrations. | |
| Raw (file-backed) | Dirty bitmaps are non-persistent. A VM reboot or crash will reset the bitmap, causing the next backup to fall back to a full backup. Incremental chains work correctly as long as the VM remains running between backups. | |
| Ceph RBD | Persistent change tracking. Survives reboots and migrations. |
Raw disk limitation: If a VM using raw disk images is rebooted between backups, the incremental tracking bitmap is lost. The next scheduled backup will automatically detect this and perform a full backup to start a fresh chain. This is a QEMU limitation with raw format disks. If your VMs reboot frequently, consider using qcow2 format for more efficient incremental backups.
StorPool: StorPool block storage is not currently supported. We are actively working with StorPool to find a resolution.
Access Levels
Each virtual server has a backup access level that controls what operations are permitted:
| Level | Included in Scheduled Backups | End User Can View | End User Can Restore | End User Can Backup |
|---|---|---|---|---|
| Disabled | ||||
| Scheduled Only | ||||
| View & Restore | ||||
| Full Access | ||||
| Manual Only |
Access levels are resolved in order: per-server override, then schedule default. If no override is set, the schedule's default applies.
Getting Started
Setting up backups requires three steps:
- Add a storage backend
- Create a schedule linking a hypervisor to that storage
- Backups run automatically on the configured interval
Step 1: Add Storage
Navigate to Backup Manager → Storage and click Add Storage.

A modal will appear where you select a storage type and enter a name. After saving, you will be taken to the storage configuration page.
Step 2: Configure Storage
Each storage type has its own connection settings. Configure the connection details for your chosen backend.

SSH/SFTP
| Field | Description |
|---|---|
| Host | Hostname or IP address of the SSH server |
| Username | SSH username |
| Port | SSH port (default: 22) |
| Path | Absolute path on the remote server for backup storage |
| Private Key | PEM-formatted private key for authentication |
SSH Server Configuration
For reliable backups and restores, especially for large disks that transfer for several hours, the remote SSH server should be configured to maintain long-lived connections. Add or verify the following settings in /etc/ssh/sshd_config on the storage server:
# Send keepalive probes every 60 seconds to detect dead clients
ClientAliveInterval 60
# Allow 3 missed keepalives before disconnecting (3 minutes tolerance)
ClientAliveCountMax 3
# Allow enough sessions for concurrent backup operations
MaxSessions 20
After editing, restart sshd: systemctl restart sshd
If you are using a cloud firewall (e.g. Hetzner Cloud Firewall, AWS Security Groups with connection tracking), be aware that stateful firewalls have connection tracking timeouts that can silently drop long-lived TCP connections. If backups or restores fail consistently after several hours, try disabling the cloud firewall as a test, or ensure the connection tracking timeout exceeds your longest expected transfer time.
You should also verify that no system-level TCP timeouts are too aggressive:
# Check connection tracking timeout (if conntrack is active)
sysctl net.netfilter.nf_conntrack_tcp_timeout_established
# Should be at least 14400 (4 hours), default is 432000 (5 days)