SUMMARY (2): Lightweight secure remote tape backups

From: John Horne (J.Horne@plymouth.ac.uk)
Date: Wed Mar 15 2000 - 03:50:10 CST


On 13-Mar-00 at 11:32:12 John Horne wrote:
>
> Thanks should go to Dave Foster for the backup scripts he sent me as well.
>
I received a few requests for the backup scripts, and Dave kindly said it was
okay to distribute them. So I have attached them to this message.

John.

--------------------------------------------------------------------------
John Horne, University of Plymouth, UK Tel: +44 (0)1752 233914
E-mail: jhorne@plymouth.ac.uk
Finger for PGP key: john@jhorne.csd.plymouth.ac.uk


#!/bin/csh
#
# BACKUP_SYSTEMS 6-25-99 DSFoster
#
# Script to automate the backup of Sun systems within the BIAL.
# Uses RSH to invoke "system_dump" utility on remote systems,
# and calls this script directly for local system.
#

#====================================
# Host definitions and tapes-per-host
#====================================

set BIAL_HOSTS = ( bial1 bial5 bial6 bial7 bial8 ) # All hosts to be backed
 up
set TAPES_PER_HOST = ( 1 1 2 1 2 ) # Dump tapes per host
set TAPE_HOST = bial5 # Host with tape drive

set LOCAL_HOST = `/usr/bin/hostname` # Local host
set BIN_DIR = /usr/local/bin # Location of scripts (SYSTEM_DUM
P)

set BACKUP_TYPE = "Full" # Default to full level-0 dumps

while ( $#argv )
    switch ( $argv[1] )
        case "-h":
            echo " "
            echo " Usage: $0 [-i] [-r rhost]"
            echo " "
            echo " -i : Incremental backups for all systems"
            echo " -r : Use tape drive connected to rhost (default is $TAPE_
HOST)"
            echo " "
            exit 0
            breaksw
        case "-i": # Perform incremental dumps
            set BACKUP_TYPE = "Incremental"
            breaksw
        case "-r": # Remote tape host specified
            set $TAPE_HOST = $argv[1]
            breaksw
        default:
            breaksw
    endsw
    shift
end

# Backup each host

@ hosts = 1

while ( $#BIAL_HOSTS != 0 )

    if ( $BACKUP_TYPE == "Incremental" ) then
        @ tapes = 1 # Incremental dumps so just one tap
e!
        @ incr = 1
    else
        @ tapes = ${TAPES_PER_HOST[1]} # Number of tapes to dump
        @ incr = 1
    endif

    # Backup each tape for current host

    while ( $incr <= $tapes )
        echo " "
        set prompt_user = "No"
        if ( $BACKUP_TYPE == "Incremental" ) then
            if ( $hosts == 1 ) then
                echo "Put tape labelled [ Incremental System Dumps: All Systems
] in tape drive"
                set dump_level = 5
                set prompt_user = "Yes"
            endif
        else
            echo "Put tape labelled [ System Dumps: $BIAL_HOSTS[1] # $incr ] in
tape drive"
            set dump_level = 0
            set prompt_user = "Yes"
        endif
        if ( $prompt_user == "Yes" ) then
            set input = "retry"
               while ( $input == "retry" )
                   echo -n "Perform these system dumps? (y/n) "
                set input = $<
                switch ( $input )
                    case [yY]:
                        breaksw
                    case [nN]:
                        goto NEXT_TAPE
                        breaksw
                    default:
                        set input = retry
                        breaksw
                endsw
            end
            echo " "
        endif

        if ( $BACKUP_TYPE == "Incremental" ) then
            set host_modifier = "-m all"
        else if ( $incr > 1 ) then
            set host_modifier = "-m $incr"
        else
            set host_modifier = ""
        endif

        if ( ${BIAL_HOSTS[1]} == $LOCAL_HOST ) then
            echo "$BIN_DIR/system_dump $host_modifier -r $TAPE_HOST $dump_level"
            $BIN_DIR/system_dump $host_modifier -r $TAPE_HOST $dump_level
        else
            echo "rsh ${BIAL_HOSTS[1]} $BIN_DIR/system_dump $host_modifier -r $T
APE_HOST $dump_level"
            rsh ${BIAL_HOSTS[1]} $BIN_DIR/system_dump $host_modifier -r $TAPE_HO
ST $dump_level
        endif

        NEXT_TAPE:
        @ incr += 1
    end

    # Get next elements in wordlists

    @ hosts += 1
    shift BIAL_HOSTS
    shift TAPES_PER_HOST

end
 
----------

#!/bin/sh
#
# SYSTEM_DUMP 7-21-99 DSFoster
#
#-------------------------------------------------------------------------------
# Script to assist in performing filesystem dumps.
# NOTES:
#
# The "dumpsched" variable is a list of default dump levels Sunday
# through Saturday.
#
# The file systems will be dumped in the order of the variable "disks"
#
# general usage: system_dump
#
# Non-interactive usage: system_dump <level>
#
# for an unrecorded dump: system_dump special
#
#-------------------------------------------------------------------------------
#
# Modifications:
#
# 3-16-97 DSF Created.
# 9-19-97 DSF Added "-h host" option to specify target hostname.
# 10-19-98 DSF Add "-m modifier" option to allow multiple dumps from
# single machine.
# 7-21-99 DSF Ported to NCMIR lab, new hosts! For now make sure
# we're on a Solaris system (todo: support SGI/DEC/??).
#

if ( test "`uname -r | cut -d. -f 1`" != "5" ) then
        echo "Not a Solaris system"
        exit
fi

# Allow multiple dumps from same host by modifying hostname using
# -m parameter (so "host" becomes "host_2" for "-m 2".
 
case $1 in
        -m) host_modifier=$2
                shift
                shift;;
         *) host_modifier="none"
esac

# Allow user to specify remote dump host as argument

case $1 in
        -r) dumphost_arg=$2
                shift
                shift;;
         *) dumphost_arg="none"
esac

case $1 in
        -h) echo " "
                echo " Usage: system_dump [-m modifier] [-r rhost] [ [0-9] | [
special] ]"
                echo " "
                echo " modifier : modify hostname by adding _modifier (eg. _2
)"
                echo " rhost : remote target host with tape drive"
                echo " 0-9 : dump-level (0=full)"
                echo " special : do unrecorded dump"
                echo " "
                echo " Arguments must appear in order shown"
                echo " "
                exit;;
        *)
esac

# commands and constants

#hostname="/usr/ucb/hostname"
hostname="/usr/bin/hostname"
whoami="/usr/ucb/whoami"
 
# Get dumphost info (EDIT FOR LOCAL SITE). Modify hostname by adding "_#"
# if specified on command-line. This allows for multiple dumps from the
# same host. Save original hostname.
 
orig_host=`$hostname`
if ( test $host_modifier = "none" ) then
    host=`$hostname`
else
    host=`$hostname`_$host_modifier
fi

case $host in
        dim) disks="/ /usr /var /usr/openwin /opt /opt2"
                        dumphost="proteus"
                        device="4mm"
                        dumpsched="0 0 0 0 0 0 0";;
# host2) disks="???"
# dumphost="host-with-tape"
# device="8mm"
# dumpsched="na 0 na 5 na 3 na";;
        *) echo `basename $0`: Unexpected hostname: $host
                        exit;;
esac

# Enable remote host specified as argument

if ( test $dumphost_arg != "none" ) then
    dumphost=$dumphost_arg
fi

echon()
{
        /usr/ucb/echo -n "$*"
}

 
getlevel()
{
        # get default dump level based on dump_schedule:
        day=`date +%w`
        while ( test $day -gt 0 )
        do
          shift
          day=`echo $day-1 |bc`
        done
        default=$1
        # query to make sure of level:
        case $default in
                [0-9]) echon "Dump Level (0-9) [$default]: ";;
                *) echon "Dump Level (0-9): ";;
        esac
        read ans
        case x$ans in
                x[0-9]) level=$ans;;
                x) level=$default;;
                *) echo $ans is an invalid value for dump_level.; exit;;
        esac
}
 
# make sure user has root access:
user=`/usr/ucb/whoami`
if (test $user != "root" ) then
        echo `basename $0`: Sorry. You must be root to dump filesystems.; exit
fi
 
# get date:
echo " "
echo Today is `date "+%B %d, %Y (%A)"`
 
update=u
 
# get and verify dump level:
case x$1 in
        x[0-9]) level=$1;;
        xspecial) unset update; getlevel $dumpsched;;
        x) getlevel $dumpsched;;
        *) echo $1 is an invalid value for dump_level.; exit;;
esac

# Set dump parameters based on physical dump device.

case $device in
        4mm) dumpparams="${update}cbf 126"
                dumpdevice="/dev/rmt/0";;
# 8mm) dumpparams="${update}f"
# dumpdevice="/dev/rmt/0m";;
        *) echo Invalid device option: $device.; exit;;
esac
 

# dump the filesystems:

echo " "
echo "--------------------------------------------------------------------"
echo "Preparing for level $level dump to $device tape drive on $dumphost"
echo "--------------------------------------------------------------------"
echo " "
starttime=`date "+%I:%M %p on %A, %B %d, %Y"`

if (test $orig_host != $dumphost) then
        access=`rsh $dumphost $whoami`
        echo Local access is $access
        if (test $access != root) then
                echo No root access to remote host $dumphost. ;exit
        else
                echo Root access to $dumphost verified
        fi

        echon Making sure tape is rewound...
        rsh $dumphost mt -f $dumpdevice rewind
        echo done

        for disk in $disks
        do
          echo DUMPING ${disk}...
          ufsdump ${level}${dumpparams} ${dumphost}:${dumpdevice}n ${disk}
        done
        echon Rewinding tape...
        rsh $dumphost mt -f $dumpdevice rewoffl
        echo done
        echo Ejecting tape...done
else
        echon Making sure tape is rewound...
        mt -f $dumpdevice rewind
        echo done
        for disk in $disks
        do
          echo DUMPING ${disk}...
          ufsdump ${level}${dumpparams} ${dumpdevice}n ${disk}
        done
        echon Rewinding tape...
        mt -f $dumpdevice rewoffl
        echo done
        echo Ejecting tape...done
fi
stoptime=`date "+%I:%M %p on %A, %B %d, %Y"`
 
echo " "
echo "dump started: $starttime"
echo "dump ended: $stoptime"
echo " "

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   David Foster National Center for Microscopy and Imaging Research
    Programmer/Analyst University of California, San Diego
    dfoster@ucsd.edu Department of Neuroscience
    (858) 534-7968 http://www-ncmir.ucsd.edu/
          [All opinions expressed are mine -- duh]
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

End of MIME message



This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:14:04 CDT