5
0
mirror of git://git.proxmox.com/git/pve-storage.git synced 2025-02-25 17:57:31 +03:00

fix #1611: implement import of base-images for LVM-thin Storage

for base images we call the volume_import of the parent plugin and pass
it as vm-image instead of base-image, then convert it back as base-image

Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
This commit is contained in:
Hannes Duerr 2023-12-19 15:03:06 +01:00 committed by Fabian Grünbichler
parent 3e5f91823a
commit f8a368c63c

View File

@ -383,6 +383,56 @@ sub volume_has_feature {
return undef;
}
sub volume_import {
my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, $base_snapshot, $with_snapshots, $allow_rename) = @_;
my ($vtype, $name, $vmid, $basename, $basevmid, $isBase, $file_format) =
$class->parse_volname($volname);
if (!$isBase) {
return $class->SUPER::volume_import(
$scfg,
$storeid,
$fh,
$volname,
$format,
$snapshot,
$base_snapshot,
$with_snapshots,
$allow_rename
);
} else {
my $tempname;
my $vg = $scfg->{vgname};
my $lvs = PVE::Storage::LVMPlugin::lvm_list_volumes($vg);
if ($lvs->{$vg}->{$volname}) {
die "volume $vg/$volname already exists\n" if !$allow_rename;
warn "volume $vg/$volname already exists - importing with a different name\n";
$tempname = $class->find_free_diskname($storeid, $scfg, $vmid);
} else {
$tempname = $volname;
$tempname =~ s/base/vm/;
}
($storeid,my $newname) = PVE::Storage::parse_volume_id($class->SUPER::volume_import(
$scfg,
$storeid,
$fh,
$tempname,
$format,
$snapshot,
$base_snapshot,
$with_snapshots,
$allow_rename
));
$volname = $class->create_base($storeid, $scfg, $newname);
}
return "$storeid:$volname";
}
# used in LVMPlugin->volume_import
sub volume_import_write {
my ($class, $input_fh, $output_file) = @_;