186d7f5d3SJohn Marino#!/bin/csh 286d7f5d3SJohn Marino# 386d7f5d3SJohn Marino# $DragonFly: src/bin/cpdup/scripts/do_remote_host,v 1.2 2006/09/21 00:18:13 dillon Exp $ 486d7f5d3SJohn Marino 586d7f5d3SJohn Marinosource params 686d7f5d3SJohn Marino 786d7f5d3SJohn Marinoif ( "$argv" == "" ) then 886d7f5d3SJohn Marino echo "Specify host mounted in $backup_nfs (e.g. 'apollo'), and level." 986d7f5d3SJohn Marino echo "Level 0 - full backup, do not use hardlink trick" 1086d7f5d3SJohn Marino echo "Level 1 - full backup, use hardlink trick but verify each file" 1186d7f5d3SJohn Marino echo "Level 2 - full backup, use hardlink trick and stat shortcut" 1286d7f5d3SJohn Marino echo "./do_remote_host <host> <level> > $remote_path/mirrors/<host>.log" 1386d7f5d3SJohn Marino exit 1 1486d7f5d3SJohn Marinoendif 1586d7f5d3SJohn Marino 1686d7f5d3SJohn Marinoset host = "$argv[1]" 1786d7f5d3SJohn Marinoset level = "$argv[2]" 1886d7f5d3SJohn Marino 1986d7f5d3SJohn Marinoif ( ! -d $backup_nfs/$host ) then 2086d7f5d3SJohn Marino echo "Host not found in $backup_nfs" 2186d7f5d3SJohn Marino exit 1 2286d7f5d3SJohn Marinoendif 2386d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$host ) then 2486d7f5d3SJohn Marino echo "No backup found for $host" 2586d7f5d3SJohn Marino exit 1 2686d7f5d3SJohn Marinoendif 2786d7f5d3SJohn Marino 2886d7f5d3SJohn Marino# Figure out the source directory 2986d7f5d3SJohn Marino# 3086d7f5d3SJohn Marinoset source = `readlink $backup_path/mirrors/$host` 3186d7f5d3SJohn Marinoif ( "$source" == "" ) then 3286d7f5d3SJohn Marino echo "No backup found for $host at $backup_path/mirrors/$host" 3386d7f5d3SJohn Marino echo "or it was not a softlink" 3486d7f5d3SJohn Marino exit 1 3586d7f5d3SJohn Marinoendif 3686d7f5d3SJohn Marino 3786d7f5d3SJohn Marino# Figure out the hardlink optimized side directory on 3886d7f5d3SJohn Marino# the target. 3986d7f5d3SJohn Marino# 4086d7f5d3SJohn Marino 4186d7f5d3SJohn Marinoif ( $level != 0 ) then 4286d7f5d3SJohn Marino set hlbase = `ssh $remote_host -n "readlink ${remote_path}/mirrors/$host"` 4386d7f5d3SJohn Marino if ( "$hlbase" == "" ) then 4486d7f5d3SJohn Marino echo "Missing softlink at ${remote_host}:${remote_path}/mirrors/${host}" 4586d7f5d3SJohn Marino echo "cannot proceed. Perhaps you did not run a level 0 with" 4686d7f5d3SJohn Marino echo "the do_remote script to create the hardlink base and softlink?" 4786d7f5d3SJohn Marino exit 1 4886d7f5d3SJohn Marino endif 4986d7f5d3SJohn Marino 5086d7f5d3SJohn Marino if ( "$hlbase" == "$source" ) then 5186d7f5d3SJohn Marino echo "SUCCEEDED - NO NEW BACKUP SINCE LAST TIME" 5286d7f5d3SJohn Marino exit 0 5386d7f5d3SJohn Marino endif 5486d7f5d3SJohn Marinoendif 5586d7f5d3SJohn Marino 5686d7f5d3SJohn Marino# Figure out the target path and add prefixes 5786d7f5d3SJohn Marino# 5886d7f5d3SJohn Marinoset basename = $source 5986d7f5d3SJohn Marinoset target = ${remote_host}:${remote_path}/mirrors/${source} 6086d7f5d3SJohn Marinoset source = $backup_path/mirrors/${source} 6186d7f5d3SJohn Marinoset hlbase = ${remote_path}/mirrors/${hlbase} 6286d7f5d3SJohn Marino 6386d7f5d3SJohn Marinoecho "---------- OFFSITE BACKUP OF $source ---------" 6486d7f5d3SJohn Marinoecho "SOURCE $source" 6586d7f5d3SJohn Marinoecho "HLBASE $hlbase" 6686d7f5d3SJohn Marinoecho "TARGET $target" 6786d7f5d3SJohn Marino 6886d7f5d3SJohn Marino# Do the actual backup 6986d7f5d3SJohn Marino# 7086d7f5d3SJohn Marino 7186d7f5d3SJohn Marinoset failed = 0 7286d7f5d3SJohn Marino 7386d7f5d3SJohn Marinoswitch($level) 7486d7f5d3SJohn Marinocase 0: 7586d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I $source $target" 7686d7f5d3SJohn Marino cpdup -i0 -s0 -I $source $target 7786d7f5d3SJohn Marino if ( $status != 0 ) then 7886d7f5d3SJohn Marino set failed = 1 7986d7f5d3SJohn Marino endif 8086d7f5d3SJohn Marino breaksw 8186d7f5d3SJohn Marinocase 1: 8286d7f5d3SJohn Marino echo "cpdup -f -i0 -s0 -I -H $hlbase $source $target" 8386d7f5d3SJohn Marino cpdup -f -i0 -s0 -I -H $hlbase $source $target 8486d7f5d3SJohn Marino if ( $status != 0 ) then 8586d7f5d3SJohn Marino set failed = 1 8686d7f5d3SJohn Marino endif 8786d7f5d3SJohn Marino breaksw 8886d7f5d3SJohn Marinocase 2: 8986d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I -H $hlbase $source $target" 9086d7f5d3SJohn Marino cpdup -i0 -s0 -I -H $hlbase $source $target 9186d7f5d3SJohn Marino if ( $status != 0 ) then 9286d7f5d3SJohn Marino set failed = 1 9386d7f5d3SJohn Marino endif 9486d7f5d3SJohn Marino breaksw 9586d7f5d3SJohn Marinodefault: 9686d7f5d3SJohn Marino echo "UNKNOWN BACKUP LEVEL, USE ONLY 0-2" 9786d7f5d3SJohn Marino set failed = 1 9886d7f5d3SJohn Marino breaksw 9986d7f5d3SJohn Marinoendsw 10086d7f5d3SJohn Marino 10186d7f5d3SJohn Marinoif ( $failed == 0 ) then 10286d7f5d3SJohn Marino ssh $remote_host -n "rm -f ${remote_path}/mirrors/$host; ln -s $basename ${remote_path}/mirrors/$host" 10386d7f5d3SJohn Marino sync 10486d7f5d3SJohn Marino echo "SUCCEEDED" 10586d7f5d3SJohn Marino exit 0 10686d7f5d3SJohn Marinoelse 10786d7f5d3SJohn Marino sync 10886d7f5d3SJohn Marino echo "FAILED" 10986d7f5d3SJohn Marino exit 1 11086d7f5d3SJohn Marinoendif 11186d7f5d3SJohn Marino 112