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