From d213ba299d4a47b69b56eb2cc60e1a50d6b1df41 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Fri, 25 Jun 2021 14:32:05 +0200 Subject: [PATCH] migrate: use correct target storage id for checks The '--targetstorage' parameter does not apply to shared storages. Example for a problem solved with the enabled check: Given a VM with images only on a shared storage 'storeA', not available on the target node (i.e. restricted by the nodes property). Then using '--targetstorage storeB' would make offline migration suddenly "work", but of course the disks would not be accessible and then trying to migrate back would fail... Example for a problem solved with the content type check: if a VM had a shared ISO image, and there was a '--targetstorage storeA' option, availablity of the 'iso' content type is checked for 'storeA', which is wrong as the ISO would not be moved to that storage. Signed-off-by: Fabian Ebner --- PVE/QemuMigrate.pm | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 5ecc2a71..b7812ddc 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -337,9 +337,15 @@ sub prepare { my ($sid, $volname) = PVE::Storage::parse_volume_id($volid, 1); # check if storage is available on both nodes - my $targetsid = PVE::QemuServer::map_storage($self->{opts}->{storagemap}, $sid); - my $scfg = PVE::Storage::storage_check_enabled($storecfg, $sid); + + my $targetsid; + if ($scfg->{shared}) { + $targetsid = $sid; + } else { + $targetsid = PVE::QemuServer::map_storage($self->{opts}->{storagemap}, $sid); + } + my $target_scfg = PVE::Storage::storage_check_enabled( $storecfg, $targetsid, @@ -472,9 +478,16 @@ sub scan_local_volumes { my ($sid, $volname) = PVE::Storage::parse_volume_id($volid); - my $targetsid = PVE::QemuServer::map_storage($self->{opts}->{storagemap}, $sid); # check if storage is available on both nodes my $scfg = PVE::Storage::storage_check_enabled($storecfg, $sid); + + my $targetsid; + if ($scfg->{shared}) { + $targetsid = $sid; + } else { + $targetsid = PVE::QemuServer::map_storage($self->{opts}->{storagemap}, $sid); + } + PVE::Storage::storage_check_enabled($storecfg, $targetsid, $self->{node}); return if $scfg->{shared};