FreeBSD Full / Incremental Tape Backup Shell Script

by admin on July 24, 2009 · 0 comments

#!/bin/sh
# A FreeBSD shell script to dump Filesystem with full and incremental backups to tape device connected to server.
# Tested on FreeBSD 6.x and 7.x - 32 bit and 64 bit systems.
# May work on OpenBSD / NetBSD.
# -------------------------------------------------------------------------
# Copyright (c) 2007 nixCraft project <http://www.cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ----------------------------------------------------------------------
LOGGER=/usr/bin/logger
DUMP=/sbin/dump
# FSL="/dev/aacd0s1a /dev/aacd0s1g"
FSL="/usr /var"
NOW=$(date +"%a")
LOGFILE="/var/log/dumps/$NOW.dump.log"
TAPE="/dev/sa0"
 
mk_auto_dump(){
	local fs=$1
	local level=$2
	local tape="$TAPE"
	local opts=""
 
	opts="-${level}uanL -f ${tape}"
        # run backup
	$DUMP ${opts} $fs
	if [ "$?" != "0" ];then
       		$LOGGER "$DUMP $fs FAILED!"
       		echo "*** DUMP COMMAND FAILED - $DUMP ${opts} $fs. ***"
	else
  		$LOGGER "$DUMP $fs DONE!"
	fi
}
 
dump_all_fs(){
	local level=$1
	for f in $FSL
	do
		mk_auto_dump $f $level
	done
}
 
init_backup(){
	local d=$(dirname $LOGFILE)
	[ ! -d ${d} ] && mkdir -p ${d}
}
 
init_backup
 
case $NOW in
	Mon)	dump_all_fs 0;;
	Tue)	dump_all_fs 1;;
	Wed)	dump_all_fs 2;;
	Thu)	dump_all_fs 3;;
	Fri) 	dump_all_fs 4;;
	Sat) 	dump_all_fs 5;;
	Sun) 	dump_all_fs 6;;
	*) ;;
esac > $LOGFILE 2>&1

How do I run this script?

Download this script and unzip in /root. Open script and customize tape device ($TAPE variable) and file systems ($FSL). Operator can run this script from a shell prompt:
# /root/tapebackup.sh
Or via a cron job:
@midnight /root/tapebackup.sh

Previous post:

Next post: