From: Andrei Perapiolkin via pve-devel <pve-devel@lists.proxmox.com>
To: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>,
"Proxmox VE development discussion" <pve-devel@lists.proxmox.com>
Cc: Andrei Perapiolkin <andrei.perepiolkin@open-e.com>
Subject: Re: [pve-devel] [pve-dev] Storage assisted copy feature for Proxmox storage plugin
Date: Thu, 9 Oct 2025 08:24:14 -0400 [thread overview]
Message-ID: <mailman.799.1760012989.390.pve-devel@lists.proxmox.com> (raw)
In-Reply-To: <1759473060.6ll3polgmk.astroid@yuna.none>
[-- Attachment #1: Type: message/rfc822, Size: 9566 bytes --]
From: Andrei Perapiolkin <andrei.perepiolkin@open-e.com>
To: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>, "Proxmox VE development discussion" <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [pve-dev] Storage assisted copy feature for Proxmox storage plugin
Date: Thu, 9 Oct 2025 08:24:14 -0400
Message-ID: <c52a0c66-6cac-4c02-9269-6cc24ada16ba@open-e.com>
Hi Fabian,
Use Cases:
1. Full volume copy performed on the same storage (storage_id).
2. New volume creation from a snapshot on the same storage (storage_id).
Currently, the full clone operation involves attaching both the source
and destination volumes to a Proxmox node and transferring data through it.
This method is network-intensive, impacting both the send and receive
channels of the Proxmox and storage nodes.
As a result, it can negatively affect VMs performing I/O operations on
the storage.
Expanding 'volume_export' and 'volume_impor't may not be the best
approach. Instead, introducing a new method—such as 'volume_copy' or
'copy_image'—could be more appropriate. This method would be triggered
when both the source and destination share the same storage_id,
optimizing the copy process. It would be especially beneficial for
ZFS-based storages, particularly those with complex rollback mechanisms.
With this approach, users could perform fast, full clones without
impacting network performance. Best regards, Andrei Perepiolkin
On 10/3/25 02:42, Fabian Grünbichler wrote:
> On October 3, 2025 2:15 am, Andrei Perapiolkin via pve-devel wrote:
>> Hi,
>>
>> Can the honorable community help me find an elegant way for
>> volume_import to identify the source volume origin type and name?
>>
>> I'm investigating this to implement storage-assisted copy (i.e.,
>> performing the volume copy entirely on the storage side).
>>
>> My initial assumption was that this could be achieved by defining custom
>> volume_export and volume_import functions.
>> However, may be there is a better way to do storage assisted copy.
> volume_export and volume_import are only used for a few specific cases
> (mainly offline migration of local disks, and offline remote migration
> of disks).
>
> for those you could define your own transport format that includes or
> just contains the relevant metadata to do a storage side copy - it would
> only be selected if the storage for the source and target volume both
> say they support that particular format.
>
> I assume your storage is shared, so you'd be more interested in the
> move disk/full clone case, which currently uses either a mirror block
> job (if the VM is running), qemu-img convert (if the VM is not running)
> or rsync (for container volumes). These mechanisms are all not
> extensible at the moment for storage plugins.
>
> Maybe you could describe for which tasks you would see a clear benefit
> for extending the interface to allow a storage plugin to provide a "copy
> volume A into volume B storage side" - for the live move disk it might
> be hard (without dirty bitmap trickery like we use for replication, but
> that might be an option?), for the offline moves it would probably be
> possible to somehow special case this and let plugins opt in, we've
> discussed this ourselves in the past..
>
>> P.S.
>> Just found out about
>> https://pve.proxmox.com/wiki/Storage_Plugin_Development:_Writing_a_Storage=
>> _Plugin_for_SSHFS
>> This is grate!
>> Many thanks for posting this article!
> Great that it found its intended audience! :)
>
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
prev parent reply other threads:[~2025-10-09 12:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-03 0:15 Andrei Perapiolkin via pve-devel
2025-10-03 6:42 ` Fabian Grünbichler
2025-10-09 12:24 ` Andrei Perapiolkin via pve-devel [this message]
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=mailman.799.1760012989.390.pve-devel@lists.proxmox.com \
--to=pve-devel@lists.proxmox.com \
--cc=andrei.perepiolkin@open-e.com \
--cc=f.gruenbichler@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.