Boston Linux & Unix (BLU) Home | Calendar | Mail Lists | List Archives | Desktop SIG | Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings
Linux Cafe | Meeting Notes | Blog | Linux Links | Bling | About BLU

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Backup software



> I am looking for dependable backup software that handles both full and
> incremental backups. I need to beable to do occassional network backups of
> single machines for maintenance purposes. The backup device is a Seagate 4G
> IDE Tape drive.

Attached are the scripts I have 'cron' run each night.  They do full and
incremental backups of Linux, Solaris, SunOS, Win9x and WinNT machines.

All that's required is 'rsh' access to the Unix boxes, Samba, and 'bash'.

I've been using scripts for network backups for years - we have a small shop
(~20 machines), and it's been more than adequate.  


-------------- next part --------------
#!/bin/bash
#

append()	# append item to backup list table
{
    n=${#blist[*]}
    blist[$n]=$1
}

# Backup table
#
#     host    platform  filesystem   levels (Full/Incremental MTWTF)
append 'aoi        SunOS    /dev/rsd0a 		F I I I I'
append 'aoi        SunOS    /dev/rsd0g 		F I I I I'
append 'aoi        SunOS    /dev/rsd0h 		F I I I I'
append 'aoi	   SunOS    /dev/rsd0c		F I I I I'
append 'aoi	   SunOS    /dev/rsd0d		F I I I I'
append 'aoi        SunOS    /dev/rsd1c 		I F I I I'
append 'aoi        SunOS    /dev/rsd2c 		I F I I I'
append 'aoi        SunOS    /dev/rsd3c 		I F I I I'
#####################
append 'brontes    SunOS    /dev/rsd0a 		I F I I I'
append 'brontes    SunOS    /dev/rsd0g 		I F I I I'
append 'brontes    SunOS    /dev/rsd0h 		I F I I I'
#####################
append 'artemis    SunOS    /dev/rsd0a 		I F I I I'
append 'artemis    SunOS    /dev/rsd0g 		I F I I I'
append 'artemis    SunOS    /dev/rsd0h 		I I F I I'
append 'artemis    SunOS    /dev/rsd3a 		I I F I I'
append 'artemis    SunOS    /dev/rsd3b 		I I F I I'
append 'artemis    SunOS    /dev/rsd3d 		I I F I I'
#####################
append 'loki       LinuxTar /mnt/windows/gbb 	I I I F I'
append 'loki       Linux    /dev/sda2 		I I I F I'
#####################
append 'pendragon  Linux    /dev/hda1 		I I I F I'
#####################
append 'raijin     Linux    /dev/hda1 		I I I F I'
#####################
append 'ceres      Solaris  /dev/rdsk/c0t0d0s0	I I I F I'
append 'ceres      Solaris  /dev/rdsk/c0t0d0s7	I I I F I'
#####################
append 'priam      LinuxTar /etc		F F F F F'
append 'priam      LinuxTar /var/named		F F F F F'
append 'priam      LinuxTar /usr/local		I I I I F'
append 'priam      LinuxTar /root		I I I I F'
#####################
append 'hydra      SunOS    /dev/rsd0a 		I I I F I'
append 'hydra      SunOS    /dev/rsd0g 		I I I F I'
append 'hydra      SunOS    /dev/rsd0h 		I I I F I'
append 'hydra      SunOS    /dev/rsd6c 		I I I I F'
append 'hydra      SunOS    /dev/rsd2c 		I I I I F'
#####################
#append 'tohoten	   Linux    /dev/hda1	I I I I F'
#####################
append 'lugia      Linux    /dev/hda5		I I I I F'
#####################

# Using 'dd' to write the tape avoids requiring .rhosts on artemis (owner
# of the tape drive) giving access to root from the other systems.  If
# the command were of the form 'rsh <remothost> dump f artemis:/dev/rst0',
# artemis would need to give root rsh privileges to <remotehost>.  Not doing
# this avoids giving system wide superuser privileges to people with Unix
# machines on their desks, while allowing those same people to have 
# superuser privileges for the machines on their desks.
#

TAPEDEV=/dev/nst0
WRT_TAPE="dd of=$TAPEDEV obs=126b"

error_exit()
{
    echo "The nightly backup failed" | mail -s "backup failed" backuplist
    mt -f $TAPEDEV rewoffl
    exit
}

dump_host()	# args: host platform filesystem levels day_of_week
{
    echo '####################'
    date
    # first test if we can access remote host
    rsh -n $1 echo
    if [ $? != 0 ] ; then
	echo "rsh to $1 failed" | mail -s "backup failed" backuplist
	return
    fi

    day=$(($9 + 2))
    level=${!day}	# evaluate $day'th positional argument

    if [ $level = F ] ; then
        dl=0
	echo File $fileno: Full backup of $3 on $1
    else
        dl=5
	echo File $fileno: Incremental backup of $3 on $1
    fi

    case $2 in 
	SunOS)    rsh -n $1 /etc/dump ${dl}uf - $3 | $WRT_TAPE ;;
	Solaris)  rsh -n $1 /usr/sbin/ufsdump ${dl}uf - $3 | $WRT_TAPE ;;
	Linux)    rsh -n $1 /sbin/dump ${dl}uf - $3 | $WRT_TAPE ;;
	LinuxTar) if [ $level = F ] ; then
		    rsh -n $1 tar zcf - $3 | $WRT_TAPE
		  else
		    rsh -n $1 tar zcf - -N \"7 days ago\" $3 | $WRT_TAPE
		  fi ;;
    esac

    if [ $? != 0 ] ; then error_exit ; fi

    fileno=$(($fileno + 1))
}

date
mt -f $TAPEDEV rewind
if [ $? != 0 ] ; then error_exit; fi

#
#set -v
cd /root/backup 

# Put a copy of the backup scripts on the tape as File 0
tar cvf $TAPEDEV backup pc.backup
if [ $? != 0 ] ; then error_exit; fi

# Determine backup level for today.  Get the day of the week, and
# add in the offset to the backup level arguments.  The crontab entries
# run backups starting at midnight, Monday night - Friday night, so
# the day of week numbers will be 2-6.  The level arguments start at $4.

if [ $# -eq 1 ] ; then
    case $1 in 
	monday)    day_of_week=2 ;;
	tuesday)   day_of_week=3 ;;
	wednesday) day_of_week=4 ;;
	thursday)  day_of_week=5 ;;
	friday)    day_of_week=6 ;;
	*)  echo use day of week in lowercase
	    exit ;;
    esac
else
    day_of_week=$((`date +%w`))
    if [ $day_of_week -lt 2 ] ; then day_of_week=2 ; fi
    if [ $day_of_week -gt 6 ] ; then day_of_week=6 ; fi
fi

# Main loop.  Execute the backup for each host entry.
fileno=1
i=0
while [ $i -lt ${#blist[*]} ] ; do

    dump_host ${blist[$i]} $day_of_week

    i=$(($i + 1))
done

# Roll over the transaction log
rsh -n artemis /backup/minxkill

date
echo File $fileno - 'M$-win units'
/root/backup/pc.backup $fileno

mt -f $TAPEDEV rewoffl
-------------- next part --------------
#! /bin/bash
if [ $# = 0 ] ; then
    fileno=0
else
    fileno=$1
fi

SMBC=/usr/local/samba/bin/smbclient
cd /root/backup
TAPE=/dev/nst0

sendFailed()
{
    echo email to $2 re: $1 not available

    echo $'Backups were not done this evening because your machine is not available on\nthe network.  Please be sure to leave your machine on each night so backups\ncan be done.  Thank you!' | mail -c backuplist -s $1 $2
}

EXCLUDE='windows winnt dos xnfs orcadwin MAXPLUS2 emacs OmniX OmniNFSXe \
    MSOffice Office wpwin60 Acrobat3 engr wpc20 DMI ATI PAGEMGR KPCMS OPLIMIT \
    wpwin60 dell mouse vibra16 teac winmcad win32app acroread acrobat3 \
    bsdl pkware ACADR13 DTEXT23 MCVHDL RECYCLED lotus Corel Eudora/eudora.log \
    ACER MAX2WORK ticd abel3 clipart HPFONTS ORCADWIN ICM98 OrCad2 gs \
    ALLIED99 CKWIN7 gstools PSFONTS synplicity WINPROJ Ck99R2 COMPAQ max2key'

#  Hosts with <ADMINPASSWORD> remote access account 
#
# 
blAppend()
{
    n=${#hlist[*]}	# appednd to host list
    hlist[$n]=$1

    n=${#slist[*]}	# append to share list
    slist[$n]=$2

    n=${#olist[*]}	# append to owner email name list 
    olist[$n]=$3
}

# Build list of 
#         host   share user-to-notify
blAppend drachma   C    glenn
blAppend kopek     C    johnf
blAppend masada    C    mike
blAppend vishnu    C    maureen
blAppend aries     C    laura
blAppend pellinore C    ellen
blAppend sappho    C    charlie
blAppend diana     C    pbm
blAppend mordred   C    jamie
blAppend gawaine   C	neal
blAppend tristan   C    craig
blAppend tristan   D    chris
blAppend fujin     C    jim

i=0
while [ $i -lt ${#hlist[*]} ] ; do
    echo
    date
    echo ping ${hlist[$i]}
    ping -c 1 ${hlist[$i]}
    if [ $? != 0 ] ; then
      sendFailed ${hlist[$i]} ${olist[$i]}
    else
      echo File ${fileno}: ${hlist[$i]}
      $SMBC \\\\${hlist[$i]}\\${slist[$i]} "<ADMINPASSWORD>" -TcbX 126 $TAPE \
	    	"Program Files" "To Clean" $EXCLUDE \
	&> ${hlist[$i]}-${slist[$i]}.log
      if [ $? != 0 ] ; then
		sendFailed ${hlist[$i]} ${olist[$i]}
	  fi

      fileno=$(($fileno + 1))
    fi
    i=$(($i + 1))
done

echo "PC backups complete"
date



BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org