====== sbMediaBak ==
A script to backup any removable media eg usb sticks and sd cards.
===== Features ==
* Fast, because it uses ''rsync'' for copying the data.
* Max. number of backups can be specified
* Oldest backup is deleted automatically
* Target directory for backups may be specified
===== Installation ==
1. Create the config file ''.sbmediabakrc'' in your home dir with the following content:
#!/bin/bash
# file: $HOME/.sbmediabakrc
# Mandatory: The directory to be backuped:
# Please overwrite!
SOURCE="/media/disk"
# Optional: An alternative backup target directory:
# The default is $HOME/bak/ + $SOURCE
#TARGET="/somewhere/else"
# Optional: Max number of backup archives:
# The default is 4
#MAXBAKS=4
2. Create the backup script '/usr/local/bin/sbmediabak' with the following content and make it runnable:
#!/bin/bash
#
# sbmediabak
# Version 2008-06-12
# By Stefan Beckert
# A backup script for any removable media eg usb sticks and sd cards
# See http://wiki.think-deep.com/becki:sources:sbmediabak
# Public Domain
# No warranty expressed or implied. Use at your own risk.
function abort() {
echo "ERROR: $1!" >&2
if [ "$2" ]; then errcode=$2 ; else errcode=1 ; fi
exit $errcode
}
MAXBAKS=4
rc="$HOME/.sbmediabakrc"
. "$rc" 2>/dev/null || abort "Can't read $rc! Please create it"
# Check if source exists:
[ "$SOURCE" ] || abort "Please specifiy backup source with e.g. \"SOURCE=/dir/of/source\" in \"$rc\""
[ -d "$SOURCE" ] || abort "Source \"$SOURCE\" is not a directory"
SOURCE="$(realpath $SOURCE)"
# Set the target:
[ "$TARGET" ] || TARGET="$HOME/bak$SOURCE"
[ -d "$TARGET" ] || abort "TARGET \"$TARGET\" is not a directory. Please create it"
TARGET="$(realpath $TARGET)"
# User info:
echo "SOURCE = $SOURCE"
echo "TARGET = $TARGET"
echo "MAXBAKS = $MAXBAKS"
# make archive from last backup rsynced dir:
if [ -r $TARGET/lastrun ]; then
echo "making archive from last backup of $(cat $TARGET/lastrun)"
tar -cz -C $TARGET -f $TARGET/$(cat $TARGET/lastrun).tgz newest
fi
# copy the data:
rsync -av --delete $SOURCE/ $TARGET/newest
# remove oldest backups if there are more than MAXBAKS:
while
baks=$(ls -1tr $TARGET/*.tgz 2>/dev/null)
anz=$(echo -e "$baks" | wc -l)
test $anz -gt $MAXBAKS
do
oldest=$(echo -e "$baks" | head -n 1)
echo "removing $oldest"
rm $oldest
done
# remember date of this run for next backup:
date +%Y-%m-%d_%H-%M-%S > $TARGET/lastrun
===== Configuration ==
Just specifiy the directory you want to backup in .sbmediabakrc . On a linux system this is often ''/media/disk''. Use the ''mount'' command if you are not sure wher your card or stick is mounted.
===== Usage ==
- Plug your SD-card or USB-Stick
- If you don't have automount, then mount your card manually
- Type ''sbmediabak'' in the command line.