Skip to content

Instantly share code, notes, and snippets.

@neta1
Last active February 27, 2017 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neta1/0be0e1823666710c12d7cfd43a31bc3a to your computer and use it in GitHub Desktop.
Save neta1/0be0e1823666710c12d7cfd43a31bc3a to your computer and use it in GitHub Desktop.
snapperのデイリースナップショットから増分バックアップ (for Ubuntu 16.04.2 LTS)
#!/bin/bash
ARCEXT="btrfs.xz"
NICE="nice -n 19 ionice -c 2 -n 7"
cd "$(dirname "$(readlink -f "${BASH_SOURCE:-$0}")")"
do_backup () {
CONFIG="$1"
SSPATH="$2"
if [ ! -d "$CONFIG" ]; then
mkdir "$CONFIG" || exit
fi
# Find today first snapshot
TODAYNUM=$(snapper -c "$CONFIG" --iso list -t single | sed -ne "s/^\([0-9]\+\) | $(date '+%Y-%m-%d') .\+$/\1/p" | sed -n 1p)
if [ -z "$TODAYNUM" ]; then
echo "[$CONFIG] Error: snapshot not found"
return
fi
# Find last backup archive
LASTNUM=$(find "$CONFIG" -maxdepth 1 -name "*.$ARCEXT" -printf "%f\n" | sort -nr | sed -ne "1s/^\([0-9]\+\)\..\+$/\1/p")
if [ "$TODAYNUM" = "$LASTNUM" ]; then
echo "[$CONFIG] Error: already backup"
return
elif [ -n "$LASTNUM" ]; then
# Incremental backup
$NICE btrfs send -p "$SSPATH/$LASTNUM/snapshot" "$SSPATH/$TODAYNUM/snapshot" 2> btrfs-send.log | $NICE xz -8 > "$CONFIG/$TODAYNUM.$ARCEXT"
else
# Full backup
$NICE btrfs send "$SSPATH/$TODAYNUM/snapshot" 2> btrfs-send.log | $NICE xz -8 > "$CONFIG/$TODAYNUM.$ARCEXT"
fi
# result check
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
cat btrfs-send.log
echo "[$CONFIG] Error: btrfs send failed"
rm "$CONFIG/$TODAYNUM.$ARCEXT"
fi
rm btrfs-send.log
}
do_backup "root" "/.snapshots"
do_backup "home" "/home/.snapshots"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment