hpsaturn

Backup Incremental v2.0

Dec 19th, 2012
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.38 KB | None | 0 0
  1. #!/bin/bash
  2. # full and incremental backup script
  3. # Modified by Antonio Vanegas @hpsaturn
  4.  
  5. # Created 07 February 2000
  6. # Based on a script by Daniel O'Callaghan <[email protected]>
  7. # and modified by Gerhard Mourani <[email protected]>
  8.  
  9. # REVISIONS
  10. # 20121219 v2.0 Autoconfigure via console paramaters and secondary storage.
  11.  
  12. COMPUTER=$1                             # name of this computer
  13. ROOT=$2                                 # target directory
  14. DIRECTORIES=$3                          # directoris to backup
  15. SECONDARY=$4                            # secondary store backup
  16.  
  17. BACKUPDIR=$ROOT/$COMPUTER               # where to store the backups
  18. TIMEDIR=$ROOT/$COMPUTER/last-full       # where to store time of full backup
  19. TAR=/bin/tar                            # name and locaction of tar
  20. IGNORE=$ROOT/$COMPUTER/ignorefiles      # Archivos a ignorar
  21.  
  22. PATH=/usr/local/bin:/usr/bin:/bin
  23. DOW=`date +%a`                      # Day of the week e.g. Mon
  24. DOM=`date +%d`                      # Date of the Month e.g. 27
  25. DM=`date +%d%b`                         # Date and Month e.g. 27Sep
  26. DATE=`date +%Y%m%d`                     # Date format AAAAMMDD
  27.  
  28. # On the 1st of the month a permanet full backup is made
  29. # Every Sunday a full backup is made - overwriting last Sundays backup
  30. # The rest of the time an incremental backup is made. Each incremental
  31. # backup overwrites last weeks incremental backup of the same name.
  32. #
  33. # if NEWER = "", then tar backs up all files in the directories
  34. # otherwise it backs up files newer than the NEWER date. NEWER
  35. # gets it date from the file written every Sunday.
  36.  
  37. function showHelp(){
  38.     echo ""
  39.     echo "Usage: backup NameOfBackup RootStorage DirToBackup [SecondaryStorage]"
  40.     echo ""
  41.     echo "Example dual storage: backup home /bkp /home/user /mnt/samba/bkp"
  42.     echo "Example simple:       backup home /bkp /home/user"
  43.     echo ""
  44.     echo "Example: Install in crontab:"
  45.     echo "00  19  *   *   *   /home/user/bin/backup home /bkp /home/user /mnt/samba/bkp"
  46.     echo ""
  47. }
  48.  
  49. if [ "$COMPUTER" == "" ]; then
  50.     showHelp  
  51.     exit 3
  52. fi
  53.  
  54. if [[ ( "$ROOT" == "" ) || ( "$DIRECTORIES" == "" ) ]]; then
  55.     echo ""
  56.     echo "ERROR: Root backup directory or target directory not found!"
  57.     showHelp
  58.     exit 3
  59. fi
  60.  
  61. if [ ! -d "$ROOT/$COMPUTER" ]; then
  62.     echo -n "CREATING ROOT BACKUP: $ROOT"
  63.     mkdir -p $ROOT/$COMPUTER
  64.     INITBKP=1
  65.     echo " [OK]"
  66. fi
  67.  
  68. if [ ! -d "$TIMEDIR" ]; then
  69.     echo -n "CONFIGURE TIME DIRECTORY: $TIMEDIR"
  70.     mkdir -p $TIMEDIR
  71.     NOW=`date +%d-%b`
  72.     echo $NOW > $TIMEDIR/$COMPUTER-full-date
  73.     echo " [OK]"
  74. fi
  75.  
  76. if [ ! -f "$IGNORE" ]; then
  77.     echo -n "CREATING IGNORE CONFIG FILE: $IGNORE"
  78.     touch $IGNORE
  79.     echo " [OK]"
  80. fi
  81.  
  82. if [ "$SECONDARY" != "" ]; then
  83.  
  84.     if [ ! -d "$SECONDARY/$COMPUTER" ]; then
  85.         echo -n "CREATING SECONDARY BACKUP: $SECONDARY"
  86.         mkdir -p $SECONDARY/$COMPUTER
  87.         echo " [OK]"
  88.         echo ""
  89.     fi
  90.  
  91. fi
  92.  
  93. # Monthly full backup
  94. if [[( $DOM = "15" ) || ( $INITBKP != "" )]]; then
  95.         NEWER=""
  96.         FILE=$BACKUPDIR/bkp_$COMPUTER_$DATE.tar.gz
  97.         if [ -f $FILE ]; then
  98.           rm $FILE
  99.         fi
  100.        
  101.         $TAR $NEWER -zcf $FILE --exclude-from=$IGNORE $DIRECTORIES
  102.        
  103.         if [ -d "$SECONDARY/$COMPUTER" ]; then
  104.             cp -f $FILE $SECONDARY/$COMPUTER/
  105.         fi
  106. fi
  107.  
  108. # Weekly full backup
  109. if [ $DOW = "Fri" ]; then
  110.         NEWER=""
  111.         NOW=`date +%d-%b`
  112.  
  113.         # Update full backup date (/tmp for samba)
  114.         echo $NOW > /tmp/$COMPUTER-full-date
  115.         mv /tmp/$COMPUTER-full-date $TIMEDIR/
  116.         # remove file if exist
  117.         FILE=$BACKUPDIR/$COMPUTER-$DOW.tar.gz
  118.         if [ -f $FILE ]; then
  119.           rm $FILE
  120.         fi
  121.        
  122.         $TAR $NEWER -zcf $FILE --exclude-from=$IGNORE $DIRECTORIES
  123.        
  124.         if [ -d "$SECONDARY/$COMPUTER" ]; then
  125.             cp -f $FILE $SECONDARY/$COMPUTER/
  126.         fi
  127.  
  128. # Make incremental backup - overwrite last weeks
  129. else
  130.         # Get date of last full backup
  131.         NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"
  132.         # remove file if exist
  133.         FILE=$BACKUPDIR/$COMPUTER-$DOW.tar.gz
  134.         if [ -f $FILE ]; then
  135.           rm $FILE
  136.         fi
  137.        
  138.         $TAR $NEWER -zcf $FILE --exclude-from=$IGNORE $DIRECTORIES
  139.        
  140.         if [ -d "$SECONDARY/$COMPUTER" ]; then
  141.             cp -f $FILE $SECONDARY/$COMPUTER/
  142.         fi
  143. fi
Advertisement
Add Comment
Please, Sign In to add comment