Targeted path list
Choose which files and directories to back up. The defaults cover the essentials (/etc/., /var/lib/pve-cluster/., /root/.ssh, …) and you can add your own paths.
Periodic backup of selected configuration files of the Proxmox VE nodes (/etc, /var/lib/pve-cluster, crontabs, SSH keys, custom scripts). Use it to recover from a failed node or an accidental misconfiguration.
Choose which files and directories to back up. The defaults cover the essentials (/etc/., /var/lib/pve-cluster/., /root/.ssh, …) and you can add your own paths.
Trigger a run manually from the UI, or schedule recurring runs with a cron expression, using the built-in editor that shows a human-readable description and the next occurrence.
Each run is stored as a separate version in a local folder. The Folder setting Number to keep limits how many runs are kept: older runs are deleted automatically.
Push every backup as a Git commit to a remote repository. You get the full configuration history, with diffs, blame, code review and the other Git tools.
Add the Folder Size widget (CE), or the additional Git Size widget (EE), to any Dashboard to track backup growth per node.
Every run shows up in the global Task Tracker with rich logs (per-resource progress, per-step errors): find what broke without grepping a separate log.
Why a config backup module when you already do disk / VM backups?
To restore a single hook in /etc/pve or one SSH key, take it from the latest backup. You do not mount a full Proxmox Backup Server (PBS) dump or boot a recovery image.
After you wipe a node and start fresh, copy back /etc, /var/lib/pve-cluster, your crontabs and SSH keys. You are back online in minutes, not hours.
With the Git destination, every run is a commit that you can diff in your Git tools. Find out when corosync.conf changed, and notice when the nodes drift apart.
PBS is made for VMs, not for the configuration of a node. Node Protect covers the gap that PBS leaves open on purpose.
Node Protect connects over SSH to every online node of the cluster and packs the configured paths with tar. tar stays on the file system of each path and skips the files that cannot be read. Offline nodes are skipped.
A backup has two possible destinations: the Folder destination and the Git destination (Enterprise Edition). The paths are the same for both destinations: one path per line in Directory or file to backup.
Both destinations follow the same schedule. With Enable scheduling on, each destination that is itself enabled runs at the Cron Schedule.
Each run creates a folder in the application data directory, named after the run time (yyyy-MM-dd-HH-mm-ss). The folder holds one archive per node, named <node>-config.tar.gz.
| Action | What it does |
|---|---|
| Backup | Starts a backup immediately in the background. The button is disabled until the Folder destination is enabled in the settings |
| Delete | After confirmation, deletes the selected archives and their records |
| Download (per row) | Downloads the archive of that node |
| Show log (per row) | Opens the log of the backup of that node |
| Refresh | Reloads the grid |
Retention: the Folder setting Number to keep says how many runs to keep. After a run in which every node succeeded, only that number of newest runs is kept and the older ones are deleted. If the backup of at least one node fails, retention is not applied for that run. This way a good backup is never deleted to make room for an incomplete one. When every node fails and the run wrote no archive, its folder is deleted.
EE Each run does three things, in this order:
.gitignore from the settings.auto-commit at followed by the date.The Push button is a split button, disabled until the Git destination is enabled. Sync from remote and Open remote repository appear only when Remote Url is set:
| Action | What it does |
|---|---|
| Push | Runs backup, commit and push immediately in the background |
| Reset | After confirmation, deletes the local repository and starts an empty one, in the background. The remote is not touched until the next push |
| Sync from remote | After confirmation, deletes the local repository and clones the remote branch again, in the background |
| Open remote repository | Opens the Remote Url in a new browser tab |
| Download (per row) | Downloads the files of that commit as a .tar.gz archive |
Expanding a commit row lists the changed files with their status and path.
| Widget | Content |
|---|---|
| Folder Size | Size of the folder backups over time, with the date of the last run |
| Git Size EE | Size of the Git repository over time, with the date of the last run |
| Daily Status EE | Successful and failed folder backups per day (last 14 days) |
General
Enable scheduling
Turns the scheduled backup on or off. With it off nothing runs by itself on the cluster; Backup, started by hand, stays available
Cron Schedule
When the scheduled backup runs (default: 06:00 daily)
Directory or file to backup
Required. One path per line. Default: /etc/., /var/lib/pve-cluster/., /var/lib/ceph/., /var/spool/cron/crontabs, /root/.ssh, /root/scripts, /root/backup, /root/.bashrc, /root/.profile. Edit to suit your node layout
Folder tab
| Setting | Default | Purpose |
|---|---|---|
| Enabled | off | Enable local folder backup destination |
| Number to keep | 30 | Maximum number of past backups to retain in the folder (minimum 1) |
Git tab EE
| Setting | Default | Purpose |
|---|---|---|
| Enabled | off | Enable the Git destination: each scheduled backup commits and pushes the protected files |
| Remote Url | - | Required. URL of the remote Git repository |
| Remote Branch Name | - | Required. Branch of the remote that receives the commits |
| Display Name / Email | - | Required. Author identity recorded on every commit |
| Username / Password | - | Required. Credentials used to authenticate with the remote |
| .gitignore file | */etc/pve/nodes/*/lrm_status*/etc/pve/.rrd |
Content of the .gitignore written to the repository: paths matching these patterns are not committed |
Assign these to a role under Security.
| Permission | Allows |
|---|---|
| Node Protect | Open the module and its Overview page |
| Folder, Git | Open the page with that name (one permission per page) |
| Folder Size, Git Size EE, Daily Status EE | Use the dashboard widget with that name (one permission per widget) |
| FolderBackup: Backup / Delete / Download | Use the button with that name on the Folder page (one permission per button) |
| Git: Push / Reset repository / Sync from remote / Download EE | Use the entry with that name on the Git page (one permission per entry). Reset and Sync from remote are entries of the Push button, so they also need Push |
| Edit Settings | Change the module settings |
The built-in role of the module includes all of them. A custom role has to be given them explicitly: without the permission the button is hidden.
The module also follows the cluster permissions (Node: Read, see Security):
Requirements
SSH SSH access to the cluster nodes is required. Configure it under Admin Area → Proxmox VE Clusters → (cluster) → SSH Credentials: see SSH Configuration.
A PAM user (e.g. root@pam) is needed only when the SSH auth method is Same as WEB API.
Proxmox VE privileges: the base (PVEAuditor) is enough. It works over SSH.
The base and the rules common to all modules are in Proxmox VE Permissions.