|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +# Needs to be run with sudo |
| 4 | +if [ "$EUID" -ne 0 ]; then |
| 5 | + echo "This script needs to be run with sudo or as a root user" |
| 6 | + exit 1 |
| 7 | +fi |
| 8 | +LOCALSNAPSHOTSDIR="/home/SNAPSHOT" |
| 9 | +EXTERNALSNAPSHOTSDIR="/mnt/sn550" |
| 10 | +USER=dhardy |
| 11 | + |
| 12 | +LATEST_HOME=(`ls -d $LOCALSNAPSHOTSDIR/$USER-* | sort | tail -c 11`) |
| 13 | +LATEST_HOME_EXTERNAL=(`ls -d $EXTERNALSNAPSHOTSDIR/$USER-* | sort | tail -c 11`) |
| 14 | +TODAY=`date +%Y-%m-%d` |
| 15 | + |
| 16 | +# make local snapshot |
| 17 | +if test -d "$LOCALSNAPSHOTSDIR"; then |
| 18 | + echo "Using directory $LOCALSNAPSHOTSDIR for local snapshots." |
| 19 | + if [[ "$LATEST_HOME" != "$TODAY" ]]; then |
| 20 | + echo "Today is $TODAY and latest home backup was $LATEST_HOME doing new snapshot" |
| 21 | + btrfs subvolume snapshot -r /home/$USER $LOCALSNAPSHOTSDIR/$USER-$TODAY |
| 22 | + else |
| 23 | + echo "Todays backup already done" |
| 24 | + fi |
| 25 | +fi |
| 26 | + |
| 27 | +# make an external backup of the snapshot |
| 28 | +# destination drive needs to be formatted as BTRFS ! |
| 29 | +if test -d "$EXTERNALSNAPSHOTSDIR"; then |
| 30 | + echo "using directory $EXTERNALSNAPSHOTSDIR for external backup." |
| 31 | + if [[ "$LATEST_HOME_EXTERNAL" != "$TODAY" ]]; then |
| 32 | + echo "Today is $TODAY and latest external backup is $LATEST_HOME_EXTERNAL copying data to external drive" |
| 33 | + # Update using latest external backup-date as reference to do the differential backup against |
| 34 | + btrfs send -p $LOCALSNAPSHOTSDIR/$USER-$LATEST_HOME_EXTERNAL $LOCALSNAPSHOTSDIR/$USER-$TODAY | btrfs receive $EXTERNALSNAPSHOTSDIR |
| 35 | + else |
| 36 | + if test -f "$EXTERNALSNAPSHOTSDIR/$USER-$TODAY"; then |
| 37 | + echo "External backup already up to date" |
| 38 | + else |
| 39 | + echo "Earlier versions not found, creating the first external backup to $EXTERNALSNAPSHOTSDIR" |
| 40 | + btrfs send $LOCALSNAPSHOTSDIR/$USER-$TODAY | btrfs receive $EXTERNALSNAPSHOTSDIR |
| 41 | + fi |
| 42 | + fi |
| 43 | +else |
| 44 | + echo "External drive not found, is it mounted?" |
| 45 | +fi |
0 commit comments