summaryrefslogtreecommitdiff
path: root/borgAuto.sh
blob: 74a348588737d00b7c9191010337c01ccdc9f0a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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}