rss logo

How to Back Up and Restore Proxmox Virtual Machines with vzdump

Proxmox logo

With the release of Proxmox VE 9, I recently had to migrate a server from Proxmox VE 8 to the latest version. I will not detail the migration procedure here, as the official documentation is already very comprehensive: Upgrade from Proxmox 8 to 9. Instead, this guide shows you how to create a reliable Proxmox virtual machine backup with vzdump — and how to restore it using qmrestore — to provide an additional safety net in case of an upgrade failure or other server operation issue. While this is not a replacement for a dedicated Proxmox Backup Server, it serves as an extra layer of protection. I strongly recommend backing up all your virtual machines using this method before performing any major maintenance tasks, ensuring you have a quick recovery solution in case of failure or incident.

This method is also ideal for migrating your Proxmox virtual machines to another server, even without shared storage.

Another key advantage is that the backup file can be exported to any medium, including cold storage, making archiving and future restoration easier.

Architecture Overview

Let’s consider the following scenario: a single Proxmox VE server hosting several virtual machines that we want to back up.

Proxmox server hosting three VMs on ZFS RAID10.

Backing Up a Proxmox Virtual Machine with vzdump

Since vzdump is a command-line tool, start by connecting to your Proxmox VE server via SSH as root:

user@host:~$ ssh -l root 192.168.1.200
  • List all available storage locations and select the one where you want to store your backup. In this example, we will use the ZFS_R10 storage:
root@pve:~# pvesm status
Name               Type     Status           Total            Used       Available        %
ZFS_R10         zfspool     active     15468593152      6815054108      8653539044   44.06%
local               dir     active       756262400        30017152       726245248    3.97%
local-zfs       zfspool     active       812571432        86326156       726245276   10.62%

Next, create a dedicated BACKUP folder inside the ZFS_R10 storage. This folder will store all your virtual machine backup files.

Proxmox server with three VMs and a dedicated backup folder on ZFS RAID10.
  • Navigate to /ZFS_R10 and create the BACKUP directory:
root@pve:~# cd /ZFS_R10
root@pve:~# mkdir BACKUP
  • Now we can run a backup using the vzdump command. Key options to know:
    • <ID>: the ID number of the virtual machine to back up.
    • --mode: defines the VM state during backup.
      • stop: safest method — the VM is shut down before backup and restarted afterwards.
      • snapshot: creates a live backup using a snapshot (minimal downtime).
      • suspend: pauses the VM during the backup process.
    • --compress: compression format. zstd is fast and offers good compression ratios.
    • --dumpdir: directory where the backup file will be stored.
root@pve:~# vzdump <ID> --mode stop --compress zstd --dumpdir <folder>
  • Example: backing up VM 100 to the /ZFS_R10/BACKUP/ folder:
root@pve:~# vzdump 100 --mode stop --compress zstd --dumpdir /ZFS_R10/BACKUP/

The vzdump command will create two files in the target directory:

  • .zst — the compressed backup archive.
  • .log — a log file with details of the backup process.
Proxmox vzdump command creating a ZSTD backup file and log file.

Once the backup is complete, you can export the BACKUP folder (and its files) to another host using the rsync command:

user@host:~$ rsync -av --progress root@192.168.1.200:/ZFS_R10/BACKUP /home/john/

For a detailed guide on rsync usage, see How to Use rsync with Examples.

Restoring a Proxmox Backup

After creating a backup, it is recommended to test it using the qmrestore command to ensure it can be restored successfully.

  • The qmrestore command uses the following parameters:
    • <archive>: the full path to the backup file.
    • <vmid>: the (unique) ID for the restored VM. Use --force to overwrite an existing VM with the same ID.
    • --storage <storage>: the target storage for the restored VM (check available storages with pvesm status).
root@pve:~# qmrestore <archive> <vmid> --storage <storage>
  • Example: restoring VM 100 as a new VM with ID 500 in the ZFS_R10 storage:
root@pve:~# qmrestore /ZFS_R10/BACKUP/vzdump-qemu-100-2025_08_10-19_40_07.vma.zst 500 --storage ZFS_R10