[pve-devel] About PVE Backup Integration Guide

Fiona Ebner f.ebner at proxmox.com
Mon Mar 17 11:53:13 CET 2025


Am 17.03.25 um 08:02 schrieb Prashant Patil:
>> The block tracking is ideally done via QEMU, then you don't require any special features for the underlying storages.
> 
> Yes, we were able to get sector map of disks present on 'Directory' storage type. However, for other storage types such as lvm, lvm-thin, zfs which supports raw disk format, here we could get entire disk as allocated which is not the case in real. I could not find much information on this, hence wanted to know whether this by-design behaviour or we are missing something? Pasting output of qemu-img map below for the 2 GB disk on zfs. Have also tried getting map over ndb but got the same result. Is there anything that we are missing here?
> 
> root at be-proxmox1:/dev/pve# qemu-img map -f raw --output=json /dev/zvol/zfs1/vm-105-disk-2
> [{ "start": 0, "length": 2147483648, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": 0}]

That sounds like you want to roll your own external solution instead of
using the backup provider API that is currently being developed. With
that API, you get the images to be backed-up as as NBD exports. For
incremental backup, you can read the dirty bitmap. This can also be done
via NBD. Again, then you don't need to worry about the underlying
storage layer at all to support certain features.

>> certain storage types do not support snapshots. In such cases, what is the recommended way to take backup of the running VM?
> 
> As mentioned earlier, we have found few storage devices which does not support snapshot, but have found that we can take individual disk snapshot through 'blockdev-snapshot-sync'. If we have to take backup of the VM, then are we supposed to use this command to snapshot all VM disks?

Backups in QEMU do not use explicit snapshots. A copy-before-write
filter is inserted on top of the source disk in QEMU's block graph. When
new guest writes happen during backup, old data is first copied away to
a fleecing image (or for regular backup directly to the backup target).
The backup provider API then also inserts a snapshot-access node that is
exported via NBD and allows reading the data from the time of the backup
in a consistent fashion (hence "snapshot-access", it's a
virtual/implicit snapshot).

See also this diagram [0].

> [guest]                   [NBD export]
>    |                            |
>    | root                       | root
>    v                 file       v
> [copy-before-write]<------[snapshot-access]
>    |           |
>    | file      | target
>    v           v
> [active-disk] [temp.qcow2]

Best Regards,
Fiona

[0]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg876056.html




More information about the pve-devel mailing list