Benutzer-Werkzeuge

Webseiten-Werkzeuge


infrastruktur:host:billy:billy-borg-client-setup

Borg Backup Client Setup

Einrichtung eines Client-Gerätes zur Nutzung von BorgBackup auf billy.

Initialisierung: SSH

Anmerkung: Ersetze „tux“ in folgendem mit deinem Nutzernamen im LDAP.

Erzeuge einen SSH Schlüssel, mit dem dein borg client im Hintergrund später die Backups machen darf:

$ ssh-keygen -f ~/.ssh/id_ed25519_billyborg

Füge willi und billy ähnlich wie folgt in deine ~/.ssh/config hinzu:

~/.ssh/config:

Host willi
        User tux 
        Hostname willi.nobreakspace.org
	IdentityFile ~/.ssh/id_ed25519_billyborg

Host billyborg
        Hostname billy.nobreakspace.org
        User tux 
	IdentityFile ~/.ssh/id_ed25519_billyborg
        ProxyCommand ssh -4 willi -o ControlMaster=no -W "[%h]":%p

Nun installiere den public key deines neuen SSH keys auf willi und billi:

$ ssh-copy-id -i ~/.ssh/id_ed25519_billyborg tux@willi.nobreakspace.org
$ cat ~/.ssh/id_ed25519_billyborg.pub | ssh billyborg ssh-add-authorized-keys

Initialisierung: Borg Repository

Initilisiere dein Borg auf billy:

$ borg init --encryption=keyfile ssh://billyborg/~/home

Exportiere und drucke wie vom obigen „borg init“ Befehl empfohlen deinen Borg Schlüssel aus und bewahre ihn und das Passwort sicher und getrennt voneinander auf.

WICHTIG: OHNE DIESE KOMMST DU SPÄTER NICHT MEHR AUF DEINE BACKUPS!

Borg Backup Beispiel Script

Dies ist ein Beispiel. Hier die BORG_PASSPHRASE anpassen, sowie die excludes.

Möglichst alle größeren oder Binär-Daten, die es eh auch wo anders schon gibt, nicht mit backupen. Deine Linux Distro muss sicherlich nicht komplett gebackupt werden. Auch bei Programmier-Projekten wenn möglich nur den Quellcode backupen.

Dieses Skript kann dann so schon ausgeführt werden (nach einem „chmod +x ~/.local/bin/borg-backup-billy.sh“) um Backups von deinem home-Verzeichnis auf billy zu erzeugen. Idealerweise sollte die initiale Ausführung, die evtl. etwas länger dauert, im Space gemacht werden, weil wir nicht die schnellste Internetanbindung im Space haben.

Der zweite, untere Befehle des Skripts löscht redundante Backups und stellt sicher, dass nur eine sinnvolle Anzahl an täglichen/wöchentlichen/monatlichen etc. Backups behalten werden, statt jedes, tägliches zu behalten.

~/.local/bin/borg-backup-billy.sh

#!/bin/sh

export BORG_REPO=ssh://billyborg/~/home
export BORG_PASSPHRASE="<dein-super-passwort>"

# some helpers and error handling:
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM

info "Starting backup"

#	--dry-run			\
borg create				\
	--verbose                       \
	--filter AME                    \
	--list                          \
	--stats                         \
	--show-rc                       \
	--compression lz4               \
	--exclude-caches                \
	--exclude "${HOME}/borg/logs/"		\
	--exclude "${HOME}/.cache/"		\
	--exclude "${HOME}/.ccache/"		\
	--exclude "${HOME}/.local/share/Trash/"	\
	--exclude "${HOME}/.electron-gyp/"	\
	--exclude "${HOME}/.config/Electron/Cache/"	\
	--exclude "${HOME}/.tmp/"		\
	--exclude "${HOME}/.mnt/"		\
	--exclude "${HOME}/.pub-cache/"		\
	--exclude "${HOME}/.steam/"		\
	--exclude "${HOME}/Games/"		\
	--exclude "${HOME}/.android/cache/"	\
	--exclude "${HOME}/backup/"		\
	--exclude "${HOME}/Musik/dnb-vids/*.mkv"	\
	--exclude "${HOME}/Downloads/"		\
	--exclude "${HOME}/Desktop/"		\
	--exclude "${HOME}/Videos/"		\
	--exclude "${HOME}/dev/linux/*.deb"	\
	--exclude "${HOME}/dev/linux/linux/*.deb"	\
	--exclude "${HOME}/dev/linux/*.gz"	\
	--exclude "${HOME}/dev/linux/linux/*.gz"	\
	--exclude "${HOME}/dev/**/build_dir/"	\
	--exclude "${HOME}/dev/gluon*/output*/"	\
	--exclude "${HOME}/dev/gluon-*dl/"		\
	--exclude "${HOME}/dev/gluon-*dl-old/"	\
	--exclude "${HOME}/dev/gluon-*dl-old*/"	\
	--exclude "${HOME}/dev/openwrt-*dl/"	\
	--exclude "${HOME}/dev/**/__pycache__/**/"	\
	--exclude "${HOME}/dev/**/build_dir/"	\
	--exclude "${HOME}/dev/**/staging_dir/"	\
	--exclude "${HOME}/dev/**/bin/"		\
	--exclude "${HOME}/dev/**/tmp/"		\
	--exclude "${HOME}/dev/**/*.o"		\
	--exclude "${HOME}/dev/**/*.ko"		\
	--exclude "${HOME}/dev/**/*.mod.c"		\
							\
	::'{hostname}-{now}'		\
	${HOME}/

backup_exit=$?

info "Pruning repository"

# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-' prefix is very important to
# limit prune's operation to this machine's archives and not apply to
# other machines' archives also:

borg prune                          \
    --list                          \
    --prefix '{hostname}-'          \
    --show-rc                       \
    --keep-daily    7               \
    --keep-weekly   4               \
    --keep-monthly  6               \
    --keep-yearly   10

prune_exit=$?

# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))

if [ ${global_exit} -eq 1 ];
then
    info "Backup and/or Prune finished with a warning"
fi

if [ ${global_exit} -gt 1 ];
then
    info "Backup and/or Prune finished with an error"
fi

exit ${global_exit}

Automatische Backups per systemd timer

$ mkdir -p ~/borg/logs

~/.config/systemd/user/borg-backup-billy.service

[Unit]
Description=Borg Backup
Conflicts=shutdown.target
#StartLimitIntervalSec=20h
#StartLimitBurst=5

[Service]
Type=oneshot
ExecStart=%h/.local/bin/borg-backup-billy.sh
Restart=on-failure
RestartSec=30min
StandardOutput=append:%h/borg/logs/borg.log
StandardError=append:%h/borg/logs/borg.err
Nice=15
IOSchedulingClass=best-effort
IOSchedulingPriority=7

~/.config/systemd/user/borg-backup-billy.timer

[Unit]
Description=Run Borg Backup daily and on boot

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

[Install]
WantedBy=timers.target
$ systemctl --user enable borg-backup-billy.timer
$ systemctl --user start borg-backup-billy.timer

(ToDo: war da noch was, um OnBootSec in systemd zu aktivieren? Evtl. „loginctl enable-linger“ vom user, der den borg client ausführen soll, damit dieser tatsächlich nach dem boot direkt backups probiert und nicht erst, nachdem der user sich eingeloggt hat?)

Überprüfe, inbesondere auch nach einem Neustart:

$ systemctl --user list-timers
$ systemctl --user status borg-backup-billy.timer
$ systemctl --user status borg-backup-billy.service

Überprüfe auch, ob in ~/borg/logs/borg.err Fehler auftreten. Falls dies der Fall sein sollte, wird borg / systemd dies alle 30 Minuten erneunt versuchen, statt bloß einmal pro Tag. Auslöser hierfür kann auch / oft einfach eine kleine (übersprungene) Datei mit fehlenden Leserechten sein.

(Vor)Letzter Check: Backups überprüfen

$ borg info ssh://billyborg/~/home
$ borg list ssh://billyborg/~/home
$ mkdir /tmp/borgmount
$ borgfs ssh://billyborg/~/home /tmp/borgmount

Prüfe nun, ob du in /tmp/borgmount/… deine Dateien wieder findest und auslesen kannst. Manchmal kann das Öffnen einer Datei oder Ordners beim ersten Versuch etwas dauern, bis Daten von billy wieder zurück übertragen und gecached wurden.

Zu letzt wieder schließen mit:

$ umount /tmp/borgmount

Allerletzter Check: Backups mit ausgedruckten Schlüssel wiederherstellen

ToDo

infrastruktur/host/billy/billy-borg-client-setup.txt · Zuletzt geändert: 05.09.2024 02:19 von Linus Lüssing