receive snapshot from other host using nc for low overhead
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 23 Jul 2009 23:26:34 +0000 (23:26 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 23 Jul 2009 23:26:34 +0000 (23:26 +0000)
git-svn-id: svn://svn.rot13.org/sysadmin-cookbook@120 191e9f34-6774-4a6d-acfc-7664dacd4a2a

recepies/zfs/zfs-receive-snaphost.sh [new file with mode: 0755]

diff --git a/recepies/zfs/zfs-receive-snaphost.sh b/recepies/zfs/zfs-receive-snaphost.sh
new file mode 100755 (executable)
index 0000000..bd92076
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh -x
+
+from=10.60.0.90
+
+fs=`ssh $from zfs list -t snapshot | grep @ | iselect -t "select snapshot to pull" -a | sed 's/ .*$//'`
+
+if [ -z "$fs" ] ; then
+       exit;
+fi
+
+veid=`echo $fs | cut -d/ -f3 | cut -d@ -f1`
+date=`echo $fs | cut -d/ -f3 | cut -d@ -f2`
+pool=`echo $fs | cut -d/ -f1`
+
+echo "pull $pool / $veid @ $date"
+
+local=`zfs list | grep $veid | cut -d" " -f1`
+
+if [ -z "$local" ] ; then
+       local_pool=`zfs list | grep /backup/ | head -1 | cut -d/ -f1`
+       local="$local_pool/backup/$veid"
+       zfs create $local || exit
+fi
+
+echo "clone $fs -- $veid to $local";
+
+ssh $from "zfs send $fs | nc -w 5 -l -p 8888" &
+sleep 1
+
+nc $from 8888 | dd_rescue -w -y 0 -l /tmp/$veid@$data.log - - | zfs receive -F $local && zfs snapshot $local@$date
+
+zfs list -t snapshot | grep $veid