Skip to content

Node Protect

Per cluster

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.

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.

On-demand or scheduled

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.

Task Tracker integration

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?

Recover a node, not a whole disk image

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.

Survive a node reinstall

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.

Catches what PBS doesn't

PBS is made for VMs, not for the configuration of a node. Node Protect covers the gap that PBS leaves open on purpose.

  • Overview: introduction to the module and its dashboard widgets
  • Folder: backups stored in the local folder destination, one row per node and run, with start, end, duration, file name, status and size. See Folder destination
  • EE Git: commits of the local Git repository with creation date, version id, version name and author. Expanding a row lists the changed files. See Git destination. In the Community Edition the page shows that a subscription is required

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:

  1. It rebuilds the working copy of a local Git repository: one folder per node, plus the .gitignore from the settings.
  2. It creates a commit named auto-commit at followed by the date.
  3. It pushes the commit to the configured remote branch.

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)
Show all settings

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

  • Default: off

Cron Schedule

When the scheduled backup runs (default: 06:00 daily)

  • Default: 0 6 * * *

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

  • Default: preset list

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):

  • Folder lists only the backups of the nodes the user can read; Backup, which runs on every node, needs Read on every VM, node and storage of the cluster.
  • Git EE holds the configuration of every node: the page, Push, Reset, Sync and Download need Read on the whole cluster.
  • The widgets and the Overview count all the nodes of a cluster: they are shown only on the clusters where the user can read every VM, node and storage.

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.