BorgBackup

Contents

Projectpage: https://www.borgbackup.org/.

Installation

Remember to install borg, also on the remote server:

apt install borgbackup # on Debian
emerge -av app-backup/borgbackup # on Gentoo
pacman -S borg # on Arch

Script

#!/bin/bash

# Skriptvorlage BorgBackup
# https://wiki.ubuntuusers.de/BorgBackup/
# https://borgbackup.readthedocs.io/en/stable/

# Hostname und User
machine=$(hostname)
user=$(whoami)

# Hier Pfad zum Sicherungsmedium angeben.
# z.B. zielpfad="/media/peter/HD_Backup"
server="" # TODO
zielpfad="ssh://$server//<path>" # TODO

# Hier Namen des Repositorys angeben.
# z.B. repository="borgbackups"
repository="$machine-$user"
password="" # TODO

# Archive Name
prefix="$machine-$user"
archive="$prefix-{now:%Y%m%d-%H%M%S}"

# Hier eine Liste mit den zu sichernden Verzeichnissen angeben
# z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp"
# z.B. sicherung="/root /etc /var/lib/portage /usr/src/linux/.config"
# z.B. sicherung="/root /etc /var/lib /var/www /var/vmail"
sicherung="/home/$user" # TODO

# Exclude File
# z.B. exclude="<absolutePath>/exclude"
exclude="" # TODO (Falls nicht benutzt, unten auskommentieren)

# Hier die Art der Verschlüsselung angeben
# z.B. verschluesselung="none"
verschluesselung="repokey"

# Hier die Art der Kompression angeben
# z.B. kompression="none"
kompression="lz4"

# Hier angeben nach welchem Schema alte Archive gelöscht werden sollen.
# Die Vorgabe behält alle Sicherungen des aktuellen Tages. Zusätzlich das aktuellste Archiv der 
# letzten 7 Sicherungstage, der letzten 4 Wochen sowie der letzten 12 Monate.
# z.B. pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12"
pruning="--keep-within=2d --keep-daily=14 --keep-weekly=13 --keep-monthly=24 --keep-yearly=100"

###################################################################################################

repopfad="$zielpfad"/"$repository"

# Server erreichbar?
ssh -q -o BatchMode=yes -o ConnectTimeout=10 $server exit
if [ $? -ne 0 ]; then
  echo "Server $server nicht erreichbar."
  exit 1
fi

# Ubuntu home verschlüsselt?
#if [ -e $sicherung/Access-Your-Private-Data.desktop ]; then
#  echo "Home-Verzeichniss ist verschlüsselt."
#  exit 3
#fi

# Backup LDAP
#slapcat -v -l ~/backup.ldif

# backup data
SECONDS=0
echo "Start der Sicherung $(date)."

BORG_PASSPHRASE="$password" borg create --compression $kompression --exclude-from $exclude \
                                 --one-file-system -v --stats --progress \
                                 $repopfad::$archive $sicherung

echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden"

# prune archives
BORG_PASSPHRASE="$password" borg prune -v --list $repopfad $pruning

To backup a home-directory, we use the following exclude file:

#/home/<user>/Downloads
#/home/<user>/LinuxImages
#/home/<user>/.local/share/libvirt
/home/<user>/.local/libvirt
/home/<user>/VirtualBox*
/home/<user>/.gvfs
/home/<user>/.local/share/gvfs-metadata
/home/<user>/.Private
/home/<user>/.dbus
/home/<user>/.cache
/home/<user>/.Trash
/home/<user>/.Trash-1*
/home/<user>/.local/share/Trash
/home/<user>/Trash
/home/<user>/.cddb
/home/<user>/.aptitude
/home/<user>/.npm
/home/<user>/.adobe
/home/<user>/.macromedia
/home/<user>/.xsession-errors
/home/<user>/.wayland-errors
/home/<user>/.local/share/RecentDocuments
/home/<user>/.recently-used
/home/<user>/.recently-used.xbel
/home/<user>/recently-used.xbel
/home/<user>/.thumbnails
/home/<user>/.thumb
/home/<user>/Thumbs.db
/home/<user>/.DS_Store
/home/<user>/.localised
/home/<user>/.bash_history
/home/<user>/.CFUserTextEncoding
/home/<user>/.cups
/home/<user>/.Xauthority
/home/<user>/.ICEauthority
/home/<user>/.gksu.lock
/home/<user>/.pulse
/home/<user>/.pulse-cookie
/home/<user>/.esd_auth
/home/<user>/.kde/share/apps/RecentDocuments
/home/<user>/.kde4/share/apps/RecentDocuments
/home/<user>/.kde/share/apps/klipper
/home/<user>/.kde4/share/apps/klipper
/home/<user>/.kde/share/apps/okular/docdata
/home/<user>/.kde/share/apps/gwenview/recentfolders
/home/<user>/.kde4/share/apps/okular/docdata
/home/<user>/.kde4/share/apps/gwenview/recentfolders
/home/<user>/.kde/share/apps/kmess/displaypics
/home/<user>/.kde4/share/apps/kmess/displaypics
/home/<user>/.kde/share/apps/kmess/customemoticons
/home/<user>/.kde4/share/apps/kmess/customemoticons
/home/<user>/.mozilla/firefox/*/Cache
/home/<user>/.mozilla/firefox/*/minidumps
/home/<user>/.mozilla/firefox/*/.parentlock
/home/<user>/.mozilla/firefox/*/urlclassifier3.sqlite
/home/<user>/.mozilla/firefox/*/blocklist.xml
/home/<user>/.mozilla/firefox/*/extensions.sqlite
/home/<user>/.mozilla/firefox/*/extensions.sqlite-journal
/home/<user>/.mozilla/firefox/*/extensions.rdf
/home/<user>/.mozilla/firefox/*/extensions.ini
/home/<user>/.mozilla/firefox/*/extensions.cache
/home/<user>/.mozilla/firefox/*/XUL.mfasl
/home/<user>/.mozilla/firefox/*/XPC.mfasl
/home/<user>/.mozilla/firefox/*/xpti.dat
/home/<user>/.mozilla/firefox/*/compreg.dat
/home/<user>/.mozilla/firefox/*/pluginreg.dat
/home/<user>/.mozilla/seamonkey/*/Cache
/home/<user>/.mozilla/seamonkey/*/minidumps
/home/<user>/.mozilla/seamonkey/*/.parentlock
/home/<user>/.mozilla/seamonkey/*/blocklist.xml
/home/<user>/.mozilla/seamonkey/*/extensions.sqlite
/home/<user>/.mozilla/seamonkey/*/extensions.rdf
/home/<user>/.mozilla/seamonkey/*/extensions.ini
/home/<user>/.mozilla/seamonkey/*/xpti.dat
/home/<user>/.mozilla/seamonkey/*/compreg.dat
/home/<user>/.mozilla/seamonkey/*/pluginreg.dat
/home/<user>/.thunderbird/*/Cache
/home/<user>/.gnupg/rnd
/home/<user>/.gnupg/random_seed
/home/<user>/.gnupg/.#*
/home/<user>/.gnupg/*.lock
/home/<user>/.gnupg/gpg-agent-info-*
/home/<user>/.config/google-chrome/Default/Local Storage
/home/<user>/.config/google-chrome/Default/Session Storage
/home/<user>/.config/google-chrome/Default/Application Cache
/home/<user>/.config/google-chrome/Default/History Index *
/home/<user>/.config/chromium/Default/Local Storage
/home/<user>/.config/chromium/Default/Session Storage
/home/<user>/.config/chromium/Default/Application Cache
/home/<user>/.config/chromium/Default/History Index *
/home/<user>/.pulse/icons
/home/<user>/.guayadeque/cache.db
/home/<user>/.java/deployment/cache
/home/<user>/.icedteaplugin
/home/<user>/.icedtea
/home/<user>/.gnome2/epiphany/favicon_cache
/home/<user>/.config/libreoffice/4/cache
/home/<user>/.config/freshwrapper-data/Shockwave Flash/WritableRoot/#SharedObjects
/home/<user>/.ccache/?
/home/<user>/.ccache/tmp
/home/<user>/.config/VirtualBox/VBoxSVC.log*

Init

With the config from the script:

borg init --encryption=$verschluesselung $repopfad

Usefull commands

To list existing backups:

borg list $repopfad

To mount a backup:

borg mount $repopfad <mountPoint>
borg umount <mountPoint>

Usage via cron

Usage in cron (for a hourly backup), where /backup.sh contains the script above:

# m h  dom mon dow   command
00  *  * * *       <path>/backup.sh >> <path>/backup.log 2>&1