replicate all filesystems and snapshots to another machine
[sysadmin-cookbook] / recepies / zfs / zfs-receive-snaphost.sh
1 #!/bin/sh -x
2
3 from=10.60.0.90
4
5 fs=`ssh $from zfs list -t snapshot | grep @ | iselect -t "select snapshot to pull" -a | sed 's/ .*$//'`
6
7 if [ -z "$fs" ] ; then
8         exit;
9 fi
10
11 veid=`echo $fs | cut -d/ -f3 | cut -d@ -f1`
12 date=`echo $fs | cut -d/ -f3 | cut -d@ -f2`
13 pool=`echo $fs | cut -d/ -f1`
14
15 echo "pull $pool / $veid @ $date"
16
17 local=`zfs list | grep $veid | cut -d" " -f1`
18
19 if [ -z "$local" ] ; then
20         local_pool=`zfs list | grep /backup/ | head -1 | cut -d/ -f1`
21         local="$local_pool/backup/$veid"
22         zfs create $local || exit
23 fi
24
25 echo "clone $fs -- $veid to $local";
26
27 ssh $from "zfs send $fs | nc -w 5 -l -p 8888" &
28 sleep 1
29
30 nc $from 8888 | dd_rescue -w -y 0 -l /tmp/$veid@$data.log - - | zfs receive -F $local && zfs snapshot $local@$date
31
32 zfs list -t snapshot | grep $veid