Kleines Borg Howto

13 Februar 2019

Straight forward borg backup

Überblick

  • Fork von Attik (2015)

  • aktuelle Version 1.1.13 (2020-06-06)

  • Linux/BSD/(cygwin)

  • Simpel und schnell

  • Deduplication

  • Kompression möglich

  • Verschlüsselung möglich

  • pruning

  • fuse support

  • noch single-threaded (vorrausichtlich erst ab v1.2)

Installation

Debian

$ apt-get install borgbackup

RH/CentOS

$ yum install borgbackup

Umgebungsvariablen:

Passwort

export BORG_PASSPHRASE='kompliziertesPasswort'

oder

export BORG_PASSCOMMAND='cat $HOME/.borg-passphrase'
export BORG_PASSCOMMAND='gpg --decrypt borg-passphrase.gpg'

weitere

keine Warnung wegen repo-relocation:

export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes

Repoverzeichnis anlegen

borg init --encryption=repokey <repodir>

Bei "repokey" wird Schlüssel verschlüsselt im Repo abgelegt.

Key exportieren:

borg key export <repodir> repokey.txt

Backup

borg create -v -s -p -C lz4 <repodir>::<reponame> <dir1> <dir2> ...

Beispiel

borg create -v -s -p -C lz4 /mnt/backup/$(hostname -s)::{now} /etc /home /opt /usr/local/bin/ /var/www --exclude /home/admin/backup

Nicht vergessen: Symlinks (insb. auf Verzeichnisse) werden natürlich als Solche gespeichert und nicht verfolgt.

Optionen

Table 1. Optionen

-v

verbose

-s

Stats

-p

Progress

-C

set compression (lz4,zstd,zlib or lzma)

--exclude

exclude directory

Kompressionsarten

Table 2. verschiedene Kompressionen

none

wenig CPU

lz4

niedrige Kompression, sehr schnell

zlib,N (N=0..9)

medium Kompression, medium schnell

lzma

hohe Kompression, CPU heavy

Die verschiedenen Kompressionsverfahren hängen vom Anwendngsfall ab. Vgl. hier: https://borgbackup.readthedocs.io/en/stable/

Benchmark

borg benchmark crud /mnt/sdb1/backup/$(hostname -s) ./

Prune

Alte Backups löschen. Kann mit --dryrun getestet werden:

borg prune -v --list --dry-run --keep-daily=7 --keep-weekly=4 /mnt/backup/repodir
borg prune -v --list --keep-daily=7 --keep-weekly=4 /mnt/backup/repodir

Restore

borg extract <repo-dir>::<repo-name> [PATH]

mount

mkdir tmp
borg mount /mnt/backup/repodir::<reponame> ~/tmp
borg unmount ~/tmp

Hinweis: Hierbei handelt es sich um ein fuse-mount. Eignet sich nicht für große Restores, da vergleichsweise langsam.

Sonstiges

Info zu Repo:

borg list <repo-dir>
borg list <repo-dir>::<repo-name>

Einzele repos per Hand löschen:

borg delete <repo-dir>::<repo-name>

Repo checken, reparieren…​:

borg check -v --show-rc /mnt/backup/$(hostname -s)
borg check -v --show-rc --repository-only /mnt/backup/$(hostname -s)
borg check -v --show-rc --archives-only /mnt/backup/$(hostname -s)
borg check -v --show-rc --umask nnnn --[repository/archives]-only --repair /pfad/reponame[::name]

Backup umbenennen:

borg list /mnt/sdb1/backup/$(hostname -s)
borg rename -v --show-rc --umask nnnn /mnt/backup/$(hostname -s) /pfad/reponame::name neuer_name

Infos, Listen…​

borg list /pfad/reponame
borg info /pfad/reponame::name
borg list /pfad/reponame::name

Beispiel tägliches Cron-Skript

#!/bin/sh

export BORG_PASSPHRASE="kompliziertesPasswort"
export BORG_REPO=/mnt/backup/$(hostname)

# check cloud mount
if grep -qs '/mnt/sdb1 ' /proc/mounts; then
    # backup and prune old
    borg create -C lz4 $BORG_REPO::{now} /home/ --exclude /home/*/Downloads

    borg prune --keep-daily=7 --keep-weekly=4 $BORG_REPO
else
    echo "WARNING: mount offline. NO BACKUP!"
fi

exit 0