--- PVE/Storage/LVMPlugin.pm | 11 ++++++++--- PVE/Storage/LvmThinPlugin.pm | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/PVE/Storage/LVMPlugin.pm b/PVE/Storage/LVMPlugin.pm index 9633e4c..ed8afa1 100644 --- a/PVE/Storage/LVMPlugin.pm +++ b/PVE/Storage/LVMPlugin.pm @@ -509,15 +509,14 @@ sub volume_export_formats { return volume_import_formats($class, $scfg, $storeid, $volname, $base_snapshot, $with_snapshots); } -sub volume_export { +sub __volume_export { my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, $base_snapshot, $with_snapshots) = @_; die "volume export format $format not available for $class\n" if $format ne 'raw+size'; die "cannot export volumes together with their snapshots in $class\n" if $with_snapshots; - die "cannot export a snapshot in $class\n" if defined($snapshot); die "cannot export an incremental stream in $class\n" if defined($base_snapshot); - my $file = $class->path($scfg, $volname, $storeid); + my $file = $class->path($scfg, $volname, $storeid, $snapshot); my $size; # should be faster than querying LVM, also checks for the device file's availability run_command(['/sbin/blockdev', '--getsize64', $file], outfunc => sub { @@ -529,6 +528,12 @@ sub volume_export { run_command(['dd', "if=$file", "bs=64k"], output => '>&'.fileno($fh)); } +sub volume_export { + my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, $base_snapshot, $with_snapshots) = @_; + die "cannot export a snapshot in $class\n" if defined($snapshot); + __volume_export($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, $base_snapshot, $with_snapshots); +} + sub volume_import_formats { my ($class, $scfg, $storeid, $volname, $base_snapshot, $with_snapshots) = @_; return () if $with_snapshots; # not supported diff --git a/PVE/Storage/LvmThinPlugin.pm b/PVE/Storage/LvmThinPlugin.pm index ccf5b7b..3c55db4 100644 --- a/PVE/Storage/LvmThinPlugin.pm +++ b/PVE/Storage/LvmThinPlugin.pm @@ -368,4 +368,19 @@ sub volume_has_feature { return undef; } +sub volume_export_formats { + my ($class, $scfg, $storeid, $volname, $snapshot, $base_snapshot, $with_snapshots) = @_; + # The difference to LVM-non-thin is that we *can* export snapshots + return $class->SUPER($class, $scfg, $storeid, $volname, $base_snapshot, $with_snapshots); +} + +sub volume_export { + my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, $base_snapshot, $with_snapshots) = @_; + # LVMPlugin checks the $snapshot parameter here, we don't. + # But we need to activate them: + $class->activate_volume($storeid, $scfg, $volname, $snapshot) if defined($snapshot); + PVE::Storage::LVMPlugin::__volume_export($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, $base_snapshot, $with_snapshots); + $class->deactivate_volume($storeid, $scfg, $volname, $snapshot) if defined($snapshot); +} + 1; -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel