]> git.wh0rd.org - dump.git/commitdiff
Added backup scripts from Eugenio Diaz.
authorStelian Pop <stelian@popies.net>
Fri, 30 Nov 2001 10:12:40 +0000 (10:12 +0000)
committerStelian Pop <stelian@popies.net>
Fri, 30 Nov 2001 10:12:40 +0000 (10:12 +0000)
examples/cron_dump_to_disk/README [new file with mode: 0644]
examples/cron_dump_to_disk/backup [new file with mode: 0755]
examples/cron_dump_to_disk/backup_rotate [new file with mode: 0755]
examples/cron_dump_to_disk/backupskel.tar.gz [new file with mode: 0644]
examples/cron_dump_to_disk/crontab_entries.txt [new file with mode: 0644]

diff --git a/examples/cron_dump_to_disk/README b/examples/cron_dump_to_disk/README
new file mode 100644 (file)
index 0000000..5301f17
--- /dev/null
@@ -0,0 +1,31 @@
+Here is how to use these backup scripts:
+
+1. Create a separate backup partition big enough to hold all the filesystems you want to backup + any changes. Preferably, get a big inexpensive ide drive, and dedicate it as a backup drive.
+
+2. Create the mount point for the partition as /backup (otherwise, modify the config parameters at the top of the scripts).
+
+3. Mount the partition read-write, cd into /backup, and extract the backupskel.tar.gz there. This will create the directory structure needed by the scripts.
+
+4. Set the partition to be mounted as read-only in your /etc/fstab. This will protect your precious backup from software crashes.
+
+5. Copy the backup scripts "backup" and "backup_rotate" to a suitable directory in cron's path; "/usr/bin" is a good location. alternatively, you can place them anywhere, and modify the crontab entries to match, or run it manually.
+
+6. Modify your /etc/crontab file to add these entries, and be sure to modify the times to suit your preferences, and the performance of your machine:
+
+----------%<---------------------------------%<--------------------------------
+
+# Perform Nightly Backup (nightly incremental + weekly full + monthly full)
+02 06 * * 1-6 root backup_rotate ; nice -1 backup inc
+02 06 * * sun root backup_rotate ; nice -1 backup full
+07 00 01 * * root backup_rotate monthly ; backup full nodumpdate
+
+----------%<---------------------------------%<--------------------------------
+
+Any questions? Send me and email to getnito@yahoo.com.
+
+And that is it. Have fun!
+
+--
+nito
+
+getnito@yahoo.com
diff --git a/examples/cron_dump_to_disk/backup b/examples/cron_dump_to_disk/backup
new file mode 100755 (executable)
index 0000000..da6bda6
--- /dev/null
@@ -0,0 +1,179 @@
+#!/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.
+#
+
+if [ "$2" = "nodumpdate" ]; then
+   UPDATEDDATE=""
+else
+   UPDATEDDATE="-u"
+fi
+
+if [ "$1" = "full" ]; then
+   DLEVEL="0"
+   BTYPE="full"
+elif [ "$1" = "inc" ]; then
+   DLEVEL="1"
+   BTYPE="inc"
+else
+   echo "Usage: $0 full|inc [nodumpdate]" 
+   exit 1
+fi
+
+
+#
+# Configuration Parameters
+#
+
+BACKUPPART="/backup"
+BACKUPDIR="current"
+DUMPLOGARCH="$BACKUPPART/backup.dump.log.gz"
+FSTODUMP="/ /var /home /mnt/hdb1 /usr"
+DUMPFILESMODE="0644"
+DUMPFILESOWN="root.root"
+
+#
+# Start
+# 
+
+echo
+echo "#####################################################################"
+echo "Starting backup."
+echo "#####################################################################"
+echo
+
+
+#
+#  Make full system backup
+#
+
+echo "Phase 1: ### Full System Dump Backup ###"
+echo "Phase 1: Using backup partition: $BACKUPPART"
+echo "Phase 1: Filesystems to dump: $FSTODUMP"
+
+echo -n "Phase 1: Remounting backup partition read-write ... "
+if ( mount $BACKUPPART -o remount,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 "-------------------------------------------------------------------------------"
+   exit 1
+fi
+
+echo -n "Phase 1: 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}'`
+   SAVAIL=`expr $SAVAILFREE + $SAVAILDEL`
+
+   if [ `expr $SAVAIL - $SREQ` -gt "0" ]; then
+      echo "done."
+      echo "Phase 1:  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 ... "
+      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 "-------------------------------------------------------------------------------"
+         exit 1
+      fi
+      echo "Phase 1: Aborting Full System Dump Backup."
+      echo "Phase 1: Aborted, done."
+      echo "-------------------------------------------------------------------------------"
+      exit 1
+   fi
+
+   echo -n "Phase 1: 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 ... "
+   for FS in $FSTODUMP
+   do
+      if [ "$FS" = "/" ]; then
+         FSNAME="root"
+      else
+         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
+         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."
+      fi
+      cat $BACKUPPART/$BACKUPDIR/$FSNAME.log |gzip >> $DUMPLOGARCH
+      echo "-------------------------------------------------------------------------------" |gzip >> $DUMPLOGARCH
+   done
+
+   echo -n "Phase 1: 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 ... "
+   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 ... "
+   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 "-------------------------------------------------------------------------------"
+      exit 1
+   fi
+   echo "Phase 1: Aborting Full System Dump Backup."
+   echo "Phase 1: Aborted, done."
+   echo "-------------------------------------------------------------------------------"
+   exit 1
+fi
+
+echo -n "Phase 1: 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 "-------------------------------------------------------------------------------"
+   exit 1
+fi
+
+echo "Phase 1: End of Full System Dump Backup."
+echo "Phase 1: Done."
+echo "-------------------------------------------------------------------------------"
diff --git a/examples/cron_dump_to_disk/backup_rotate b/examples/cron_dump_to_disk/backup_rotate
new file mode 100755 (executable)
index 0000000..2e8eeb9
--- /dev/null
@@ -0,0 +1,90 @@
+#!/bin/bash
+#
+# This script will redirect the backup directory to implement desired backup
+# schedules.
+#
+# Currently we will use just a seven day format were we just move a link
+# that represents the backup directory, to point to the day of the week.
+#
+
+#
+# Configuration Parameters
+#
+
+if [ "$1" = "monthly" ]; then
+   REALDIR="monthly"
+else
+   REALDIR=`date +%A`
+fi
+
+BACKUPPART="/backup"
+BACKUPDIR="current"
+
+echo "### Start of Backup Rotation ###"
+echo "Using backup partition: $BACKUPPART"
+
+echo -n "Remounting backup partition read-write ... "
+if ( mount $BACKUPPART -o remount,rw &> /dev/null ) then
+   echo "done."
+else
+   echo "failure!"
+   echo "   There were problems remounting $BACKUPPART in read-write mode!"
+   echo "Rotation not made!"
+   echo "### End of Backup Rotation ###"
+   exit 1
+fi
+
+echo -n "Checking that no directory named \"$BACKUPDIR\" exists ... "
+if [ -d $BACKUPPART/$BACKUPDIR -a ! -L $BACKUPPART/$BACKUPDIR ]; then
+   echo "failure!"
+   echo "   Directory \"$BACKUPDIR\" exists. Can't create link!"
+   echo "Rotation not made!"
+
+   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 "### End of Backup Rotation ###"
+      exit 1
+   fi
+   echo "### End of Backup Rotation ###"
+   exit 1
+else
+   echo "done."
+fi
+
+cd $BACKUPPART
+
+echo -n "Creating link: $BACKUPDIR --> $REALDIR ... "
+if ( ln -snf $REALDIR $BACKUPDIR &> /dev/null ) then
+   echo "done."
+else
+   echo "failure!"
+   echo "   There were problems creating link!"
+   echo "Rotation not made!"
+
+   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 "### End of Backup Rotation ###"
+      exit 1
+   fi 
+   echo "### End of Backup Rotation ###"
+   exit 1
+fi
+
+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 "### End of Backup Rotation ###"
+   exit 1
+fi
+echo "### End of Backup Rotation ###"
diff --git a/examples/cron_dump_to_disk/backupskel.tar.gz b/examples/cron_dump_to_disk/backupskel.tar.gz
new file mode 100644 (file)
index 0000000..68614a9
Binary files /dev/null and b/examples/cron_dump_to_disk/backupskel.tar.gz differ
diff --git a/examples/cron_dump_to_disk/crontab_entries.txt b/examples/cron_dump_to_disk/crontab_entries.txt
new file mode 100644 (file)
index 0000000..f7ca35e
--- /dev/null
@@ -0,0 +1,4 @@
+# Perform Nightly Backup (nightly incremental + weekly full + monthly full)
+02 06 * * 1-6 root backup_rotate ; nice -1 backup inc
+02 06 * * sun root backup_rotate ; nice -1 backup full
+07 00 01 * * root backup_rotate monthly ; backup full nodumpdate