1*86d7f5d3SJohn Marino#!/bin/csh 2*86d7f5d3SJohn Marino# 3*86d7f5d3SJohn Marino# $DragonFly: src/bin/cpdup/scripts/do_remote_host,v 1.2 2006/09/21 00:18:13 dillon Exp $ 4*86d7f5d3SJohn Marino 5*86d7f5d3SJohn Marinosource params 6*86d7f5d3SJohn Marino 7*86d7f5d3SJohn Marinoif ( "$argv" == "" ) then 8*86d7f5d3SJohn Marino echo "Specify host mounted in $backup_nfs (e.g. 'apollo'), and level." 9*86d7f5d3SJohn Marino echo "Level 0 - full backup, do not use hardlink trick" 10*86d7f5d3SJohn Marino echo "Level 1 - full backup, use hardlink trick but verify each file" 11*86d7f5d3SJohn Marino echo "Level 2 - full backup, use hardlink trick and stat shortcut" 12*86d7f5d3SJohn Marino echo "./do_remote_host <host> <level> > $remote_path/mirrors/<host>.log" 13*86d7f5d3SJohn Marino exit 1 14*86d7f5d3SJohn Marinoendif 15*86d7f5d3SJohn Marino 16*86d7f5d3SJohn Marinoset host = "$argv[1]" 17*86d7f5d3SJohn Marinoset level = "$argv[2]" 18*86d7f5d3SJohn Marino 19*86d7f5d3SJohn Marinoif ( ! -d $backup_nfs/$host ) then 20*86d7f5d3SJohn Marino echo "Host not found in $backup_nfs" 21*86d7f5d3SJohn Marino exit 1 22*86d7f5d3SJohn Marinoendif 23*86d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$host ) then 24*86d7f5d3SJohn Marino echo "No backup found for $host" 25*86d7f5d3SJohn Marino exit 1 26*86d7f5d3SJohn Marinoendif 27*86d7f5d3SJohn Marino 28*86d7f5d3SJohn Marino# Figure out the source directory 29*86d7f5d3SJohn Marino# 30*86d7f5d3SJohn Marinoset source = `readlink $backup_path/mirrors/$host` 31*86d7f5d3SJohn Marinoif ( "$source" == "" ) then 32*86d7f5d3SJohn Marino echo "No backup found for $host at $backup_path/mirrors/$host" 33*86d7f5d3SJohn Marino echo "or it was not a softlink" 34*86d7f5d3SJohn Marino exit 1 35*86d7f5d3SJohn Marinoendif 36*86d7f5d3SJohn Marino 37*86d7f5d3SJohn Marino# Figure out the hardlink optimized side directory on 38*86d7f5d3SJohn Marino# the target. 39*86d7f5d3SJohn Marino# 40*86d7f5d3SJohn Marino 41*86d7f5d3SJohn Marinoif ( $level != 0 ) then 42*86d7f5d3SJohn Marino set hlbase = `ssh $remote_host -n "readlink ${remote_path}/mirrors/$host"` 43*86d7f5d3SJohn Marino if ( "$hlbase" == "" ) then 44*86d7f5d3SJohn Marino echo "Missing softlink at ${remote_host}:${remote_path}/mirrors/${host}" 45*86d7f5d3SJohn Marino echo "cannot proceed. Perhaps you did not run a level 0 with" 46*86d7f5d3SJohn Marino echo "the do_remote script to create the hardlink base and softlink?" 47*86d7f5d3SJohn Marino exit 1 48*86d7f5d3SJohn Marino endif 49*86d7f5d3SJohn Marino 50*86d7f5d3SJohn Marino if ( "$hlbase" == "$source" ) then 51*86d7f5d3SJohn Marino echo "SUCCEEDED - NO NEW BACKUP SINCE LAST TIME" 52*86d7f5d3SJohn Marino exit 0 53*86d7f5d3SJohn Marino endif 54*86d7f5d3SJohn Marinoendif 55*86d7f5d3SJohn Marino 56*86d7f5d3SJohn Marino# Figure out the target path and add prefixes 57*86d7f5d3SJohn Marino# 58*86d7f5d3SJohn Marinoset basename = $source 59*86d7f5d3SJohn Marinoset target = ${remote_host}:${remote_path}/mirrors/${source} 60*86d7f5d3SJohn Marinoset source = $backup_path/mirrors/${source} 61*86d7f5d3SJohn Marinoset hlbase = ${remote_path}/mirrors/${hlbase} 62*86d7f5d3SJohn Marino 63*86d7f5d3SJohn Marinoecho "---------- OFFSITE BACKUP OF $source ---------" 64*86d7f5d3SJohn Marinoecho "SOURCE $source" 65*86d7f5d3SJohn Marinoecho "HLBASE $hlbase" 66*86d7f5d3SJohn Marinoecho "TARGET $target" 67*86d7f5d3SJohn Marino 68*86d7f5d3SJohn Marino# Do the actual backup 69*86d7f5d3SJohn Marino# 70*86d7f5d3SJohn Marino 71*86d7f5d3SJohn Marinoset failed = 0 72*86d7f5d3SJohn Marino 73*86d7f5d3SJohn Marinoswitch($level) 74*86d7f5d3SJohn Marinocase 0: 75*86d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I $source $target" 76*86d7f5d3SJohn Marino cpdup -i0 -s0 -I $source $target 77*86d7f5d3SJohn Marino if ( $status != 0 ) then 78*86d7f5d3SJohn Marino set failed = 1 79*86d7f5d3SJohn Marino endif 80*86d7f5d3SJohn Marino breaksw 81*86d7f5d3SJohn Marinocase 1: 82*86d7f5d3SJohn Marino echo "cpdup -f -i0 -s0 -I -H $hlbase $source $target" 83*86d7f5d3SJohn Marino cpdup -f -i0 -s0 -I -H $hlbase $source $target 84*86d7f5d3SJohn Marino if ( $status != 0 ) then 85*86d7f5d3SJohn Marino set failed = 1 86*86d7f5d3SJohn Marino endif 87*86d7f5d3SJohn Marino breaksw 88*86d7f5d3SJohn Marinocase 2: 89*86d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I -H $hlbase $source $target" 90*86d7f5d3SJohn Marino cpdup -i0 -s0 -I -H $hlbase $source $target 91*86d7f5d3SJohn Marino if ( $status != 0 ) then 92*86d7f5d3SJohn Marino set failed = 1 93*86d7f5d3SJohn Marino endif 94*86d7f5d3SJohn Marino breaksw 95*86d7f5d3SJohn Marinodefault: 96*86d7f5d3SJohn Marino echo "UNKNOWN BACKUP LEVEL, USE ONLY 0-2" 97*86d7f5d3SJohn Marino set failed = 1 98*86d7f5d3SJohn Marino breaksw 99*86d7f5d3SJohn Marinoendsw 100*86d7f5d3SJohn Marino 101*86d7f5d3SJohn Marinoif ( $failed == 0 ) then 102*86d7f5d3SJohn Marino ssh $remote_host -n "rm -f ${remote_path}/mirrors/$host; ln -s $basename ${remote_path}/mirrors/$host" 103*86d7f5d3SJohn Marino sync 104*86d7f5d3SJohn Marino echo "SUCCEEDED" 105*86d7f5d3SJohn Marino exit 0 106*86d7f5d3SJohn Marinoelse 107*86d7f5d3SJohn Marino sync 108*86d7f5d3SJohn Marino echo "FAILED" 109*86d7f5d3SJohn Marino exit 1 110*86d7f5d3SJohn Marinoendif 111*86d7f5d3SJohn Marino 112