Article Figure 1 Figure 2 Figure 3 Listing 1 jun2006.tar

Listing 1 snapbackup.sh script

#!/bin/sh
#
# Backup of CVS repositories using snapshots
#
MKSNAP_FFS=/sbin/mksnap_ffs
MDCONFIG=/sbin/mdconfig
MDNUM=4
MOUNT=/sbin/mount
UMOUNT=/sbin/umount
RM=/bin/rm
RSYNC=/usr/local/bin/rsync
FS=/r1
SF=${FS}/snapshot/backup.snap
MP=/backup
RHOST=10.0.0.2
RMOD=r1
LOGGER=/usr/bin/logger
FACILITY=local2.info
DEBUG=0
PIDFILE=/var/run/`basename $0`.pid

# logging via syslog
log() 
{
    LOGMSG=$1
    if [ -n "${LOGMSG}" ]; then
        ${LOGGER} -p ${FACILITY} -t "$0" "${LOGMSG}"
    fi
}

#
# main body 
#

# check if already running
if [ -f $PIDFILE ]; then
    log "`basename $0` is already running. Exit."
    exit 1
else
    touch $PIDFILE
fi

# parse the arguments
case $1 in
    -[dD])    DEBUG=1;;
esac

log  "Starting snapshot backup. `date`" 

if [ -x ${MKSNAP_FFS} ]; then
    if [ ${DEBUG} -gt 0 ]; then
        log "${MKSNAP_FFS} ${FS} ${SF}"
    fi

    ${MKSNAP_FFS} ${FS} ${SF}

    if [ -x ${MDCONFIG} ]; then
        if [ ${DEBUG} -gt 0 ]; then
            log "${MDCONFIG} -a -t vnode -f ${SF} -u ${MDNUM}"
        fi
        ${MDCONFIG} -a -t vnode -f ${SF} -u ${MDNUM}
        if [ -x ${MOUNT} ]; then
            if [ ${DEBUG}  -gt 0 ]; then
                log "${MOUNT} -r /dev/md${MDNUM} ${MP}"
            fi
            ${MOUNT} -r /dev/md${MDNUM} ${MP}

            log "Starting rsync. `date`" 

            ${RSYNC} -a --delete --force ${MP} ${RHOST}::${RMOD}/

            if [ -x ${UMOUNT} ]; then    
                if [ ${DEBUG} -gt 0 ]; then
                    log "${UMOUNT} ${MP}"
                fi
                ${UMOUNT} ${MP}
            fi
        fi

        if [ ${DEBUG} -gt 0 ]; then
            log "${MDCONFIG} -d -u ${MDNUM}"
        fi
        ${MDCONFIG} -d -u ${MDNUM}
    fi

    ${RM} -f ${SF} ${PIDFILE}

    log "Snapshot backup complete. `date`" 

fi