Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
infrastruktur:host:billy:billy-borg-client-setup [05.09.2024 02:19] – gelöscht - Externe Bearbeitung (Unknown date) 127.0.0.1infrastruktur:host:billy:billy-borg-client-setup [05.09.2024 02:19] (aktuell) – ↷ Seitename wurde von infrastruktur:host:billy:client-setup auf infrastruktur:host:billy:billy-borg-client-setup geändert Linus Lüssing
Zeile 1: Zeile 1:
 +====== Borg Backup Client Setup ======
  
 +Einrichtung eines Client-Gerätes zur Nutzung von BorgBackup auf [[infrastruktur:host: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:
 +
 +<code>
 +$ ssh-keygen -f ~/.ssh/id_ed25519_billyborg
 +</code>
 +
 +Füge willi und billy ähnlich wie folgt in deine ~/.ssh/config hinzu:
 +
 +**~/.ssh/config**:
 +<code>
 +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
 +</code>
 +
 +Nun installiere den public key deines neuen SSH keys auf willi und billi:
 +
 +<code>
 +$ ssh-copy-id -i ~/.ssh/id_ed25519_billyborg tux@willi.nobreakspace.org
 +$ cat ~/.ssh/id_ed25519_billyborg.pub | ssh billyborg ssh-add-authorized-keys
 +</code>
 +
 +==== Initialisierung: Borg Repository ====
 +
 +Initilisiere dein Borg auf billy:
 +
 +<code>
 +$ borg init --encryption=keyfile ssh://billyborg/~/home
 +</code>
 +
 +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**
 +<code>
 +#!/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                 \
 +    --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}
 +</code>
 +
 +==== Automatische Backups per systemd timer ====
 +
 +<code>
 +$ mkdir -p ~/borg/logs
 +</code>
 +
 +**~/.config/systemd/user/borg-backup-billy.service**
 +<code>
 +[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
 +</code>
 +
 +**~/.config/systemd/user/borg-backup-billy.timer**
 +<code>
 +[Unit]
 +Description=Run Borg Backup daily and on boot
 +
 +[Timer]
 +OnBootSec=15min
 +OnUnitActiveSec=1d
 +
 +[Install]
 +WantedBy=timers.target
 +</code>
 +
 +<code>
 +$ systemctl --user enable borg-backup-billy.timer
 +$ systemctl --user start borg-backup-billy.timer
 +</code>
 +
 +(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:
 +
 +<code>
 +$ systemctl --user list-timers
 +$ systemctl --user status borg-backup-billy.timer
 +$ systemctl --user status borg-backup-billy.service
 +</code>
 +
 +Ü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 ====
 +
 +<code>
 +$ borg info ssh://billyborg/~/home
 +$ borg list ssh://billyborg/~/home
 +</code>
 +
 +<code>
 +$ mkdir /tmp/borgmount
 +$ borgfs ssh://billyborg/~/home /tmp/borgmount
 +</code>
 +
 +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:
 +
 +<code>
 +$ umount /tmp/borgmount
 +</code>
 +
 +==== Allerletzter Check: Backups mit ausgedruckten Schlüssel wiederherstellen ====
 +
 +ToDo