summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xborgAuto.sh72
-rw-r--r--borgBackup.service12
-rw-r--r--borgBackup.timer11
-rw-r--r--borgtest/a/a0
l---------borgtest/a/symlink1
-rw-r--r--borgtest/b/b0
-rw-r--r--borgtest/c/c0
7 files changed, 96 insertions, 0 deletions
diff --git a/borgAuto.sh b/borgAuto.sh
new file mode 100755
index 0000000..74a3485
--- /dev/null
+++ b/borgAuto.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/bash
+# 8 Sept 2019 SJ Pratt
+# Copied from https://blog.andrewkeech.com/posts/170718_borg.html
+# the envvar $REPONAME is something you should just hardcode
+ export BORG_REPO="/mnt/bak/borg" # (now set in ~/.bashrc)
+
+# DIFF function
+# List changes between this archive and the previous one
+function Differ {
+ newArchive=$(borg list :: -P $1 --last 2 --format {name}{NL})
+ borg diff ::$newArchive
+}
+
+# Backup all of /home except a few excluded directories and files
+echo $'\nCreating St33v\'s archive'
+borg create -v --stats --compression auto,lzma,6 \
+ ::'{hostname}-{user}-{now:%Y%m%dT%H%M}' \
+ /home/st33v \
+ /var/log/pacman.log \
+ /etc/systemd/system \
+ --exclude '/home/st33v/.cache' \
+ --exclude '/home/st33v/.local' \
+ --exclude '/home/$USER/cargo' \
+ --exclude '/home/st33v/.dropbox' \
+ --exclude '/home/st33v/.dropbox-dist' \
+ --exclude '/home/st33v/.config' \
+ --exclude '/home/st33v/.mozilla' \
+ --exclude '/home/st33v/.*' \
+ --exclude '*.img' \
+ --exclude '*.iso'
+
+Differ cr4y
+
+# Backup olho
+echo $'\nCreating Image archive'
+borg create -v --stats --compression none \
+ ::'olho-{now:%Y%m%dT%H%M}' /mnt/olho
+
+# Route the normal process logging to journalctl
+2>&1
+
+Differ olho
+
+backup_exit=$?
+
+# Prune the repo of extra backups
+echo $'\nPruning repository'
+borg prune --stats \
+ --keep-within 3d \
+ --keep-daily 14 \
+ --keep-weekly 8 \
+ --keep-monthly 12 \
+ --keep-yearly -1 \
+ ::
+prune_exit=$?
+
+# Include the remaining device capacity in the log
+echo $(df -hl | grep --color=never /mnt/bak)
+
+# borg list :: --format {name:40}{start}{NL} --sort-by name,timestamp
+
+# use highest exit code as global exit code
+global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
+
+if [ ${global_exit} -eq 0 ]; then
+ echo "Backup and Prune finished successfully"
+elif [ ${global_exit} -eq 1 ]; then
+ echo "Backup ($backup_exit) and/or Prune ($prune_exit) finished with warnings"
+else
+ echo "Backup ($backup_exit) and/or Prune ($prune_exit) finished with errors"
+fi
+exit ${global_exit}
diff --git a/borgBackup.service b/borgBackup.service
new file mode 100644
index 0000000..fa08c6a
--- /dev/null
+++ b/borgBackup.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Borg daily backup
+
+[Service]
+Type=simple
+Nice=19
+IOSchedulingClass=2
+IOSchedulingPriority=7
+ExecStartPre=-/usr/bin/borg break-lock /mnt/bak/borg
+ExecStart=-/etc/systemd/system/borgAuto.sh
+User=st33v
+Group=st33v
diff --git a/borgBackup.timer b/borgBackup.timer
new file mode 100644
index 0000000..5a61a06
--- /dev/null
+++ b/borgBackup.timer
@@ -0,0 +1,11 @@
+[Unit]
+Description=Borg Backup Timer
+
+[Timer]
+WakeSystem=false
+OnBootSec=3min
+OnCalendar=0/3:00:00
+RandomizedDelaySec=10min
+
+[Install]
+WantedBy=timers.target
diff --git a/borgtest/a/a b/borgtest/a/a
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/borgtest/a/a
diff --git a/borgtest/a/symlink b/borgtest/a/symlink
new file mode 120000
index 0000000..95bdcc8
--- /dev/null
+++ b/borgtest/a/symlink
@@ -0,0 +1 @@
+../c/c \ No newline at end of file
diff --git a/borgtest/b/b b/borgtest/b/b
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/borgtest/b/b
diff --git a/borgtest/c/c b/borgtest/c/c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/borgtest/c/c