]> git.wh0rd.org - dump.git/blobdiff - examples/cron_dump_to_disk/backup
More improvements from Aaron S. Hawley <aaron.s.hawley@gmail.com>.
[dump.git] / examples / cron_dump_to_disk / backup
index 0cd319e9e93beb3823d9ba47a5942182b4d7849d..43818c3a670a19b9c4521b2a3db3bcaee9d291f8 100755 (executable)
@@ -1,10 +1,20 @@
 #!/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
@@ -16,9 +26,11 @@ fi
 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
@@ -29,10 +41,10 @@ fi
 # 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"
 
@@ -42,27 +54,29 @@ DUMPFILESOWN="root.root"
 
 echo
 echo "#####################################################################"
-echo "Starting backup."
+echo "Starting ${BACKUP} backup."
 echo "#####################################################################"
 echo
 
 
 #
-#  Make full system backup
+#  Make system backup
 #
 
-echo "### Full System Dump Backup ###"
+echo "### ${BACKUP} System Dump Backup ###"
 echo "Using backup partition: $BACKUPPART"
 echo "Filesystems to dump: $FSTODUMP"
 
 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 " There were problems remounting $BACKUPPART in read-write mode!"
-   echo "Aborting Full System Dump Backup."
-   echo "Aborted, done."
+   echo "Aborting ${BACKUP} System Dump Backup."
+   echo "Aborted."
    echo "-------------------------------------------------------------------------------"
    exit 1
 fi
@@ -72,37 +86,39 @@ if [ -d $BACKUPPART/$BACKUPDIR -a -w $BACKUPPART/$BACKUPDIR ]; then
    echo "done."
 
    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 -Ew $BACKUPPART|awk '{printf "%6.0f\n", $4}'`
-   SAVAILDEL=`du -s --block-size=1048576 $BACKUPPART/$BACKUPDIR/. |awk '{printf "%6.0f\n", $1}'`
+   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 " Available: $SAVAIL MB Required: $SREQ MB."
+      echo "Available: $SAVAIL MB Required: $SREQ MB."
    else
-      echo "no enough space!"
-      echo " There is not enough space left in $BACKUPPART for the backup!"
-      echo " Available: $SAVAIL MB Required: $SREQ MB."
+      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 " There were problems remounting $BACKUPPART in read-only mode!"
-         echo "Aborting Full System Dump Backup."
-         echo "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 "Aborting Full System Dump Backup."
-      echo "Aborted, done."
+      echo "Aborting ${BACKUP} System Dump Backup."
+      echo "Aborted."
       echo "-------------------------------------------------------------------------------"
       exit 1
    fi
 
    echo -n "Deleting old files ... "
-   if [ `ls -la $BACKUPPART/$BACKUPDIR/|wc -l` -gt "3" ]; then
+   if [ `ls -la $BACKUPPART/$BACKUPDIR/ | wc -l` -gt "3" ]; then
       rm -f $BACKUPPART/$BACKUPDIR/* &> /dev/null
       echo "done."
    else
@@ -115,17 +131,29 @@ if [ -d $BACKUPPART/$BACKUPDIR -a -w $BACKUPPART/$BACKUPDIR ]; then
       if [ "$FS" = "/" ]; then
          FSNAME="root"
       else
-         FSNAME=`echo $FS|tr / _|cut -b 2-`
+         FSNAME=`echo $FS | tr / _ | cut -b 2-`
       fi
       sync
-      echo -n " 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 " There where problems with the dump of $FSNAME ( $FS )."
-         echo " Check logfile $BACKUPPART/$BACKUPDIR/$FSNAME.log for more info"
-         echo " 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
@@ -143,21 +171,21 @@ if [ -d $BACKUPPART/$BACKUPDIR -a -w $BACKUPPART/$BACKUPDIR ]; then
 
 else
    echo "problems!"
-   echo " There are problems with the directory structure."
-   echo " Check dirs: $BACKUPPART/$BACKUPDIR"
+   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 " There were problems remounting $BACKUPPART in read-only mode!"
-      echo "Aborting Full System Dump Backup."
-      echo "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 "Aborting Full System Dump Backup."
-   echo "Aborted, done."
+   echo "Aborting ${BACKUP} System Dump Backup."
+   echo "Aborted."
    echo "-------------------------------------------------------------------------------"
    exit 1
 fi
@@ -167,13 +195,15 @@ if ( mount $BACKUPPART -o remount,ro &> /dev/null ) then
    echo "done."
 else
    echo "failure!"
-   echo " There were problems remounting $BACKUPPART in read-only mode!"
-   echo "Aborting Full System Dump Backup."
-   echo "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 "End of Full System Dump Backup."
+echo "### End of ${BACKUP} System Dump Backup ###"
 echo "Done."
 echo "-------------------------------------------------------------------------------"
+
+## end of script