(2): Lightweight secure remote tape backups

2007-12-25 9:35:00

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

Comments

Got something to say?

You must be logged in to post a comment.