This check ensure that no volume can have snapshots where we are not able to migrate it. --- PVE/QemuMigrate.pm | 9 ++++++++- PVE/QemuServer.pm | 11 +++++++---- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index ef5d9e6..ce7a5a7 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -226,6 +226,7 @@ sub sync_disks { my $volhash = {}; my $cdromhash = {}; + my $keyhash = {}; my $sharedvm = 1; @@ -251,7 +252,7 @@ sub sync_disks { # and add used, owned/non-shared disks (just to be sure we have all) PVE::QemuServer::foreach_volid($conf, sub { - my ($volid, $is_cdrom) = @_; + my ($volid, $is_cdrom, $key) = @_; return if !$volid; @@ -281,6 +282,7 @@ sub sync_disks { if !$owner || ($owner != $self->{vmid}); $volhash->{$volid} = 1; + $keyhash->{$volid} = $key; }); if ($self->{running} && !$sharedvm) { @@ -301,6 +303,11 @@ sub sync_disks { #if a basename exists there must be a parent. my $basename = (PVE::Storage::parse_volname($self->{storecfg}, $volid))[3]; die "can't migrate '$volid' as it's a clone of '$basename'" if $basename; + + #check if volume is used in snapshot + die "Remove all snapshots befor migrate.\n" + if PVE::QemuServer::is_volume_in_use($self->{storecfg}, $conf, $keyhash->{$volid}, $volid) + && $scfg->{type} eq 'lvmthin'; } } } diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 666b756..de95306 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2661,18 +2661,20 @@ sub foreach_volid { my ($conf, $func) = @_; my $volhash = {}; + my $keyhash = {}; my $test_volid = sub { - my ($volid, $is_cdrom) = @_; + my ($volid, $is_cdrom, $key) = @_; return if !$volid; $volhash->{$volid} = $is_cdrom || 0; + $keyhash->{$volid} = $key; }; foreach_drive($conf, sub { my ($ds, $drive) = @_; - &$test_volid($drive->{file}, drive_is_cdrom($drive)); + &$test_volid($drive->{file}, drive_is_cdrom($drive), $ds); }); foreach my $snapname (keys %{$conf->{snapshots}}) { @@ -2680,12 +2682,13 @@ sub foreach_volid { &$test_volid($snap->{vmstate}, 0); foreach_drive($snap, sub { my ($ds, $drive) = @_; - &$test_volid($drive->{file}, drive_is_cdrom($drive)); + + &$test_volid($drive->{file}, drive_is_cdrom($drive), $ds); }); } foreach my $volid (keys %$volhash) { - &$func($volid, $volhash->{$volid}); + &$func($volid, $volhash->{$volid}, $keyhash->{$volid}); } } -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel