diff --git a/PVE/Storage.pm b/PVE/Storage.pm index b97279c..70316e2 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -492,6 +492,35 @@ sub storage_migrate { } else { die "$errstr - target type '$tcfg->{type}' not implemented\n"; } + } elsif ($scfg->{type} eq 'zfspool') { + + if($tcfg->{type} eq 'zfspool'){ + + die "$errstr - pool on target has not same name as source!"if $tcfg->{pool} ne $scfg->{pool}; + + my ( undef, $volname) = parse_volname($cfg, $volid); + + my $zfspath = "$scfg->{pool}\/$volname"; + + my $snap = "zfs snapshot $zfspath\@__migration__"; + + my $send = "zfs send -v $zfspath\@__migration__ \| ssh root\@$target_host zfs recv $zfspath"; + + my $destroy_target = "ssh root\@$target_host zfs destroy $zfspath\@__migration__"; + run_command($snap); + eval{ + run_command($send); + }; + my $err; + if ($err = $@){ + run_command("zfs destroy $zfspath\@__migration__"); + die $err; + } + run_command($destroy_target); + + } else { + die "$errstr - target type $tcfg->{type} is not valid\n"; + } } else { die "$errstr - source type '$scfg->{type}' not implemented\n"; }