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.eb...@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