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