[pve-devel] [PATCH_V2] implement offline migration on zfs

Wolfgang Link w.link at proxmox.com
Mon Apr 27 09:27:47 CEST 2015


Signed-off-by: Wolfgang Link <w.link at proxmox.com>
---
 PVE/Storage.pm |   29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/PVE/Storage.pm b/PVE/Storage.pm
index e46bc77..4e15df8 100755
--- a/PVE/Storage.pm
+++ b/PVE/Storage.pm
@@ -490,6 +490,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";
     }
-- 
1.7.10.4




More information about the pve-devel mailing list