ProxSave is configured through configs/backup.env. The file is intentionally verbose so you can tune what gets collected, how archives are built, and how distribution behaves.
If you upgraded and your backup.env is missing new keys, run:
proxsave --upgrade-config
Collector toggles
You can enable/disable individual collection sources in backup.env. A few common examples:
# PVE-specific
BACKUP_CLUSTER_CONFIG=true # Cluster config (/etc/pve, config.db, corosync)
BACKUP_PVE_FIREWALL=true # Firewall rules under /etc/pve/firewall
# PBS-specific
BACKUP_DATASTORE_CONFIGS=true # /etc/proxmox-backup (datastores, jobs, etc.)
BACKUP_USER_CONFIGS=true # PBS users/tokens/ACLs (where applicable)
# System (common)
BACKUP_NETWORK_CONFIGS=true # /etc/network (interfaces, DNS)
BACKUP_APT_SOURCES=true # /etc/apt sources
BACKUP_CRON_JOBS=true # /etc/cron.d and user/system crontabs
BACKUP_SYSTEMD_SERVICES=true # /etc/systemd/system
BACKUP_SSL_CERTS=true # SSL certificates
BACKUP_SSH_KEYS=true # SSH configuration and keys
BACKUP_ZFS_CONFIG=true # ZFS pool/dataset configuration
BACKUP_ROOT_HOME=true # /root dotfiles (when enabled)
BACKUP_CRITICAL_FILES=true # Selected critical system files
The default template contains many more toggles (PVE jobs/schedules/replication, PBS sync/prune/verify jobs, inventories, scripts, etc.). Use it as the authoritative reference for available options.
Custom backup paths
Add arbitrary files or directories to the backup:
# One entry per line inside the quotes
CUSTOM_BACKUP_PATHS="
/root/.config/rclone/rclone.conf
/opt/myapp/config.json
/etc/custom-app/
/var/lib/myservice/data.db
"
Each path is collected if it exists. Missing paths are skipped with a warning.
Exclusions (patterns and blacklist)
There are two complementary mechanisms:
BACKUP_EXCLUDE_PATTERNS: glob patterns (applied while collecting files).BACKUP_BLACKLIST: explicit paths/patterns you never want to collect (one per line).
Patterns support standard globs (*, ?, []) and also ** for “any directories” matching.
# Comma/newline separated patterns
BACKUP_EXCLUDE_PATTERNS=*.log, *.tmp, **/cache/**, **/.git/**, **/__pycache__/**
# One entry per line inside the quotes
BACKUP_BLACKLIST="
/root/.cache
/var/tmp
"
Compression
Compression is controlled by these keys:
# Supported values: none | gz | pigz | bz2 | xz | lzma | zst
# zst = zstd compression (creates .tar.zst archives)
COMPRESSION_TYPE=xz
# gzip/pigz/bz2: 1-9, xz/lzma: 0-9, zst: 1-22
COMPRESSION_LEVEL=6
# fast | standard | maximum | ultra
COMPRESSION_MODE=standard
# 0 = auto, >0 forces a fixed number of threads (format-dependent)
COMPRESSION_THREADS=0
Practical defaults:
- Daily runs: COMPRESSION_TYPE=zst with a moderate level (e.g. 3–6)
- Long-term archiving: COMPRESSION_TYPE=xz with a moderate level (e.g. 6)
Some formats rely on external binaries being installed (for example xz, zstd, pigz, lzma).
Bundle mode
If you want a single file to move across tiers, enable bundling:
BUNDLE_ASSOCIATED_FILES=true
This creates <archive>.bundle.tar which contains:
- The archive (.tar.* or .tar.*.age)
- <archive>.sha256
- <archive>.metadata (legacy-compatible manifest alias)
- Optional <archive>.metadata.sha256 when present
Bundling is convenient for cloud storage targets because you upload/copy a single file.
System root prefix
For testing or chroot environments, redirect all collection paths:
SYSTEM_ROOT_PREFIX=/mnt/snapshot-root
This prepends the prefix to all collection paths (e.g. /etc/pve becomes /mnt/snapshot-root/etc/pve).
Archive naming
Archives are named automatically using the system hostname:
<hostname>-backup-YYYYMMDD-HHMMSS.tar.<ext>
If you need a different prefix, change the system hostname (recommended) or rename the output artifact after creation.
After changing settings
Validate configuration first:
proxsave --dry-run
If troubleshooting, rerun with debug logging:
proxsave --log-level debug