]> code.delx.au - monosys/blob - backup
v1.0.6-2
[monosys] / backup
1 #!/bin/bash
2
3 set -eu
4
5 if [ "$(id -u)" -ne 0 ]; then
6 echo "Must be root"
7 exit 1
8 fi
9
10 if [ "$(pgrep backup)" != "$$" ]; then
11 echo "Backup is still running!"
12 exit 1
13 fi
14
15 if [ -z "${1:-}" ]; then
16 echo "Usage: $0 root"
17 exit 1
18 fi
19
20 BACKUP_PROFILE="$1"
21 source "/etc/borg/${BACKUP_PROFILE}/env"
22 HOME=/root
23
24 ionice -c 3 -p $$
25 renice -n 19 -p $$ > /dev/null
26
27 if [ "$BACKUP_SNAP" -eq 1 ]; then
28 echo ">>> Snapshotting"
29 bsnap on
30 fi
31
32 cd "$BACKUP_PATH"
33
34 echo ">>> Starting backup"
35 borg create \
36 $([ -t 0 ] && echo --progress) \
37 --info --stats \
38 --compression lz4 \
39 --exclude-from "/etc/borg/${BACKUP_PROFILE}/exclude" \
40 "${BACKUP_REPO}::{hostname}-{now}" .
41
42 echo ">>> Pruning old backups"
43 borg prune \
44 --info --stats \
45 --keep-daily=7 \
46 --keep-weekly=4 \
47 --keep-monthly=12 \
48 --prefix='{hostname}-' \
49 "$BACKUP_REPO"
50
51 cd /
52
53 if [ "$BACKUP_SNAP" -eq 1 ]; then
54 echo ">>> Unsnapshotting"
55 bsnap off
56 fi
57
58 exit 0