1*86d7f5d3SJohn Marino#!/bin/csh 2*86d7f5d3SJohn Marino# 3*86d7f5d3SJohn Marino# $DragonFly: src/bin/cpdup/scripts/do_mirror_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_mirror_host <host> <level> > $backup_path/mirrors/<host>.log" 13*86d7f5d3SJohn Marino exit 1 14*86d7f5d3SJohn Marinoendif 15*86d7f5d3SJohn Marino 16*86d7f5d3SJohn Marinoset date = `date "+%Y%m%d"` 17*86d7f5d3SJohn Marinoset host = "$argv[1]" 18*86d7f5d3SJohn Marinoset level = "$argv[2]" 19*86d7f5d3SJohn Marino 20*86d7f5d3SJohn Marinoif ( ! -d $backup_nfs/$host ) then 21*86d7f5d3SJohn Marino echo "Host not found in $backup_nfs" 22*86d7f5d3SJohn Marino exit 1 23*86d7f5d3SJohn Marinoendif 24*86d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$host ) then 25*86d7f5d3SJohn Marino mkdir $backup_path/mirrors/$host 26*86d7f5d3SJohn Marinoendif 27*86d7f5d3SJohn Marino 28*86d7f5d3SJohn Marino# Target directory for this backup 29*86d7f5d3SJohn Marino# 30*86d7f5d3SJohn Marinoset target = $host.$date 31*86d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$target ) then 32*86d7f5d3SJohn Marino mkdir -p $backup_path/mirrors/$target 33*86d7f5d3SJohn Marinoendif 34*86d7f5d3SJohn Marino 35*86d7f5d3SJohn Marinoset failed = 0 36*86d7f5d3SJohn Marino 37*86d7f5d3SJohn Marino# Record log 38*86d7f5d3SJohn Marino# 39*86d7f5d3SJohn Marinorm -f $backup_path/mirrors/$target/{INPROGRESS,FAILED,SUCCEEDED} 40*86d7f5d3SJohn Marinoif ( -f $backup_path/mirrors/$host.log ) then 41*86d7f5d3SJohn Marino ln $backup_path/mirrors/$host.log $backup_path/mirrors/$target/INPROGRESS 42*86d7f5d3SJohn Marinoelse 43*86d7f5d3SJohn Marino echo "NO LOG RECORDED" > $backup_path/mirrors/$target/INPROGRESS 44*86d7f5d3SJohn Marinoendif 45*86d7f5d3SJohn Marino 46*86d7f5d3SJohn Marino# Iterate subdirectories. Each subdirectory is considered to be a separate 47*86d7f5d3SJohn Marino# filesystem. 48*86d7f5d3SJohn Marino# 49*86d7f5d3SJohn Marinoforeach fs ( $backup_nfs/$host/* ) 50*86d7f5d3SJohn Marino set dirname = $fs:t 51*86d7f5d3SJohn Marino 52*86d7f5d3SJohn Marino echo "Backing up $fs" 53*86d7f5d3SJohn Marino if ( ! -d $backup_path/mirrors/$target/$dirname ) then 54*86d7f5d3SJohn Marino mkdir -p $backup_path/mirrors/$target/$dirname 55*86d7f5d3SJohn Marino endif 56*86d7f5d3SJohn Marino if ( -f $fs/NOT_MOUNTED ) then 57*86d7f5d3SJohn Marino echo "NOT MOUNTED" 58*86d7f5d3SJohn Marino set failed = 1 59*86d7f5d3SJohn Marino continue 60*86d7f5d3SJohn Marino endif 61*86d7f5d3SJohn Marino switch ( $level ) 62*86d7f5d3SJohn Marino case 0: 63*86d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I $fs $backup_path/mirrors/$target/$dirname" 64*86d7f5d3SJohn Marino cpdup -i0 -s0 -I $fs $backup_path/mirrors/$target/$dirname 65*86d7f5d3SJohn Marino if ( $status != 0 ) then 66*86d7f5d3SJohn Marino set failed = 1 67*86d7f5d3SJohn Marino endif 68*86d7f5d3SJohn Marino breaksw 69*86d7f5d3SJohn Marino case 1: 70*86d7f5d3SJohn Marino echo "cpdup -f -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname" 71*86d7f5d3SJohn Marino cpdup -f -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname 72*86d7f5d3SJohn Marino if ( $status != 0 ) then 73*86d7f5d3SJohn Marino set failed = 1 74*86d7f5d3SJohn Marino endif 75*86d7f5d3SJohn Marino breaksw 76*86d7f5d3SJohn Marino case 2: 77*86d7f5d3SJohn Marino echo "cpdup -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname" 78*86d7f5d3SJohn Marino cpdup -i0 -s0 -I -H $backup_path/mirrors/$host/$dirname $fs $backup_path/mirrors/$target/$dirname 79*86d7f5d3SJohn Marino if ( $status != 0 ) then 80*86d7f5d3SJohn Marino set failed = 1 81*86d7f5d3SJohn Marino endif 82*86d7f5d3SJohn Marino breaksw 83*86d7f5d3SJohn Marino default: 84*86d7f5d3SJohn Marino echo "UNKNOWN BACKUP LEVEL, USE ONLY 0-2" 85*86d7f5d3SJohn Marino set failed = 1 86*86d7f5d3SJohn Marino breaksw 87*86d7f5d3SJohn Marino endsw 88*86d7f5d3SJohn Marino sync 89*86d7f5d3SJohn Marino echo "" 90*86d7f5d3SJohn Marinoend 91*86d7f5d3SJohn Marino 92*86d7f5d3SJohn Marino# If we succeeded then set up a softlink so a higher level incremental 93*86d7f5d3SJohn Marino# backup can locate the most recent version of the previous level, 94*86d7f5d3SJohn Marino# another so we can locate the most recent backup period, and also 95*86d7f5d3SJohn Marino# rename the log file. 96*86d7f5d3SJohn Marino# 97*86d7f5d3SJohn Marinoif ( $failed == 0 ) then 98*86d7f5d3SJohn Marino rm -f $backup_path/mirrors/$host 99*86d7f5d3SJohn Marino ln -s "$host.$date" $backup_path/mirrors/$host 100*86d7f5d3SJohn Marino mv $backup_path/mirrors/$target/{INPROGRESS,SUCCEEDED} 101*86d7f5d3SJohn Marino sync 102*86d7f5d3SJohn Marino echo "SUCCEEDED" 103*86d7f5d3SJohn Marinoelse 104*86d7f5d3SJohn Marino mv $backup_path/mirrors/$target/{INPROGRESS,FAILED} 105*86d7f5d3SJohn Marino sync 106*86d7f5d3SJohn Marino echo "FAILED" 107*86d7f5d3SJohn Marinoendif 108*86d7f5d3SJohn Marino 109