[pve-devel] [PATCH pve-storage 10/10] storage : add volume_support_qemu_snapshot
Fabian Grünbichler
f.gruenbichler at proxmox.com
Fri Jul 4 13:51:21 CEST 2025
> Alexandre Derumier via pve-devel <pve-devel at lists.proxmox.com> hat am 04.07.2025 08:45 CEST geschrieben:
> Returns if the volume is supporting qemu snapshot:
> 'internal' : do the snapshot with qemu internal snapshot
> 'external' : do the snapshot with qemu external snapshot
> undef : does not support qemu snapshot
>
> Signed-off-by: Alexandre Derumier <alexandre.derumier at groupe-cyllene.com>
> ---
> src/PVE/Storage.pm | 19 +++++++++++++++++++
> src/PVE/Storage/DirPlugin.pm | 10 ++++++++++
> src/PVE/Storage/LVMPlugin.pm | 7 +++++++
> src/PVE/Storage/Plugin.pm | 13 +++++++++++++
> src/PVE/Storage/RBDPlugin.pm | 6 ++++++
> 5 files changed, 55 insertions(+)
>
> diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm
> index d83770c..e794f7b 100755
> --- a/src/PVE/Storage.pm
> +++ b/src/PVE/Storage.pm
> @@ -2350,6 +2350,25 @@ sub rename_volume {
> );
> }
>
> +# Returns the method type to take a snapshot with qemu:
> +# 'internal' : support snapshot with qemu internal snapshot
> +# 'external' : support do the snapshot with qemu external snapshot
> +# undef : don't support qemu snapshot
> +sub volume_support_qemu_snapshot {
> + my ($cfg, $volid) = @_;
> +
> + my ($storeid, $volname) = parse_volume_id($volid, 1);
> +
> + if ($storeid) {
> + my $scfg = storage_config($cfg, $storeid);
> +
> + my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
> +
> + return $plugin->volume_support_qemu_snapshot($storeid, $scfg, $volname);
> + }
> + return undef;
> +}
> +
> # Various io-heavy operations require io/bandwidth limits which can be
> # configured on multiple levels: The global defaults in datacenter.cfg, and
> # per-storage overrides. When we want to do a restore from storage A to storage
> diff --git a/src/PVE/Storage/DirPlugin.pm b/src/PVE/Storage/DirPlugin.pm
> index ae5d083..0f8776b 100644
> --- a/src/PVE/Storage/DirPlugin.pm
> +++ b/src/PVE/Storage/DirPlugin.pm
> @@ -315,4 +315,14 @@ sub get_import_metadata {
> };
> }
>
> +sub volume_support_qemu_snapshot {
> + my ($class, $storeid, $scfg, $volname) = @_;
> +
> + my $format = ($class->parse_volname($volname))[6];
> + return if $format ne 'qcow2';
this previously also worked for 'qed'?
> +
> + my $type = $scfg->{snapext} ? 'external' : 'internal';
> + return $type;
> +}
> +
> 1;
> diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm
> index ef010b8..3e3e48c 100644
> --- a/src/PVE/Storage/LVMPlugin.pm
> +++ b/src/PVE/Storage/LVMPlugin.pm
> @@ -1199,4 +1199,11 @@ sub get_snap_volname {
> return $class->get_snap_name($volname, $snapname);
> }
>
> +sub volume_support_qemu_snapshot {
> + my ($class, $storeid, $scfg, $volname) = @_;
> +
> + my $format = ($class->parse_volname($volname))[6];
> + return 'external' if $format eq 'qcow2';
> +}
> +
> 1;
> diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm
> index 68d17ff..bf190d2 100644
> --- a/src/PVE/Storage/Plugin.pm
> +++ b/src/PVE/Storage/Plugin.pm
> @@ -2292,6 +2292,19 @@ sub qemu_blockdev_options {
> return $blockdev;
> }
>
> +
> +# Returns the method type to take a snapshot with qemu:
> +# 'internal' : support snapshot with qemu internal snapshot
> +# 'external' : support do the snapshot with qemu external snapshot
> +# undef : don't support qemu snapshot
> +
> +sub volume_support_qemu_snapshot {
> + my ($class, $storeid, $scfg, $volname) = @_;
> +
> + my $format = ($class->parse_volname($volname))[6];
> + return 'internal' if $format eq 'qcow2';
this previously also worked for 'qed'
> +}
> +
> # Used by storage plugins for external backup providers. See PVE::BackupProvider::Plugin for the API
> # the provider needs to implement.
> #
> diff --git a/src/PVE/Storage/RBDPlugin.pm b/src/PVE/Storage/RBDPlugin.pm
> index 883b0e4..8065cfc 100644
> --- a/src/PVE/Storage/RBDPlugin.pm
> +++ b/src/PVE/Storage/RBDPlugin.pm
> @@ -1057,4 +1057,10 @@ sub rename_volume {
> return "${storeid}:${base_name}${target_volname}";
> }
>
> +sub volume_support_qemu_snapshot {
> + my ($class, $storeid, $scfg, $volname) = @_;
> +
> + return 'internal' if !$scfg->{krbd};
> +}
> +
> 1;
> --
> 2.39.5
More information about the pve-devel
mailing list