> Alexandre Derumier via pve-devel <pve-devel@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.derum...@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 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel