initial btrbk backup script
authorIan Kelling <ian@iankelling.org>
Sun, 25 Sep 2016 04:22:50 +0000 (21:22 -0700)
committerIan Kelling <ian@iankelling.org>
Sun, 25 Sep 2016 04:22:50 +0000 (21:22 -0700)
btrbk-run [new file with mode: 0755]

diff --git a/btrbk-run b/btrbk-run
new file mode 100755 (executable)
index 0000000..32a0c1d
--- /dev/null
+++ b/btrbk-run
@@ -0,0 +1,88 @@
+#!/bin/bash -l
+
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+
+[[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@"
+
+conf_only=false
+if [[ $1 == -c ]]; then
+    # mostly for testing
+    conf_only=true
+fi
+
+target_host=frodo
+cat >/etc/btrbk.conf <<'EOF'
+ssh_identity /root/.ssh/id_rsa
+transaction_syslog daemon
+
+# so we only run one at a time
+lockfile                   /var/lock/btrbk.lock
+
+# default format of short does not accomidate hourly preservation setting
+timestamp_format long-iso
+# background on timezones. with short/long, timestamps use local time.
+# for long, if your local time moves backwards, by moving timezones or
+# for an hour when daylight savings changes it, you will temporarily get
+# a more aggressive retention policy for the overlapping period, and
+# vice versa for the opposite timezone move. The alternative is using
+# long-iso, which puts timezone info into the timestamp, which means
+# that instead of shifting time, you shift the start of day/week/month
+# which is used for retention to your new local time, which means for
+# example, if you moved forward by 8 hours, the daily/weekly/monthly
+# retention will be 8 hours more aggressive since midnight is at a new
+# time, unless you fake the timzeone using the TZ env variable.
+# However, in the short term, there will be no inconsistencies.
+# I don't see any problem with shifting when the day starts for
+# retention, so I'm using long-iso.
+
+# only make a snapshot if things have changed
+snapshot_create onchange
+# much less snapshots because I have less space on the
+# local filesystem.
+snapshot_preserve 2h 2d
+
+# so, total backups = ~89
+target_preserve 48h 14d 8w 24m
+target_preserve_min 6h
+
+# if something fails and it's not obvious, try doing
+# btrbk -l debug -v dryrun
+EOF
+
+
+case $HOSTNAME in
+    tp|x2)
+        if ! timeout -s 9 10 ssh frodo :; then
+            target_host=$HOME_DOMAIN
+            cat >>/etc/btrbk.conf <<EOF
+ssh_port 2222
+EOF
+        fi
+        ;;
+esac
+
+if [[ $HOSTNAME != frodo ]]; then
+    remote_target="target send-receive ssh://${target_host}/mnt/root/${HOSTNAME}-btrbk"
+fi
+
+target-section() {
+    root=$1
+    subvol=$2
+    mountpoint $root &>/dev/null || return
+    cat >>/etc/btrbk.conf <<EOF
+volume $root
+subvolume $subvol
+$remote_target
+
+EOF
+}
+
+target-section /mnt/iroot i
+target-section /mnt/root q
+
+if $conf_only; then
+    exit
+fi
+
+btrbk -q run