From 1733496b97c4003ff6d9cf9cc10f9d4fd0bf6753 Mon Sep 17 00:00:00 2001 From: Stelian Pop Date: Fri, 30 Nov 2001 10:12:40 +0000 Subject: [PATCH] Added backup scripts from Eugenio Diaz. --- examples/cron_dump_to_disk/README | 31 +++ examples/cron_dump_to_disk/backup | 179 ++++++++++++++++++ examples/cron_dump_to_disk/backup_rotate | 90 +++++++++ examples/cron_dump_to_disk/backupskel.tar.gz | Bin 0 -> 297 bytes .../cron_dump_to_disk/crontab_entries.txt | 4 + 5 files changed, 304 insertions(+) create mode 100644 examples/cron_dump_to_disk/README create mode 100755 examples/cron_dump_to_disk/backup create mode 100755 examples/cron_dump_to_disk/backup_rotate create mode 100644 examples/cron_dump_to_disk/backupskel.tar.gz create mode 100644 examples/cron_dump_to_disk/crontab_entries.txt diff --git a/examples/cron_dump_to_disk/README b/examples/cron_dump_to_disk/README new file mode 100644 index 0000000..5301f17 --- /dev/null +++ b/examples/cron_dump_to_disk/README @@ -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 index 0000000..da6bda6 --- /dev/null +++ b/examples/cron_dump_to_disk/backup @@ -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 index 0000000..2e8eeb9 --- /dev/null +++ b/examples/cron_dump_to_disk/backup_rotate @@ -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 index 0000000000000000000000000000000000000000..68614a9d63325035d3117b21cec65b31311d55cb GIT binary patch literal 297 zcmV+^0oMK>iwFQhOZ7Vd1MSwqYQ!KE1yDaFU!YH)Pye91u3G3i%mk*;Cg8+H|Gvhd zn=YmkigpV3Y!ZlzgzJ4#8`T_NfwN?oE_n^%or!>tizm2RbjgGhVpJ`h!WYyp< zTeIPtDdcaS@_qE5nYZ*g)c%Kn{`a8GbDqv^H^8p>AL{&PkNMw4>HoOq)N}*v%HQ#p zzgR~8J!tbX9p|6$J&1vk$(@`JfzpVIRAa+PxbuA vnEzd9^S;dM>Fw{&e`V$eFGRBC?=AWd00000000000PriHH18vd04M+e*G`~J literal 0 HcmV?d00001 diff --git a/examples/cron_dump_to_disk/crontab_entries.txt b/examples/cron_dump_to_disk/crontab_entries.txt new file mode 100644 index 0000000..f7ca35e --- /dev/null +++ b/examples/cron_dump_to_disk/crontab_entries.txt @@ -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 -- 2.39.2