#!/bin/bash
#
# This script will make a simple backup of the most critical partitions,
-# using the "dump" facility, into the backup partition. It will stop the
-# webserver, and recurse the sites directories making a tar mini-backup of
-# the database dirs. It will the restart the webserver, and start the
-# "dump" backup.
+# using the "dump" facility, into the backup partition.
+#
+# Run the following to make a complete backup:
+#
+# $ su -c "backup full"
+#
+# Run the following to make an incremental backup:
+#
+# $ su -c "backup inc"
+#
+# Add "nodumpdate" to run a backup but not effect the backup state
+# recorded in the file /var/lib/dumpdates and reported by dump -W:
+#
+# $ su -c "backup full nodumpdate"
#
if [ "$2" = "nodumpdate" ]; then
if [ "$1" = "full" ]; then
DLEVEL="0"
BTYPE="full"
+ BACKUP="Full"
elif [ "$1" = "inc" ]; then
DLEVEL="1"
BTYPE="inc"
+ BACKUP="Incremental"
else
echo "Usage: $0 full|inc [nodumpdate]"
exit 1
# Configuration Parameters
#
-BACKUPPART="/backup"
-BACKUPDIR="current"
+BACKUPPART=${BACKUPPART:-"/backup"}
+BACKUPDIR=${BACKUPDIR:-"current"}
DUMPLOGARCH="$BACKUPPART/backup.dump.log.gz"
-FSTODUMP="/ /var /home /mnt/hdb1 /usr"
+FSTODUMP=${FSTODUMP:-/ /var /home /mnt/hdb1 /usr}
DUMPFILESMODE="0644"
DUMPFILESOWN="root.root"
echo
echo "#####################################################################"
-echo "Starting backup."
+echo "Starting ${BACKUP} backup."
echo "#####################################################################"
echo
#
-# Make full system backup
+# Make system backup
#
-echo "Phase 1: ### Full System Dump Backup ###"
-echo "Phase 1: Using backup partition: $BACKUPPART"
-echo "Phase 1: Filesystems to dump: $FSTODUMP"
+echo "### ${BACKUP} System Dump Backup ###"
+echo "Using backup partition: $BACKUPPART"
+echo "Filesystems to dump: $FSTODUMP"
-echo -n "Phase 1: Remounting backup partition read-write ... "
+echo -n "Remounting backup partition read-write ... "
if ( mount $BACKUPPART -o remount,rw &> /dev/null ) then
echo "done."
+elif ( mount $BACKUPPART -o rw &> /dev/null ) then
+ echo "done."
else
echo "failure!"
- echo "Phase 1: There were problems remounting $BACKUPPART in read-write mode!"
- echo "Phase 1: Aborting Full System Dump Backup."
- echo "Phase 1: Aborted, done."
+ echo " There were problems remounting $BACKUPPART in read-write mode!"
+ echo "Aborting ${BACKUP} System Dump Backup."
+ echo "Aborted."
echo "-------------------------------------------------------------------------------"
exit 1
fi
-echo -n "Phase 1: Checking backup partition for correct dir structure ... "
+echo -n "Checking backup partition for correct dir structure ... "
if [ -d $BACKUPPART/$BACKUPDIR -a -w $BACKUPPART/$BACKUPDIR ]; then
echo "done."
- echo -n "Phase 1: Checking backup partition for available space ... "
- SREQ=`for i in $FSTODUMP;do dump -$DLEVEL -S $i 2> /dev/null;done|awk '{x=x+$1/1048576} END {printf "%6.0f\n", x}'`
- SAVAILFREE=`df --block-size=1048576 |grep -Ew $BACKUPPART|awk '{printf "%6.0f\n", $4}'`
- SAVAILDEL=`du -s --block-size=1048576 $BACKUPPART/$BACKUPDIR/. |awk '{printf "%6.0f\n", $1}'`
+ echo -n "Checking backup partition for available space ... "
+ SREQ=`for i in $FSTODUMP; do dump -$DLEVEL -S $i 2> /dev/null; done | awk '{x=x+$1/1048576} END {printf "%6.0f\n", x}'`
+ SAVAILFREE=`df --block-size=1048576 | grep -Fe $BACKUPPART | awk '{printf "%6.0f\n", $4}'`
+ SAVAILDEL=`du -s --block-size=1048576 $BACKUPPART/$BACKUPDIR/. | awk '{printf "%6.0f\n", $1}'`
SAVAIL=`expr $SAVAILFREE + $SAVAILDEL`
if [ `expr $SAVAIL - $SREQ` -gt "0" ]; then
echo "done."
- echo "Phase 1: Available: $SAVAIL MB Required: $SREQ MB."
+ echo "Available: $SAVAIL MB Required: $SREQ MB."
else
- echo "no enough space!"
- echo "Phase 1: There is not enough space left in $BACKUPPART for the backup!"
- echo "Phase 1: Available: $SAVAIL MB Required: $SREQ MB."
- echo -n "Phase 1: Remounting backup partition read-only ... "
+ echo "not enough space!"
+ echo "There is not enough space left in $BACKUPPART for the backup!"
+ echo "Available: $SAVAIL MB Required: $SREQ MB."
+ echo -n "Remounting backup partition read-only ... "
if ( mount $BACKUPPART -o remount,ro &> /dev/null ) then
echo "done."
+ elif ( mount $BACKUPPART -o ro &> /dev/null ) then
+ echo "done."
else
echo "failure!"
- echo "Phase 1: There were problems remounting $BACKUPPART in read-only mode!"
- echo "Phase 1: Aborting Full System Dump Backup."
- echo "Phase 1: Aborted, done."
+ echo "There were problems remounting $BACKUPPART in read-only mode!"
+ echo "Aborting ${BACKUP} System Dump Backup."
+ echo "Aborted."
echo "-------------------------------------------------------------------------------"
exit 1
fi
- echo "Phase 1: Aborting Full System Dump Backup."
- echo "Phase 1: Aborted, done."
+ echo "Aborting ${BACKUP} System Dump Backup."
+ echo "Aborted."
echo "-------------------------------------------------------------------------------"
exit 1
fi
- echo -n "Phase 1: Deleting old files ... "
- if [ `ls -la $BACKUPPART/$BACKUPDIR/|wc -l` -gt "3" ]; then
+ echo -n "Deleting old files ... "
+ if [ `ls -la $BACKUPPART/$BACKUPDIR/ | wc -l` -gt "3" ]; then
rm -f $BACKUPPART/$BACKUPDIR/* &> /dev/null
echo "done."
else
echo "no old files to delete."
fi
- echo "Phase 1: Dumping filesystems ... "
+ echo "Dumping filesystems ... "
for FS in $FSTODUMP
do
if [ "$FS" = "/" ]; then
FSNAME="root"
else
- FSNAME=`echo $FS|tr / _|cut -b 2-`
+ FSNAME=`echo $FS | tr / _ | cut -b 2-`
fi
sync
- echo -n "Phase 1: Starting dump of $FSNAME ( $FS ) ... "
- if ( dump -$DLEVEL $UPDATEDDATE -z -M -s 27306 -f $BACKUPPART/$BACKUPDIR/$FSNAME.$BTYPE. $FS &> $BACKUPPART/$BACKUPDIR/$FSNAME.log ) then
+ TODAY="`date +%a%Y%m%d`"
+ echo -n "Starting dump of $FSNAME ( $FS ) ... "
+ if ( dump -$DLEVEL $UPDATEDDATE -z -M -s 27306 -f $BACKUPPART/$BACKUPDIR/$FSNAME.$BTYPE. -Q $BACKUPPART/$BACKUPDIR/$FSNAME.$BTYPE.qfa -L ${TODAY}file $FS &> $BACKUPPART/$BACKUPDIR/$FSNAME.log ) then
echo "done."
else
echo "problems!"
- echo "Phase 1: There where problems with the dump of $FSNAME ( $FS )."
- echo "Phase 1: Check logfile $BACKUPPART/$BACKUPDIR/$FSNAME.log for more info"
- echo "Phase 1: Also check log archive file $DUMPLOGARCH."
+ echo "There were problems with the dump of $FSNAME ( $FS )."
+ echo "Check log file at $BACKUPPART/$BACKUPDIR/$FSNAME.log.gz"
+ echo "Also check log archive file $DUMPLOGARCH."
+ fi
+
+ echo -n "Verifying dump of $FSNAME ( $FS ) ... "
+ echo "-------------------------------------------------------------------------------" >> $BACKUPPART/$BACKUPDIR/$FSNAME.log
+ echo "Result of dump for $FSNAME ( $FS ):" >> $BACKUPPART/$BACKUPDIR/$FSNAME.log
+ if ( restore -C -M -f $BACKUPPART/$BACKUPDIR/$FSNAME.$BTYPE. >> $BACKUPPART/$BACKUPDIR/$FSNAME.log 2>&1 ) then
+ echo "done."
+ else
+ echo "problems!"
+ echo "There were problems verifying the dump of $FSNAME ( $FS )."
+ echo "Check log file $BACKUPPART/$BACKUPDIR/$FSNAME.log.gz for more info"
fi
cat $BACKUPPART/$BACKUPDIR/$FSNAME.log |gzip >> $DUMPLOGARCH
echo "-------------------------------------------------------------------------------" |gzip >> $DUMPLOGARCH
done
- echo -n "Phase 1: Setting ownership and permissions of dump files ... "
+ echo -n "Setting ownership and permissions of dump files ... "
chmod $DUMPFILESMODE $BACKUPPART/$BACKUPDIR/* $DUMPLOGARCH &> /dev/null
chown $DUMPFILESOWN $BACKUPPART/$BACKUPDIR/* $DUMPLOGARCH &> /dev/null
echo "done."
- echo -n "Phase 1: Compressing dump log files ... "
+ echo -n "Compressing dump log files ... "
gzip $BACKUPPART/$BACKUPDIR/*.log &> /dev/null
echo "done."
sync
else
echo "problems!"
- echo "Phase 1: There are problems with the directory structure."
- echo "Phase 1: Check dirs: $BACKUPPART/$BACKUPDIR"
- echo -n "Phase 1: Remounting backup partition read-only ... "
+ echo "There are problems with the directory structure."
+ echo "Check directory: $BACKUPPART/$BACKUPDIR"
+ echo -n "Remounting backup partition read-only ... "
if ( mount $BACKUPPART -o remount,ro &> /dev/null ) then
echo "done."
else
echo "failure!"
- echo "Phase 1: There were problems remounting $BACKUPPART in read-only mode!"
- echo "Phase 1: Aborting Full System Dump Backup."
- echo "Phase 1: Aborted, done."
+ echo "There were problems remounting $BACKUPPART in read-only mode!"
+ echo "Aborting ${BACKUP} System Dump Backup."
+ echo "Aborted."
echo "-------------------------------------------------------------------------------"
exit 1
fi
- echo "Phase 1: Aborting Full System Dump Backup."
- echo "Phase 1: Aborted, done."
+ echo "Aborting ${BACKUP} System Dump Backup."
+ echo "Aborted."
echo "-------------------------------------------------------------------------------"
exit 1
fi
-echo -n "Phase 1: Remounting backup partition read-only ... "
+echo -n "Remounting backup partition read-only ... "
if ( mount $BACKUPPART -o remount,ro &> /dev/null ) then
echo "done."
else
echo "failure!"
- echo "Phase 1: There were problems remounting $BACKUPPART in read-only mode!"
- echo "Phase 1: Aborting Full System Dump Backup."
- echo "Phase 1: Aborted, done."
+ echo "There were problems remounting $BACKUPPART in read-only mode!"
+ echo "Aborting ${BACKUP} System Dump Backup."
+ echo "Aborted."
echo "-------------------------------------------------------------------------------"
exit 1
fi
-echo "Phase 1: End of Full System Dump Backup."
-echo "Phase 1: Done."
+echo "### End of ${BACKUP} System Dump Backup ###"
+echo "Done."
echo "-------------------------------------------------------------------------------"
+
+## end of script