xref: /dflybsd-src/bin/cpdup/scripts/do_mirror_host (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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