tape back up
Glenn Burkhardt
glenn at aoi.ultranet.com
Mon Mar 26 12:31:00 EST 2001
I run a backup of all our machines (Linux, SunOS, Solaris, Win98, WinNT)
each night on a DDS-3 drive. I have two scripts (attached), run by 'cron'
each night. It's been working fine for years. You don't mention how many
machines you're backing up, though.
P.S. The scripts require Bash...
-------------- 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/rsd1c F I 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/nt/gbb I I I F I'
append 'loki Linux /dev/sda2 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 '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 'pendragon Linux /dev/hda1 I I I F I'
#####################
append 'raijin Linux /dev/sda2 I I I F I'
append 'raijin Linux /dev/sdb1 I I I F I'
#####################
append 'muse Linux /home 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'
# 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
{
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
# 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.
day_of_week=$((`date +%w` + 2))
if [ $day_of_week -lt 4 ] ; then day_of_week=4 ; fi
if [ $day_of_week -gt 8 ] ; then day_of_week=8 ; fi
level=${!day_of_week}
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
# Main loop. Execute the backup for each host entry.
fileno=1
i=0
while [ $i -lt ${#blist[*]} ] ; do
dump_host ${blist[$i]}
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
FAILED_MSG="\
Backups were not done this evening because your machine is not available on\n\
the network. Please be sure to leave your machine on each night so backups\n\
can be done. Thank you!"
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'
# Hosts with full access to shares with <PASSWORD>
#
#
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 sandra
blAppend kopek C johnf
blAppend masada C mike
blAppend vishnu C maureen
blAppend aries C laura
blAppend fujin C jim
blAppend fujin D jim
blAppend pellinore C ellen
blAppend sappho C dolores
blAppend diana C pbm
blAppend osimo C yvan
i=0
while [ $i -lt ${#hlist[*]} ] ; do
echo
date
echo ping ${hlist[$i]}
ping -c 1 ${hlist[$i]}
if [ $? != 0 ] ; then
echo email to ${olist[$i]} for ${hlist[$i]} not available
echo $FAILED_MSG | mail -s "Backup for ${hlist[$i]} failed" ${olist[$i]}
echo $FAILED_MSG | mail -s "Backup for ${hlist[$i]} (${olist[$i]}) failed" backuplist
else
echo File ${fileno}: ${hlist[$i]}
$SMBC \\\\${hlist[$i]}\\${slist[$i]} "PASSWORD" -TcbX 126 $TAPE \
"Program Files" $EXCLUDE &> ${hlist[$i]}-${slist[$i]}.log
fileno=$(($fileno + 1))
fi
i=$(($i + 1))
done
echo "PC backups complete"
date
More information about the Discuss
mailing list