[PATCH pve-storage 09/13] storage: add volume_support_qemu_snapshot
Alexandre Derumier
alexandre.derumier at groupe-cyllene.com
Wed Jul 9 18:21:58 CEST 2025
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>
---
ApiChangeLog | 8 ++++++++
src/PVE/Storage.pm | 15 +++++++++++++++
src/PVE/Storage/DirPlugin.pm | 10 ++++++++++
src/PVE/Storage/LVMPlugin.pm | 7 +++++++
src/PVE/Storage/Plugin.pm | 20 ++++++++++++++++++++
src/PVE/Storage/RBDPlugin.pm | 6 ++++++
6 files changed, 66 insertions(+)
diff --git a/ApiChangeLog b/ApiChangeLog
index 12eef1f..68e94fd 100644
--- a/ApiChangeLog
+++ b/ApiChangeLog
@@ -29,6 +29,14 @@ Future changes should be documented in here.
* Introduce rename_snapshot() plugin method
This method allow to rename a vm disk snapshot name to a different snapshot name.
+* Introduce volume_support_qemu_snapshot() plugin method
+ This method is used to known if the a snapshot need to be done by qemu
+ or by the storage api.
+ returned values are :
+ 'internal' : support snapshot with qemu internal snapshot
+ 'external' : support snapshot with qemu external snapshot
+ undef : don't support qemu snapshot
+
## Version 11:
* Allow declaring storage features via plugin data
diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm
index e0b79fa..b796908 100755
--- a/src/PVE/Storage.pm
+++ b/src/PVE/Storage.pm
@@ -2370,6 +2370,21 @@ sub rename_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 10e4f70..3e92383 100644
--- a/src/PVE/Storage/DirPlugin.pm
+++ b/src/PVE/Storage/DirPlugin.pm
@@ -314,4 +314,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';
+
+ my $type = $scfg->{'external-snapshots'} ? 'external' : 'internal';
+ return $type;
+}
+
1;
diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm
index 2441e59..be411e5 100644
--- a/src/PVE/Storage/LVMPlugin.pm
+++ b/src/PVE/Storage/LVMPlugin.pm
@@ -861,4 +861,11 @@ sub rename_snapshot {
die "rename_snapshot is not implemented for $class";
}
+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 6b2dc32..aab2024 100644
--- a/src/PVE/Storage/Plugin.pm
+++ b/src/PVE/Storage/Plugin.pm
@@ -2262,6 +2262,26 @@ sub new_backup_provider {
die "implement me if enabling the feature 'backup-provider' in plugindata()->{features}\n";
}
+=pod
+
+=head3 volume_support_qemu_snapshot
+
+ $blockdev = $plugin->volume_support_qemu_snapshot($storeid, $scfg, $volname)
+
+Returns a string with the type of snapshot that qemu can do for a specific volume
+
+'internal' : support snapshot with qemu internal snapshot
+'external' : support snapshot with qemu external snapshot
+undef : don't support qemu snapshot
+=cut
+
+sub volume_support_qemu_snapshot {
+ my ($class, $storeid, $scfg, $volname) = @_;
+
+ my $format = ($class->parse_volname($volname))[6];
+ return 'internal' if $format eq 'qcow2';
+}
+
sub config_aware_base_mkdir {
my ($class, $scfg, $path) = @_;
diff --git a/src/PVE/Storage/RBDPlugin.pm b/src/PVE/Storage/RBDPlugin.pm
index ee33006..45f8a7f 100644
--- a/src/PVE/Storage/RBDPlugin.pm
+++ b/src/PVE/Storage/RBDPlugin.pm
@@ -1061,4 +1061,10 @@ sub rename_snapshot {
die "rename_snapshot is not implemented for $class";
}
+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