2026-05 rewrite: The previous TrueNAS-staging + Syncthing-replication
workflow is retired. After TrueNAS was decommissioned, Proxmoxvzdump
now writes directly to the Synology over NFS. There is no staging tier and
no Syncthing bridge anymore.
Proxmox vzdump (weekly Sat + midweek Wed)
│ zstd compressed .vma.zst
▼
Synology NFS (synology-backup → 192.168.88.19:/volume1/proxmox-backup)
per-job prune-backups (keep-last) runs at end of each job
Key design choices:
prune-backups: keep-last=2,keep-weekly=2,keep-monthly=1 on every job (hardened 2026-07-03 — was keep-last=1, a single generation with no recovery point if the latest backup was corrupt). Worst case ~5 generations/VM ≈ 11 TB on the 21 TB share — re-check usage after a month.| Job | VM | VMID | Schedule | Retention |
|---|---|---|---|---|
backup-cp3 |
talos-cp3 | 220 | Sat 01:00 | 2/2w/1m |
backup-controlplane |
talos-cp1 | 200 | Sat 02:00 | 2/2w/1m |
backup-node1 |
talos-worker1 | 201 | Sat 02:30 | 2/2w/1m |
backup-cp2 |
talos-cp2 | 210 | Sat 03:00 | 2/2w/1m |
backup-node3 |
talos-worker3 | 203 | Sat 03:30 | 2/2w/1m |
backup-node4 |
talos-worker4 | 211 | Sat 04:00 | 2/2w/1m |
backup-node5 |
talos-worker5 | 221 | Sat 04:30 | 2/2w/1m |
backup-win11 |
Win11-Pro | 101 | Sat 05:00 | 2/2w/1m |
backup-node6 |
talos-worker6 | 222 | Sat 06:00 | 2/2w/1m |
backup-clawdbot |
clawdbot | 100 | Sat 07:00 | 2/2w/1m |
backup-node2 |
talos-worker2 | 202 | Sat 10:00 | 2/2w/1m |
backup-cp3-wed |
talos-cp3 | 220 | Wed 01:00 | 2/2w/1m |
backup-cp1-wed |
talos-cp1 | 200 | Wed 02:00 | 2/2w/1m |
backup-cp2-wed |
talos-cp2 | 210 | Wed 03:00 | 2/2w/1m |
backup-win11-wed |
Win11-Pro | 101 | Wed 05:00 | 2/2w/1m |
Retention shorthand: keep-last=2, keep-weekly=2, keep-monthly=1 (per VM per storage; the Wed+Sat control-plane pairs prune as one group).
All jobs run with notification-mode: notification-system — the legacy per-job
mailto was silently dead (no SMTP relay on the nodes; failures went nowhere).
ntfy-alerts → http://192.168.88.19:2586/homelab-alertsProxmox: {{ title }}, priority high)route-to-ntfy: severity warning + error → ntfy-alertspvesh create /cluster/notifications/endpoints/webhook expects header| Setting | Value |
|---|---|
| Type | NFS |
| Server | 192.168.88.19 (Synology DS920+) |
| Export | /volume1/proxmox-backup |
| Mount path | /mnt/pve/synology-backup |
| Content | backup |
timeo — Critical Settingvzdump writes large zstd streams directly to NFS. The default timeo=50
(5 s) is too short — during a flush of a 40–100 GB file, writes can stall longer
and fail with:
E: got a write error: Input/output error
Fix: use timeo=600,retrans=5 (60 s timeout, 5 retries) on the NFS storage.
Set in PVE datacenter storage config or /etc/pve/storage.cfg. Verify:
ssh [email protected] "mount | grep synology-backup | grep timeo"
# Should show timeo=600,retrans=5
# Proxmox dashboard at http://192.168.88.100:9099/ — Backup Status card
# Via pvesh on a Proxmox host
ssh [email protected]
pvesh get /cluster/backup
pvesh get /nodes/pve1/tasks --typefilter vzdump --limit 10
# What's on the Synology backup store
pvesh get /nodes/pve1/storage/synology-backup/content --content backup
| Location | Tool | Retention | Trigger |
|---|---|---|---|
Synology (/volume1/proxmox-backup) |
Proxmox prune-backups |
keep-last 1 (Talos) / 2 (clawdbot, Win11) | Auto at end of each job |
Because each VM is backed up twice a week against keep-last=1, the Synology
holds the most recent backup per Talos VM at any time (the Wednesday run
prunes the previous Saturday's, and vice-versa).
E: got a write error: Input/output error
Cause: NFS timeo too low for large writes. Verify mount options:
ssh [email protected] "mount | grep synology-backup | grep timeo"
# Must show timeo=600,retrans=5
If wrong, check /etc/pve/storage.cfg — PVE may have reset mount options.
ssh [email protected] "pvesh get /nodes/pve1/tasks --typefilter vzdump --limit 20"
# Get the failing task UPID, then:
pvesh get /nodes/pve1/tasks/<UPID>/log
ssh [email protected] "pvesm status | grep synology-backup"
# active = mounted OK. If inactive, check the Synology NFS service and
# /volume1/proxmox-backup export permissions for the Proxmox host IPs.