Hello,
        I've been working on a primitive backup script,
        that, using BRU backs up my root partition, and
        then other, more dynamic directories under a
        different 'file count' to a DAT tape.  At least
        that's the plan.

        Here's a basic layout of the program:
  1.  mt eof    ( to 'append to a tape' )
  2.  Write "/"
  3.  Write 'dynamic' directories
  4.  go back 2 records ( I use mt bsf 2, but that
      doesn't work... )
  5.  Invoke BRU's integrity-checking for "/"
  6.  Invoke BRU's integrity-checking for 'dynamic' dirs.
        
        After step "2", should I write a file 'mark' with
        some mt option?

        What's the correct command for going back 2 'files'?
        
        Would it be better if I use SCSI-specific
        commands like fss, bss?

        Any comments on the script itself?  I used so
        many 'variables', because the script is easier
        adapted to other machines easier that way.  Am I
        wrong?


Thank you,

Nikita.

P.s.  CC'd replies to list are appreciated.


#!/bin/bash
########################################################
# Name:         Backup                                 #
# Description:  uses BRU to backup the system.  Script #
#               splits the "/" filesystem, apart from  #
#               more 'dynamic' parts, which are backed #
#               up separately.                         #
# Author:       Nikita S. Imennov                      #
#               <[EMAIL PROTECTED]>                #
# Date Started: Fri Feb 19 14:25:23 EST 1999           #
# Last Edit:    Fri Feb 19 14:25:49 EST 1999           #
########################################################

## COMMAND-RELATED VARIABLES ##
MT="/bin/mt"
BRU="/bin/bru"
bruArgs="cvvvvBGf"

TAIL="/usr/bin/tail"
tailArgs="-20"

MAIL="/usr/bin/mail"
mailTo="root"

## SETS ##
primarySet=("/")                        # Primary set, #1
excludeDirs=("/work" "/archives")       # Secondary set, #2


## LOG FILES ##
systemLog="/var/log/bruexeclog"         # System's account of events
backupLog="/tmp/.backup$$"              # Our account of what happened.


## OTHER VARIABLES ##
DEVICE="/dev/nst0"                      # DON'T CHANGE IT TO A REWINDING DEV!!!
excludeFile="bruxpat.local"


### FUNCTIONS DECLARED FIRST ###

################################################################
# Function:     version()                                      #
# Arguments:    none                                           #
# Purpose:      display vesion info, obtained from CVS's tag   #
#                                                              #
################################################################
function version()
{
        version="\$Id: backup.script,v 1.9 1999/02/21 18:28:57 nimennor Exp $"
        echo "$version"
}


################################################################
# Function:     usage()                                        #
# Arguments:    none                                           #
# Purpose:      display elementary help screen                 #
#                                                              #
################################################################
function usage()
{
        version
        echo "Backup the system, using BRU" >&2
}


################################################################
# Function:     creatExclude()                                 #
# Arguments:    none                                           #
# Purpose:      create $excludeFile (default: excludeFile.local),  #
#               that is to be used for BRU backup.             #
#                                                              #
################################################################
function creatExclude()
{
        rm -f $excludeFile                      # remove any previous files

        # Create default exclude file

        cat > $excludeFile <<\EOBXP
xs      */core                  # No cores
xs      core
xs      */core
xs      ./usr/tmp/*             # All tmp directories
xs      /usr/tmp/*
xs      ./tmp/*
xs      /tmp/*
xs      /mnt/*                  # All mounted dirs
xs      /proc                   # Ignore '/proc', just to be safe
zs      *.[Zz]                  # Don't compress already compressed files
zs      *.gz
zs      *.tgz
EOBXP
        
        # Now, add a 'customised' set of directories to ignore.
        for dir in [EMAIL PROTECTED]
        do
                echo "xs $dir/*" >> $excludeFile
        done

        # Export the exclude file's location, so that BRU can read it.
        BRUXPAT=$excludeFile
        export BRUXPAT
}


function backup()
{
        #### REAL CODE (tm) STARTS HERE ####

        $MT -f $DEVICE eom                      # rewind to the end of media

        creatExclude                            # create excludes...

        # Backup primary set, and hold off on [EMAIL PROTECTED]
        $BRU -$bruArgs $DEVICE -X [EMAIL PROTECTED]


        ### APPEND THE EXCLUDED DIRECTORIES ###
        $BRU -$bruArgs $DEVICE [EMAIL PROTECTED]


        ### REWIND THE TAPE FOR DOUBLE-CHECK ###

        $MT -f $DEVICE bsf 2            # THAT's the trick, right here!
                                        # mt rewinds 2 file counts BACK!!!
                                        # alas, it doesn't work!!!

        $BRU -if $DEVICE                # Check tape's integrity
        ERROR1=$?
        $BRU -if $DEVICE
        ERROR2=$?

        $MT -f $DEVICE rewind           # Rewind, since we're done.

        cat > $backupLog <<\EOBM
The BRU segregated backup finished with the following results:

EOBM

        if [ $ERROR1 == 1 ] ; then
                echo "CRC Errors were discovered in backup set #1" >> $backupLog
                echo "SET #1 contains:" >> $backupLog
                for dir in [EMAIL PROTECTED]
                        do
                                echo "\t$dir" >> $excludeFile
                        done
        fi

        if [ $ERROR2 == 1 ] ; then
                echo "CRC Errors were discovered in backup set #2" >> $backupLog
                echo "SET #2 contains:" >> $backupLog
                for dir in [EMAIL PROTECTED]
                        do
                                echo "\t$dir" >> $excludeFile
                        done
        fi

        #
        # Tail the 'summary' from BRU's system log for completeness
        # 
        $TAIL $tailArgs $systemLog >> $backupLog
        
        #
        # Mail the summary to appropriate users
        #
        $MAIL -s "BRU: Execution report" $mailTo < $backupLog
        
        #
        # Remove any by-products
        #
        rm -f $backupLog
        rm -f $excludeFile
        
        exit 0
}

###### READ THE ARGUMENTS, DECIDE WHAT TO DO #####
while getopts "hv" opt; do
        case "$opt" in
        h)      usage; exit 0;;
        v)      version; exit 0;;
        *)      echo "No such parameter!" 1>&2 ; exit 2;;
        esac
done

echo "Started: `date`"
echo -n "Backing up..."
backup
echo "Done."

Reply via email to