Top: Index 

CSC8306 -- Systems Administration

Here is (one of!) my own backup script. At it's core, it uses tar for performing the backup.

It's not one of my all time great pieces of code. Prizes 1 will be awarded for anyone who can work out what it does 2.

# -*-sh-*-

BACKUP_DIR=//linkstn/share/home-backup/

## make a back up my home space
if cd $BACKUP_DIR
    then
    echo [backup] Backing up to `pwd`
else
    echo "Failed to change to backup directory"
    exit 1
fi



## transfer the cvs repository over to this machine, so that I can package it up from here.
BACKUP_FLAG=~/bin/local/last-backup
BACKUP_FULL_FLAG=~/bin/local/full-backup

TAR=tar
#TAR_OPTIONS=
TAR_OPTIONS="vc -T -"
RM=rm
FIND=find


FIND_GENERAL_OPTIONS="-type f"
FIND_INCREMENTAL_OPTIONS="-newer $BACKUP_FLAG"

FIND_HOME_OPTIONS=""
FIND_EXTRA_OPTIONS=""

FULL_BACKUP_FLAG=false

DATE_STRING=`date +%y_%m_%d_%H_%M`
DATE_DELETE="+%y_%m_%d"

## Set options up for full backup.
if [ ! -e $BACKUP_FLAG ]; then

    FIND_LOCAL_OPTIONS=""
    FULL_BACKUP_FLAG=true
    echo [backup]  Full Backup

else

    FIND_LOCAL_OPTIONS=$FIND_INCREMENTAL_OPTIONS

fi


FIND_OPTIONS="$FIND_GENERAL_OPTIONS $FIND_LOCAL_OPTIONS"




echo [backup]  Back up home space, to $DATE_STRING.tgz
#mkdir $DATE_STRING.tgz
echo $FIND ~ $FIND_HOME_OPTIONS $FIND_OPTIONS
$FIND ~/ $FIND_HOME_OPTIONS $FIND_OPTIONS | \
    $TAR $TAR_OPTIONS | gzip -9 > $DATE_STRING.tgz

## can't work this out, but the above command seems to be creating
## files with date stamps of 2002. This breaks the delete below.
touch $DATE_STRING.tgz


echo [backup]  Home space complete

## if we doing full backups and it exists, delete all things older
## than last full backup

## oh dear not well named vars
if [ -e $BACKUP_FULL_FLAG ] && $FULL_BACKUP_FLAG; then

    echo [backup] Removing old backups

    ## we should already be in this directory, but try to cd
    ## again. This way if network has broken during the backup, we
    ## will be protected.
    if cd $BACKUP_DIR
    then
        echo [backup] Deleting files from `pwd`
    else
        echo "Failed to change to backup directory"
        exit 1
    fi

    # have to do this in two steps else find complains about the
    # directories that it has already deleted
    find . -type f -not -newer $BACKUP_FULL_FLAG -print -exec rm  {} \;
    # find . -type d -not -newer $BACKUP_FULL_FLAG -print -exec rmdir {} \;


fi

if $FULL_BACKUP_FLAG; then

    if [ -e $BACKUP_FULL_FLAG.1 ]; then
        cp --preserve $BACKUP_FULL_FLAG.1 $BACKUP_FULL_FLAG
    fi

    if [ -e $BACKUP_FULL_FLAG.2 ]; then
        cp --preserve $BACKUP_FULL_FLAG.2 $BACKUP_FULL_FLAG.1
    fi

    if [ -e $BACKUP_FULL_FLAG.3 ]; then
        cp --preserve $BACKUP_FULL_FLAG.3 $BACKUP_FULL_FLAG.2
    fi

    echo [backup] Updating full backup flag
    touch $BACKUP_FULL_FLAG.3
fi


echo [backup] Updating backup flag
touch $BACKUP_FLAG

echo [backup] Complete

1. You will go home with a warm glow in your heart.

2. You won't be able to work this out by just running it. It doesn't work on actually work on linux.


Index Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Phase 7 Phase 8
Top: Index