de:backup:server

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
de:backup:server [2022/09/03 00:25] – removed - external edit (Unknown date) 127.0.0.1de:backup:server [2022/10/24 08:24] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Server & Desktop Backup-Lösungen ======
 +
 +Die ersten Sicherungen werden eine Weile dauern. Die folgenden sind viel schneller, aber das hängt davon ab, wie viel geändert wurde. Es werden nur die Änderungen gespeichert.
 +
 +===== rsync =====
 +
 +Folge zunächst unserer [[de:server:services:rsync|rsync]] Anleitung.
 +
 +Die Snapshots werden lokal und über die rsync-Daemon remote gespeichert. 
 +
 +<alert type="danger" icon="fa fa-warning">Diese Backup-Lösung ist nur für ein internes Netzwerk zu empfehlen. Verwende stattdessen eine verschlüsselte Sicherungsmethode mit [[de:backup:server#borg|borg]].</alert>
 +
 +==== Abhängigkeiten ====
 +
 +Das Skript benötigt ''inetutils'' für den ''hostname'' Befehl.
 +
 +<code>
 +pacman -S inetutils
 +</code>
 +
 +
 +==== Anmeldeinformationen ====
 +
 +<code>
 +echo "$password" > /etc/rsyncd.password
 +chmod 400 /etc/rsyncd.password
 +</code>
 +
 +==== Skript ====
 +
 +Füge deine Daten zu ''DAEMONUSER=""'' und ''DAEMONHOST=""'' hinzu.
 +
 +<code>
 +nano /root/rsnapbackup.sh
 +</code>
 +<code>
 +#!/bin/sh
 +
 +## Based on:
 +## my own rsync-based snapshot-style backup procedure
 +## (cc) marcio rps AT gmail.com
 +
 +# config vars
 +
 +SRC="/"
 +SNAP="/root/backup/"
 +OPTS="--rltogiPhv --stats --delay-updates --delete --chmod=a-w"
 +EXCL="--exclude-from=/root/backup-filter.rule"
 +DAEMONUSER=""
 +DAEMONHOST=""
 +HOSTNAME=$(hostname)
 +MINCHANGES=1
 +
 +# run this process with real low priority
 +
 +ionice -c 3 -p $$
 +renice +12  -p $$
 +
 +# List and save installed packages
 +pacman -Qn | awk '{ print $1 }' > /root/pkglist
 +
 +# sync
 +
 +rsync $OPTS $EXCL $SRC $SNAP/latest >> $SNAP/rsync.log
 +
 +# check if enough has changed and if so
 +# make a hardlinked copy named as the date
 +
 +COUNT=$( wc -l $SNAP/rsync.log|cut -d" " -f1 )
 +if [ $COUNT -gt $MINCHANGES ] ; then
 +        DATETAG=$(date +%Y-%m-%d-%H:%M)
 +        if [ ! -e $SNAP/$DATETAG ] ; then
 +                cp -al $SNAP/latest $SNAP/$DATETAG
 +                chmod u+w $SNAP/$DATETAG
 +                mv $SNAP/rsync.log $SNAP/$DATETAG
 +               chmod u-w $SNAP/$DATETAG
 +         fi
 +fi
 +
 +rsync -avAXHP --delete --password-file=/etc/rsyncd.password $SNAP rsync://$DAEMONUSER@$DAEMONHOST/archive/backup/$HOSTNAME
 +</code>
 +<code>
 +chmod +x /root/rsnapbackup.sh
 +</code>
 +
 +
 +=== Ordner und Dateien ausschließen ===
 +
 +Dies ist ein Beispiel. Füge alles hinzu, was du nicht sichern möchtest. Und ändere den home ''$USER''.
 +
 +<code>
 +nano /root/backup-filter.rule
 +</code>
 +<code>
 +/dev/*
 +/proc/*
 +/sys/*
 +/tmp/*
 +/run/*
 +/mnt/*
 +/media/*
 +/lost+found
 +# root user
 +/root/backup/*
 +/root/.cache/*
 +# Home user
 +/home/$USER/.cache/*
 +</code>
 +
 +
 +===== borg =====
 +
 +Folge zunächst unserem [[de:server:services:borg|borg]] Tutorial.
 +
 +Die Snapshots werden über SSH gespeichert.
 +
 +==== Skript ====
 +
 +Vergiss nicht, zuerst das Borg Repo zu erstellen und dem Skript die Anmeldedaten hinzuzufügen.
 +<code>
 +borg init --encryption=keyfile-blake2 --make-parent-dirs ssh://username@remote.host.address:$port>/~/backups/borg/{hostname}
 +</code>
 +
 +Füge deine ausgeschlossenen Ordner/Dateien hinzu ''%%--%%exclude '/home/*/.cache/*' \'' und füge unter ''::'{hostname}-{now}' \'' die Ordner/Dateien hinzu, die du sichern willst.
 +
 +<code>
 +#!/bin/sh
 +
 +# Setting this, so the repo does not need to be given on the commandline:
 +export BORG_REPO=ssh://username@example.com:2022/~/backups/borg/{hostname}
 +
 +# See the section "Passphrase notes" for more infos.
 +export BORG_PASSPHRASE='XYZl0ngandsecurepa_55_phrasea&&123'
 +
 +# 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"
 +
 +# Backup the most important directories into an archive named after
 +# the machine this script is currently running on:
 +
 +borg create                         \
 +    --verbose                       \
 +    --filter AMEhsx                 \
 +    --list                          \
 +    --stats                         \
 +    --progress                      \
 +    --verbose                       \
 +    --show-version                  \
 +    --show-rc                       \
 +    --compression zstd,11           \
 +    --exclude-caches                \
 +    --exclude '/home/*/.cache/*'    \
 +    --exclude '/var/tmp/*'          \
 +                                    \
 +    ::'{hostname}-{now}'            \
 +    /etc                            \
 +    /home                           \
 +    /root                           \
 +    /var                            \
 +
 +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                 \
 +
 +prune_exit=$?
 +
 +# use highest exit code as global exit code
 +global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
 +
 +if [ ${global_exit} -eq 0 ]; then
 +    info "Backup and Prune finished successfully"
 +elif [ ${global_exit} -eq 1 ]; then
 +    info "Backup and/or Prune finished with warnings"
 +else
 +    info "Backup and/or Prune finished with errors"
 +fi
 +
 +exit ${global_exit}
 +</code>
 +===== Crontab - rsync und borg =====
 +
 +Folge zunächst unserem [[de:server:services:crontab|crontab]] Tutorial und füge folgendes für den Root- Benutzer hinzu:
 +
 +<code>
 +@daily /root/rsnapbackup.sh
 +</code>
 +<code>
 +@daily /root/bsnapbackup.sh
 +</code>
 +
 +  * ''@yearly''
 +  * ''@annually''
 +  * ''@monthly''
 +  * ''@weekly''
 +  * ''@daily''
 +  * ''@hourly''
 +  * ''@reboot''
 +
 +
 +===== Syncthing =====
 +
 +Folge zunächst unserem [[de:server:services:syncthing|Syncthing]] Tutorial für beide Geräte (Backupserver und Datengerät).
 +
 +
 +==== Gerät hinzufügen ====
 +
 +Füge den Backupserver zu deinem Client unter ''Remote Devices'' hinzu. 
 +
 +
 +==== Ordner hinzufügen ====
 +
 +  * Füge einen Ordner unter ''Folder'' hinzu und  wähle unter ''General'' den Ordner aus der gesichert werden soll. 
 +  * Wähle unter ''Sharing'' den Backupserver aus.
 +  * Unter ''File Versioning'' kannst du die ''Staggered File Versioning'' hinzufügen, die dir mehr Sicherheit gibt. Aber schau unter https://docs.syncthing.net/users/versioning.html nach und wähle aus was dir am Besten gefällt.
 +  * Check auch ''Advanced'' und ''Folder type'' und wähle wieder, was am besten zu dir passt. Keepass kann zum Beispiel mit ''Send & Receive'' verwendet werden, wenn du deine Datenbank auf beiden Geräten synchronisieren möchtest.
 +