MadMax wrote: > Can you share the script/crontab etc you use to accomplish this?
Thats what i'm using: It's creating a full backup once a week (configable) and incremental backups the rest of the week. works well so far. ----------------------------8<--------------------------- #!/bin/bash # # COPYRIGHT: # (c) 2001 Chris Arrowood (GNU LGPL V2.1) # You may view the full copyright text at: # http://www.opensource.org/licenses/lgpl-license.html # # DESCRIPTION: # A simple BASH script to do nightly backups to tarballs # on a hard drive (not to tape) Ideal for home linux users # to easily backup thier system, provided they have an extra # hard drive. # ############################################### # User Variables # ############################################### # # Modify these variables to suit your needs # # Which day of the week do we want to do full backups? 0=Sunday LEVEL0DAY=0 # Where to create the backups; It should already exist BACKUP_DIR=/home/backup/data # Filesystems to backup seperated by spaces and the entire string in double quotes; each must start with / # Initialize with empty var FILESYSTEMS="/home" # Should we email results? Also should we email critical errors? 0=false, 1=true EMAIL=0 # EMAIL address to send results to [EMAIL PROTECTED] # Email Subject EMAILSUBJECT="$HOSTNAME Backup" # Only keep last weeks level0 backup (0) or keep all lvl 0 backups (1). Keeping all data may take a lot of space! KEEPALL=0 # Do we want to compress the backup file using gzip? 0=false, 1=true COMPRESS=1 # Should we compress the log file when we are done? 0=false, 1=true COMPRESSLOG=1 # If we are compressing, what level do we use? COMPRESSLEVEL=6 # Determines whether we see all output to screen. It will still go to log regardless of this value. 0=false, 1=true QUIET=1 # Would you like to get detailed information from tar and gzip? 0=false, 1=true VERBOSE=1 # DO NOT EDIT BELOW THIS LINE #-------------------------------------------------------- ############################################### # Application Variables - DO NOT EDIT # ############################################### # Day of the week; DAYOFWEEK=`date +"%w"` # Folder for all daily backups DAILYBACKUPDIR=$BACKUP_DIR/DAILY # Name of directory to create for current backup TODAYSBACKUPDIR=$DAILYBACKUPDIR/$DAYOFWEEK # directory to store last weeks data ARCHIVEDDATADIR=$BACKUP_DIR/ARCHIVED_BACKUPS # Location of a file to hold the date stamp of last level 0 backup L0DATESTAMP=$BACKUP_DIR/.level0_datestamp # Do I really need to explain this one ;-) NOW=`date` # Log dir LOGDIR=$BACKUP_DIR/LOGS # Svript name SCRIPTNAME="Simple Bash Backup Script" # Version VERSION=0.01 # Copyright COPYRIGHT="(c) 2001 Chris Arrowood (GNU GPL V.2)" # If user choose verbose, set the verbose command. Otherwise leave empty if [ $VERBOSE -eq 1 ] then VERBOSECOMMAND="--verbose" fi # Logfile LOGFILE=$LOGDIR/`date +"%m%d%Y_%s"`.log ######## Do some error checking ######### # Does backup dir exist? if [ ! -d $BACKUP_DIR ] then #Send Email and Exit if [ $EMAIL -eq 1 ] then echo "The specified backup directory $BACKUP_DIR does not exist. Operation canceled." | mail -s "$EMAILSUBJECT" $EMAILADDRESS fi echo "The specified backup directory $BACKUP_DIR does not exist. Operation canceled." exit 1 fi # Does the daily backup dir exist? If not, create it. if [ ! -d $DAILYBACKUPDIR ] then mkdir $DAILYBACKUPDIR fi # Does the daily backup dir exist? If not, create it. if [ ! -d $LOGDIR ] then mkdir $LOGDIR fi ####### Redirect Output to a logfile and screen - Couldnt get tee to work exec 3>&1 # create pipe (copy of stdout) exec 1>$LOGFILE # direct stdout to file exec 2>&1 # uncomment if you want stderr too if [ $QUIET -eq 0 ] then tail -f $LOGFILE >&3 & # run tail in bg fi ######## DO SOME PRINTING ############### echo " " echo "#######################################################################" echo "$SCRIPTNAME " echo "Version $VERSION" echo "$COPYRIGHT" echo " " echo "Host: $HOSTNAME " echo "Start Time: $NOW" echo "#######################################################################" echo " " echo " " echo " " ######## Run Backup ######### #if day is LEVEL0DAY do full backup if test $DAYOFWEEK -eq $LEVEL0DAY then LEVEL=0 #we need to archive the last full backup to the weekold dir #make sure the week-old dir exists if test -d $ARCHIVEDDATADIR then #remove old data unless KEEPALL is set to 1 if test $KEEPALL -eq 0 then rm -Rf $ARCHIVEDDATADIR/* fi else #the week-old data dir didnt exist; create it mkdir $ARCHIVEDDATADIR chmod 700 $ARCHIVEDDATADIR fi #move the last full backup to the weekold dir mv -f $TODAYSBACKUPDIR/* $ARCHIVEDDATADIR > /dev/null 2>&1 #remove all daily backups since they are simply incrementals on the bu we just archived rm -Rf $DAILYBACKUPDIR/* #make todays dir since we just blew it away mkdir $TODAYSBACKUPDIR #do FULL backup for each filesystem specified for BACKUPFILES in $FILESYSTEMS do #Create the filename; replace / with . WITHOUTSLASHES=`echo $BACKUPFILES | tr "/" "."` WITHOUTLEADINGDOT=`echo $WITHOUTSLASHES | cut -b2-` OUTFILENAME=$WITHOUTLEADINGDOT.`date +"%m%d%Y_%s"`.tar OUTFILE=$TODAYSBACKUPDIR/$OUTFILENAME STARTTIME=`date` echo " " echo " " echo "#######################################################################" echo "$STARTTIME: Creating a level $LEVEL backup of $BACKUPFILES to $OUTFILE" echo "#######################################################################" tar --create $VERBOSECOMMAND \ --file $OUTFILE \ --label "Level-$LEVEL Backup ${NOW}" \ $BACKUPFILES if test $COMPRESS -eq 1 then #gzip it gzip -$COMPRESSLEVEL $VERBOSECOMMAND $OUTFILE rm -f $OUTFILE fi done # Does the timestamp file exist? If not, create it. if [ ! -w $L0DATESTAMP ] then touch $L0DATESTAMP fi #record full backup timestamp echo $NOW > $L0DATESTAMP else #we should do an incremental backup LEVEL=1 # Does todays backup dir exist? If not, create it. if [ ! -d $TODAYSBACKUPDIR ] then mkdir $TODAYSBACKUPDIR fi # Does the timestamp file exist? If not, create it. if [ ! -w $L0DATESTAMP ] then touch $L0DATESTAMP echo "1969-12-31" > $L0DATESTAMP fi #get date of last full backup LAST=`cat $L0DATESTAMP` #Do a level 1 Backup for each filesystem specified for BACKUPFILES in $FILESYSTEMS do #Create the filename; replace / with . WITHOUTSLASHES=`echo $BACKUPFILES | tr "/" "."` WITHOUTLEADINGDOT=`echo $WITHOUTSLASHES | cut -b2-` OUTFILENAME=$WITHOUTLEADINGDOT.`date +"%m%d%Y_%s"`.tar OUTFILE=$TODAYSBACKUPDIR/$OUTFILENAME STARTTIME=`date` echo " " echo " " echo "#######################################################################" echo "$STARTTIME: Creating a level $LEVEL backup of $BACKUPFILES to $OUTFILE" echo "#######################################################################" tar --create $VERBOSECOMMAND \ --file $OUTFILE \ --after-date "$LAST" \ --label "Level-$LEVEL Backup from $LAST to $NOW" \ $BACKUPFILES if test $COMPRESS -eq 1 then #gzip it gzip -$COMPRESSLEVEL $VERBOSECOMMAND $OUTFILE rm -f $OUTFILE fi done fi SCRIPTFINISHTIME=`date` echo " " echo " " echo " " echo " " echo "#######################################################################" echo "Finish Time: $SCRIPTFINISHTIME" echo " " echo " NOTE: Always examine the output of this script carefully for errors." echo " Also, be sure to verify your backups and your ability to " echo " retsore from them. " echo "#######################################################################" #email notification if [ $EMAIL -eq 1 ] then cat $LOGFILE | mail -s "$EMAILSUBJECT" $EMAILADDRESS fi #Fix stdout and stderr to go to console instead of og file since we are #about to compress the log file exec 1>&3 exec 2>&3 #compress log file? if test $COMPRESSLOG -eq 1 then #gzip it gzip -$COMPRESSLEVEL $LOGFILE > /dev/null 2>&1 rm -f $LOGFILE > /dev/null 2>&1 fi exit 0 Best regards, Michael Kunze -- PUNNY BOOK: Tear Up Those Betting Slips: Lou Zerr. -- [EMAIL PROTECTED] mailing list
