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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox