When replica is enabled and the target host is the reptarget, the most VM data are on the new target. --- PVE/Storage.pm | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/PVE/Storage.pm b/PVE/Storage.pm index 68c39ca..6b8d108 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -32,6 +32,7 @@ use PVE::Storage::GlusterfsPlugin; use PVE::Storage::ZFSPoolPlugin; use PVE::Storage::ZFSPlugin; use PVE::Storage::DRBDPlugin; +use PVE::ReplicationTools; # Storage API version. Icrement it on changes in storage API interface. use constant APIVER => 1; @@ -653,14 +654,27 @@ sub storage_migrate { my $zfspath = "$scfg->{pool}\/$volname"; my $snap = ['zfs', 'snapshot', "$zfspath\@__migration__"]; + my $send = ['zfs', 'send', '-Rpv']; + my $rec = ['ssh', "root\@$target_host", 'zfs', 'recv','-F' ,$zfspath]; - my $send = [['zfs', 'send', '-Rpv', "$zfspath\@__migration__"], ['ssh', "root\@$target_host", - 'zfs', 'recv', $zfspath]]; + if (my $snapname = PVE::ReplicationTools::get_last_replica_snap($volid)) { + + #check if target snapshot exists. + my $checksnap = ['/usr/bin/ssh', "root\@${target_host}", "-o", + 'BatchMode=yes', 'zfs', 'list', '-Hrt', 'snap', + "$zfspath\@$snapname "]; + eval { + run_command($checksnap); + push @$send, '-I', "$zfspath\@$snapname"; + }; + + } + push @$send, "--", "$zfspath\@__migration__"; my $destroy_target = ['ssh', "root\@$target_host", 'zfs', 'destroy', "$zfspath\@__migration__"]; run_command($snap); eval{ - run_command($send); + run_command([$send,$rec]); }; my $err = $@; warn "zfs send/receive failed, cleaning up snapshot(s)..\n" if $err; -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel