Backing up Proxmox VMs with Veeam

Recently Veeam came with official support for backup and restore of Proxmox Virtual Environment, in this post we'll take a look at how to configure Veeam Backup for a Proxmox VE cluster.

Official documentation for the Proxmox support in Veeam can be found here

The Veeam architecture looks like the following

Veeam architecture for Proxmox

As we can see the Veeam Backup server connects to a PVE host via the Proxmox plugin. The backup jobs are orchestrated through a Veeam worker installed on the PVE host and it is through this the backups are sent back to the Veeam Backup repository.

Let's see how it is configured

Environment

The environment we'll use in this post is a Proxmox Cluster running Ceph as the storage backend on three PVE hosts. They are all running Proxmox 8.3

PVE cluster

The Veeam Backup and Replication server is running the (as of time of writing) the latest version 12.2.

In the PVE cluster there's a few VMs running, a couple of Ubuntu servers and a Windows server.

Adding PVE to the Veeam inventory

The first step is to add each PVE host to the Veeam inventory.

This is a caveat that differs from i.e. backing up a vSphere cluster where you connect Veeam to vCenter and discover the resources through those APIs. In Proxmox the cluster can be managed from each of the nodes and there's, at least not at this point, no centralized management API.

From the Veeam Backup and Replication server we'll start the Add server wizard for Virtualization platforms and select Proxmox VE

Add server wizard

We'll specify the IP address of the first PVE host (from the official Veeam documentation it seems FQDN is not supported at this time). Note that we do not have to add the port

Specify IP address of PVE host

Next we'll specify the root credentials of the host

Note that the Veeam documentation specifies that the root credentials is required. Hopefully they'll come up with a less permissive solution to this going forward

Create credential object

Specify credential

Next we'll accept the SSH key fingerprint warning

Accept ssh key

The Veeam Proxmox plugin will query the PVE host and we'll have to specify the storage to save the snapshots on before the worker will transfer it to the Veeam backup repository server. Notice that our Ceph storage is not available here so we'll select the local datastore on the host

Select local storage

At this point Veeam will register the PVE host in it's inventory and hopefully the process will succeed

PVE host registered

Summary

Again, note that there's a few caveats (or "Considerations and Limitations" as Veeam refers them)

  • You must use the official Proxmox ISO image
  • Ensure that the hosts have been assigned a PVE system UUID, and do not use FQDNs
  • All nodes must be added separately
  • After adding the nodes you can not change the name of the cluster

Deploy worker

After successfully registering the PVE host in the Veeam inventory we'll can deploy a worker to the PVE node

Add worker dialog box

The worker can be deployed to Ceph but I'll select the local lvm storage for this

Select storage for worker

We'll give the worker a name and specify the number of concurrent tasks allowed. I've set this to 2, whereas the default is 4. From this we can also hit the advanced button to override the default vCPUs and RAM for the VM, but we'll leave the default

Worker settings

Next we'll specify the networking for the node

Networking settings

And before deploying we'll get a summary of our settings

Worker settings summary

After a few minutes (depending on the infrastructure) our worker should be deployed and hopefully report a successful connection to our Veeam server

Worker deployed

We can also verify it from the Proxmox UI. We'll notice that the VM is shutdown. The VM will only be running during actual backup (and restore) operations and otherwise shutdown. The Veeam server/plugin will orchestrate all of this for us

Verify worker in Proxmox

Now we can go ahead and add our remaining PVE hosts. We'll also deploy workers for each of them as this is the recommended best practice from Veeam.

PVE hosts added to inventory

Our workers can be found in the Backup Proxies view

PVE workers

With this in place we're ready to perform backups in our Proxmox environment

Test backup of workload

Note that there are a few limitations to the backup support. Please refer to this list from the official Veeam documentation

We'll perform a simple backup of one of the virtual machines to test the functionality

To test the backup of the VM we'll first write to a file inside the running VM

Write to a file

Now we'll start the New Backup Job wizard for Proxmox VE

Create backup job

Next we'll choose the virtual machines to include in this job. We could also have chosen the whole cluster or one or more of the hosts, but there's no way to choose by e.g. tags as there is with e.g. vSphere environments.

Choose VM to backup

VM chosen

Next we'll choose the Backup repository and the days to store the backup

Choose backup repository

For this job we'll not set a schedule

Choose backup repository

With this in place we get the summary and the option to start the job when the wizard finishes

Summary

Since we chose to start the job immediately, the job is now starting

Job starting

Over in our PVE UI we can see that the Veeam worker node has been started by the Veeam plugin

Veeam worker started

After a while the backup should be in process

Backup in process

And after another short while the backup is finished

Backup finished

Test restore of VM

Now, to test a restore of the VM we'll first add a few more lines to the text file

Add data to file

Let's now shutdown the VM and perform a restore of it

We'll find the backup job and initiate a full restore of the Proxmox VM

Start restore job

In the job we have only one VM and one restore point so we'll accept the VM restore selection

VM restore selection

Next we could have selected to restore the VM to a different host, but we'll go ahead with the same location

Restore location

We get a warning about an existing VM with the same id, which we'll accept

Existing VM warning

We'll need to type in a reason for the restore

Restore reason

And finally we have the summary where we can choose to start the restore job

Start restore job from summary

In the Proxmox UI we can see that the Veeam worker has started, that it has deleted the old VM and started restoring the VM from backup

Proxmox vm operations

Depending on the underlying infrastructure (e.g. hypervisor host, network and storage) the restore operation takes some time.

Restore finished

After the restore has finished we can jump in to the VM and check the contents of our file

Verify restore of VM

For these kind of restore operations, a File-level Restore would be more efficient. Check out this post for an example of this

Another use case for utilizing Veeam for Proxmox, if you already are running Veeam for your virtual environment, is to restore a VM from e.g. vSphere to Proxmox. I'll do a write up on this in an upcoming post.

Summary

This post has shown how to configure Veeam for backup and restore of a Proxmox Virtual Environment. We've seen how the architecture looks like with the Veeam server(s) and the workers which are fully managed by the Veeam server it self. And we've also seen how to backup and restore a VM in a PVE cluster.

This is a promising start from Veeam and hopefully they'll continue their work on the PVE integration. I would like to see a solution more like the VMware one where we don't have to add each of the hosts separately (I do understand that this depends on the Proxmox APIs). The same goes for the backup job selection, it would be nice to be able to add resources to a backup job dynamically (e.g. via tags or something similar). A more restrictive permission for the integration is also something they need to come up with.

As of my understanding there's also a need for the Veeam workers to download their updates from the internet. Hopefully Veeam will come with a solution for this going forward so we'll have full support for air-gapped environments.

The APIs for Veeam does not support Proxmox at this time, this is also something I hope they'll rectify going forward.

Thanks for reading, and please feel free to reach out if you have any questions or comments

This page was modified on December 2, 2024: Added link to flr post