186d7f5d3SJohn Marino#!/bin/csh 286d7f5d3SJohn Marino# 386d7f5d3SJohn Marino# $DragonFly: src/bin/cpdup/scripts/do_mirror_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_mirror_host <host> <level> > $backup_path/mirrors/<host>.log" 1386d7f5d3SJohn Marino exit 1 1486d7f5d3SJohn Marinoendif 1586d7f5d3SJohn Marino 1686d7f5d3SJohn Marinoset date = `date "+%Y%m%d"` 1786d7f5d3SJohn Marinoset host = "$argv[1]" 1886d7f5d3SJohn Marinoset level = "$argv[2]" 1986d7f5d3SJohn Marino 2086d7f5d3SJohn Marinoif ( ! -d $backup_nfs/$host ) then 2186d7f5d3SJohn Marino echo "Host not found in $backup_nfs" 2286d7f5d3SJohn Marino exit 1 2386d7f5d3SJohn Marinoendif 2486d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$host ) then 2586d7f5d3SJohn Marino mkdir $backup_path/mirrors/$host 2686d7f5d3SJohn Marinoendif 2786d7f5d3SJohn Marino 2886d7f5d3SJohn Marino# Target directory for this backup 2986d7f5d3SJohn Marino# 3086d7f5d3SJohn Marinoset target = $host.$date 3186d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$target ) then 3286d7f5d3SJohn Marino mkdir -p $backup_path/mirrors/$target 3386d7f5d3SJohn Marinoendif 3486d7f5d3SJohn Marino 3586d7f5d3SJohn Marinoset failed = 0 3686d7f5d3SJohn Marino 3786d7f5d3SJohn Marino# Record log 3886d7f5d3SJohn Marino# 3986d7f5d3SJohn Marinorm -f $backup_path/mirrors/$target/{INPROGRESS,FAILED,SUCCEEDED} 4086d7f5d3SJohn Marinoif ( -f $backup_path/mirrors/$host.log ) then 4186d7f5d3SJohn Marino ln $backup_path/mirrors/$host.log $backup_path/mirrors/$target/INPROGRESS 4286d7f5d3SJohn Marinoelse 4386d7f5d3SJohn Marino echo "NO LOG RECORDED" > $backup_path/mirrors/$target/INPROGRESS 4486d7f5d3SJohn Marinoendif 4586d7f5d3SJohn Marino 4686d7f5d3SJohn Marino# Iterate subdirectories. Each subdirectory is considered to be a separate 4786d7f5d3SJohn Marino# filesystem. 4886d7f5d3SJohn Marino# 4986d7f5d3SJohn Marinoforeach fs ( $backup_nfs/$host/* ) 5086d7f5d3SJohn Marino set dirname = $fs:t 5186d7f5d3SJohn Marino 5286d7f5d3SJohn Marino echo "Backing up $fs" 5386d7f5d3SJohn Marino if ( ! -d $backup_path/mirrors/$target/$dirname ) then 5486d7f5d3SJohn Marino mkdir -p $backup_path/mirrors/$target/$dirname 5586d7f5d3SJohn Marino endif 5686d7f5d3SJohn Marino if ( -f $fs/NOT_MOUNTED ) then 5786d7f5d3SJohn Marino echo "NOT MOUNTED" 5886d7f5d3SJohn Marino set failed = 1 5986d7f5d3SJohn Marino continue 6086d7f5d3SJohn Marino endif 6186d7f5d3SJohn Marino switch ( $level ) 6286d7f5d3SJohn Marino case 0: 6386d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I $fs $backup_path/mirrors/$target/$dirname" 6486d7f5d3SJohn Marino cpdup -i0 -s0 -I $fs $backup_path/mirrors/$target/$dirname 6586d7f5d3SJohn Marino if ( $status != 0 ) then 6686d7f5d3SJohn Marino set failed = 1 6786d7f5d3SJohn Marino endif 6886d7f5d3SJohn Marino breaksw 6986d7f5d3SJohn Marino case 1: 7086d7f5d3SJohn Marino echo "cpdup -f -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname" 7186d7f5d3SJohn Marino cpdup -f -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname 7286d7f5d3SJohn Marino if ( $status != 0 ) then 7386d7f5d3SJohn Marino set failed = 1 7486d7f5d3SJohn Marino endif 7586d7f5d3SJohn Marino breaksw 7686d7f5d3SJohn Marino case 2: 7786d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname" 7886d7f5d3SJohn Marino cpdup -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname 7986d7f5d3SJohn Marino if ( $status != 0 ) then 8086d7f5d3SJohn Marino set failed = 1 8186d7f5d3SJohn Marino endif 8286d7f5d3SJohn Marino breaksw 8386d7f5d3SJohn Marino default: 8486d7f5d3SJohn Marino echo "UNKNOWN BACKUP LEVEL, USE ONLY 0-2" 8586d7f5d3SJohn Marino set failed = 1 8686d7f5d3SJohn Marino breaksw 8786d7f5d3SJohn Marino endsw 8886d7f5d3SJohn Marino sync 8986d7f5d3SJohn Marino echo "" 9086d7f5d3SJohn Marinoend 9186d7f5d3SJohn Marino 9286d7f5d3SJohn Marino# If we succeeded then set up a softlink so a higher level incremental 9386d7f5d3SJohn Marino# backup can locate the most recent version of the previous level, 9486d7f5d3SJohn Marino# another so we can locate the most recent backup period, and also 9586d7f5d3SJohn Marino# rename the log file. 9686d7f5d3SJohn Marino# 9786d7f5d3SJohn Marinoif ( $failed == 0 ) then 9886d7f5d3SJohn Marino rm -f $backup_path/mirrors/$host 9986d7f5d3SJohn Marino ln -s "$host.$date" $backup_path/mirrors/$host 10086d7f5d3SJohn Marino mv $backup_path/mirrors/$target/{INPROGRESS,SUCCEEDED} 10186d7f5d3SJohn Marino sync 10286d7f5d3SJohn Marino echo "SUCCEEDED" 10386d7f5d3SJohn Marinoelse 10486d7f5d3SJohn Marino mv $backup_path/mirrors/$target/{INPROGRESS,FAILED} 10586d7f5d3SJohn Marino sync 10686d7f5d3SJohn Marino echo "FAILED" 10786d7f5d3SJohn Marinoendif 10886d7f5d3SJohn Marino 109