Difference between revisions of "Auto Update Backup"

From SingletonMillerWiki
Jump to: navigation, search
(First cut article on backup.. not yet tested!)
 
m (update refs)
Line 106: Line 106:
  
 
</pre>
 
</pre>
Follow the instructions here [http://www.raspberrypi.org/archives/3890]
 
  
 
== References ==
 
== References ==
#[http://www.raspberrypi.org/archives/3890 Official Release Notification and Instructions]
+
#[http://www.raspberrypi.org/phpBB3/viewtopic.php?p=136912 The Raspberry Pi Backup Thread]

Revision as of 09:27, 19 May 2013


The goal here is to get a network connected Raspberry Pi to periodically update and backup itself up to a network share The strategy is to use cron to run a script, the step togetting this work are.

  1. download and installed the script
  2. create a backup location
  3. enable the script in cron.


Installation

Copy the script below to a file on you raspberry pi

wget 

Accessing Network Shares


Update and Backup Cron Script

Based on the excellent work [1] the following script does the majority of theheavy lifiting.

    #!/bin/bash

    # Setting up directories
    SUBDIR=raspberrypi_backups
    DIR=/hdd/$SUBDIR

    echo "Updating System"

    apt-get update
    apt-get upgrade

    echo "Starting RaspberryPI backup process!"

    # First check if pv package is installed, if not, install it first
    PACKAGESTATUS=`dpkg -s pv | grep Status`;

    if dpkg -s pv | grep -q Status; then
       then
          echo "Package 'pv' is installed."
       else
          echo "Package 'pv' is NOT installed."
          echo "Installing package 'pv'. Please wait..."
          apt-get -y install pv
    fi

    # Check if backup directory exists
    if [ ! -d "$DIR" ];
       then
          echo "Backup directory $DIR doesn't exist, creating it now!"
          mkdir $DIR
    fi

    # Create a filename with datestamp for our current backup (without .img suffix)
    OFILE="$DIR/backup_$(date +%Y%m%d_%H%M%S)"

    # Create final filename, with suffix
    OFILEFINAL=$OFILE.img

    # First sync disks
    sync; sync

    # Shut down some services before starting backup process
    echo "Stopping some services before backup."
    service apache2 stop
    service mysql stop
    service cron stop

    # Begin the backup process, should take about 1 hour from 8Gb SD card to HDD
    echo "Backing up SD card to USB HDD."
    echo "This will take some time depending on your SD card size and read performance. Please wait..."
    SDSIZE=`blockdev --getsize64 /dev/mmcblk0`;
    pv -tpreb /dev/mmcblk0 -s $SDSIZE | dd of=$OFILE bs=1M conv=sync,noerror iflag=fullblock

    # Wait for DD to finish and catch result
    RESULT=$?

    # Start services again that where shutdown before backup process
    echo "Start the stopped services again."
    service apache2 start
    service mysql start
    service cron start

    # If command has completed successfully, delete previous backups and exit
    if [ $RESULT = 0 ];
       then
          echo "Successful backup, previous backup files will be deleted."
          rm -f $DIR/backup_*.tar.gz
          mv $OFILE $OFILEFINAL
          echo "Backup is being tarred. Please wait..."
          tar zcf $OFILEFINAL.tar.gz $OFILEFINAL
          rm -rf $OFILEFINAL
          echo "RaspberryPI backup process completed! FILE: $OFILEFINAL.tar.gz"
          exit 0
    # Else remove attempted backup file
       else
          echo "Backup failed! Previous backup files untouched."
          echo "Please check there is sufficient space on the HDD."
          rm -f $OFILE
          echo "RaspberryPI backup process failed!"
          exit 1
    fi

References

  1. The Raspberry Pi Backup Thread