From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Thomas Lamprecht <t.lamprecht@proxmox.com>
Cc: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
Philipp Storz <philipp.storz@bareos.com>
Subject: Re: [pve-devel] [PATCH storage v4 09/27] plugin: introduce new_backup_provider() method
Date: Wed, 2 Apr 2025 10:30:33 +0200 [thread overview]
Message-ID: <dktagxdpeqlvvmqhv2hr5n3dxmdh7nfyctluo64mwqgsimread@jbjcwstbk5fn> (raw)
In-Reply-To: <866f1cdd-780c-4012-b4fa-709ae1165891@proxmox.com>
On Tue, Apr 01, 2025 at 08:21:30PM +0200, Thomas Lamprecht wrote:
> Hi!
>
> Am 01.04.25 um 18:02 schrieb Andreas Rogge:
> > sorry for digging up that ancient mail, but I feel that's the best
> > starting point for me.
>
> For more current discussion it might be best to check out the recently
> posted v7 of this series, if nothing bigger comes up it should be very
> close to what gets applied for an initial version – i.e., one that will
> be supported for a long time, which does not necessarily mean that it
> cannot evolve.
>
> https://lore.proxmox.com/pve-devel/20250401173435.221892-1-f.ebner@proxmox.com/T/#t
>
> > Bareos investigates how to better integrate with Proxmox VE, so users
> > can take backups of virtual machines and restore them using Bareos.
>
> Great to hear!
>
> > Am 14.11.24 um 16:07 schrieb Fiona Ebner:
> >> The new_backup_provider() method can be used by storage plugins for
> >> external backup providers. If the method returns a provider, Proxmox
> >> VE will use callbacks to that provider for backups and restore instead
> >> of using its usual backup/restore mechanisms.
> > So we as a backup provider need to provide plugin code that will run as
> > part of PVE. If I understand correctly this must be implemented as a
> > Perl module. Also, PVE wants to trigger the backup itself.
>
> The interface is in Perl, the actual backup code can be whatever runs
> on the Proxmox VE base system, as that is based on Debian this means
> that there is a lot of flexibility. A colleague wrote a plugin in rust
> as proof of concept, we probably release that too as example.
>
> We can also decouple this more once the dust settles, there are some
> ideas floating around already, but they can be implemented later so
> ensuring that the actual base functionality works out is more important,
> as whatever the interface is, they will work similar but just using a
> different transport (e.g. say varlink over an FD instead of perl wrapper
> module).
>
> > This introduces a few hurdles for us:
> > First of all, we don't usually program in Perl, so that's going to be a
> > problem for us. We can probably implement something, but we probably
> > don't have any developer that can write Perl code that meets any kind of
> > professional standard.
>
> The Perl code required for a production quality interface is not that
> much, and certainly does not require in-depth perl experience. Perl
> is a mature language, for better or worse, that allowed and still
> allows all kind of users to create tools that can work fine if one keeps
> them simple, and as the core design is rather fixed here, it should not
> be that much work, and we certainly can help on questions or problems;
> just reach out on the developer list and point to your public plugin
> code.
>
> > To do its job[1], Bareos must be able to schedule backup and restore
> > jobs all by itself. If I understood correctly, backups utilizing one of
> > the plugins can be run by calling `vzdump`, so that this is at least
> > possible.
>
> Exactly, we want a native PVE implementation so that such plug-ins are
> actually nicely integrated and feel almost native (in the long run,
> missing a few bits for that), so users get a first-class experience
> on "both sides" of the backup and can also see what's going on at the
> source side of things, if they want.
>
> > However, what we've seen other vendors do is that they provide an API
> > where you just tell the system what VM you want to back up and then you
> > are provided with access to metadata (i.e. VM configuration, disk
> > layouts, nvram content, etc) and disk contents.
>
> You can send an API request that basically results in exactly that, just
> that the plugin is providing you the info then. A big advantage is that
> the user can also trigger backups from the PVE side and thus get a much
> better integration.
>
> > For restore it is mostly the same: you provide the metadata, get a set
> > of raw disks that you can write your data to and finally you just tell
> > the system that the VM restore is done.
>
> It's different but ensures that we can provide backup providers and
> their user a quasi native integration into PVE, ideally as close as
> possible to how PBS is integrated, this can IMO be also benefit for
> providers, and nothing that is possible with the methods you describe
> should become impossible with the methods we provide.
>
>
> >> 2. Restore API
> >>
> >> 2.1. Restore Mechanisms
> >>
> >> VM mechanism 'qemu-img':
> >>
> >> The backup provider gives a path to the disk image that will be
> >> restored. The path needs to be something 'qemu-img' can deal with,
> >> e.g. can also be an NBD URI or similar.
> > Um... that has nothing to do with what you provided when we take the
> > backup. Is there a reason PVE cannot provide a writeable block device to
> > restore to?
> > For Bareos this requirement would imply that we need an unpleasantly
> > large staging area on the PVE node to facilitate a restore: As we can
> > only stream the data we'd have to create a temporary disk image that PVE
> > can then read.
qemu-img directly supports various protocols, and a "path" in this
case is not necessarily a *file*, I'll go into more detail below.
> > This sounds pretty inefficient - especially when
> > comparing with qmrestore's ability to just read read from stdin.
The reading from stdin is quite limited, does not support sparse files
efficiently, and does not support our live-restore feature.
If we can *pull* data out-of-order from the backup provider via a better
protocol (like NBD which Thomas mentioned), holes in the disks don't
need to be transferred over the network, and we could probably support
live-restore, where the VMs immediately start running *during* the
restore process. (qemu would simply treat read-requests from the guest
which have not yet been restored with a higher priority while otherwise
continuing to copy the data in-order in the background)
>
> Bareos could provide a NBD that is streamed directly from the backup
> repository, this should be quite efficient w.r.t. space usage.
> But as this was v4 and a few things changed, and I'm less involved as
> the actual author it might make more sense for her to answer this.
Some alternatives btw. are providing a fuse or ublk device on the PVE
side which pulls data from bareos (or to which bareos can push data
which, like qemu's "fleecing" mode, could store the not-yet restored
portions in temporary files, discarding them as they are read by/moved
to qemu).
*Technically* we could have a mode where we allocate the disks and "map"
them onto the system (potentially via nbd, or `rbd map` for ceph etc.)
*But* it would make live-restore impossible with that plugin.
Which is why the most flexible thing to do is to use a `qemu-img` call
and giving it the paths, or more precisely, the URLs to the disks.
So, for instance, if bareos allowed "pull" based access via nbd, this
would translate to:
$ qemu-img convert 'nbd://the.bareos.host/drive-scsi0' 'rbd:pool/vm-100-disk-0'
This would transfer from the backup host directly into the ceph storage.
While for live-restore, the regular `qemu` process would perform this in
the background while the VM is already running.
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-04-02 8:30 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 15:07 [pve-devel] [PATCH-SERIES qemu/common/storage/qemu-server/container/manager v4 00/27] backup provider API Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu v4 01/27] PVE backup: add target ID in backup state Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu v4 02/27] PVE backup: get device info: allow caller to specify filter for which devices use fleecing Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu v4 03/27] PVE backup: implement backup access setup and teardown API for external providers Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu v4 04/27] PVE backup: implement bitmap support for external backup access Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH common v4 05/27] test: lock file: get rid of END block that made test always pass Fiona Ebner
2024-11-14 19:46 ` [pve-devel] applied: " Thomas Lamprecht
2024-11-14 15:07 ` [pve-devel] [PATCH common v4 06/27] tools: run fork: allow running code in parent after fork Fiona Ebner
2024-11-14 19:46 ` [pve-devel] applied: " Thomas Lamprecht
2024-11-14 15:07 ` [pve-devel] [PATCH common v4 07/27] test: have lock file test use run_fork() helper Fiona Ebner
2024-11-14 19:46 ` [pve-devel] applied: " Thomas Lamprecht
2024-11-14 15:07 ` [pve-devel] [PATCH storage v4 08/27] add storage_has_feature() helper function Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH storage v4 09/27] plugin: introduce new_backup_provider() method Fiona Ebner
2025-04-01 16:02 ` Andreas Rogge
2025-04-01 18:21 ` Thomas Lamprecht
2025-04-02 8:30 ` Wolfgang Bumiller [this message]
2025-04-02 16:16 ` Andreas Rogge
2025-04-03 7:24 ` Wolfgang Bumiller
2025-04-03 16:08 ` Andreas Rogge
2025-04-04 7:15 ` Fabian Grünbichler
2025-04-02 8:33 ` Fiona Ebner
2025-04-03 8:06 ` Andreas Rogge
2025-04-02 16:01 ` Andreas Rogge
2024-11-14 15:07 ` [pve-devel] [PATCH storage v4 10/27] extract backup config: delegate to backup provider for storages that support it Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [POC storage v4 11/27] add backup provider example Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [POC storage v4 12/27] WIP Borg plugin Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu-server v4 13/27] backup: keep track of block-node size for fleecing Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu-server v4 14/27] module config: load nbd module at boot Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu-server v4 15/27] backup: allow adding fleecing images also for EFI and TPM Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu-server v4 16/27] backup: implement backup for external providers Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu-server v4 17/27] backup: implement restore " Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH qemu-server v4 18/27] backup restore: external: hardening check for untrusted source image Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 19/27] add LXC::Namespaces module Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 20/27] backup: implement backup for external providers Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 21/27] backup: implement restore " Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 22/27] external restore: don't use 'one-file-system' tar flag when restoring from a directory Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 23/27] create: factor out compression option helper Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 24/27] restore tar archive: check potentially untrusted archive Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH container v4 25/27] api: add early check against restoring privileged container from external source Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH manager v4 26/27] ui: backup: also check for backup subtype to classify archive Fiona Ebner
2024-11-14 15:07 ` [pve-devel] [PATCH manager v4 27/27] backup: implement backup for external providers Fiona Ebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dktagxdpeqlvvmqhv2hr5n3dxmdh7nfyctluo64mwqgsimread@jbjcwstbk5fn \
--to=w.bumiller@proxmox.com \
--cc=philipp.storz@bareos.com \
--cc=pve-devel@lists.proxmox.com \
--cc=t.lamprecht@proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal