Der Artikel ist eher als Notiz für mich gedacht und nicht als Anleitung!
SSH Keys generieren
ssh-keygen
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_storagebox Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa_storagebox. Your public key has been saved in /root/.ssh/id_rsa_storagebox.pub.
Inhalt von ~/.ssh/id_rsa_storagebox.pub in die authorized_keys auf dem Backup Server kopieren.
Die Berechtigungen für den .ssh Ordner auf 0700 setzen und für die authorized_keys auf 0600.
Die Verbindung kann mit folgenden Befehl getestet werden:
sftp -o "IdentityFile=/root/.ssh/id_rsa_storagebox" -P 23 u123456-sub1@u123456.your-storagebox.de
Borg Repository initialisieren
Als Ordner nehme ich die Variable HOSTNAME.
borg init --encryption=repokey ssh://u123456-sub1@u123456.your-storagebox.de:23/./$(hostname)
Jetzt kann man das Passwort für die Repository festlegen. Passwort aufschreiben, sonst kommt man später nicht mehr an die Backup dran!
Initial Backup erstellen
borg create -v --stats \ ssh://u123456-sub1@u123456.your-storagebox.de:23/./$(hostname)::initial \ / \ --exclude /dev \ --exclude /proc \ --exclude /sys \ --exclude /var/run \ --exclude /run \ --exclude /lost+found \ --exclude /tmp \ --exclude /mnt
Backups auflisten
Backups löschen
Verzeichnis aus Backup wiederherstellen
In dem Beispiel wird das Verzeichnis /var/www von dem Backup 2020-02-22_10:00 in dem aktuelle Verzeichnis, in dem man sich befindet, wiederhergestellt.
mkdir /opt/backup-restore cd /opt/backup-restore borg extract ssh://u123456-sub1@u123456.your-storagebox.de:23/./$(hostname)::2020-02-22_10:00 var/www
Backup Script
mailutils muss auf dem System installiert sein, damit die E-Mail Benachrichtigung funktioniert.
#!/usr/bin/env bash export BORG_RSH="ssh -i /root/.ssh/id_rsa_storagebox" export BORG_PASSPHRASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" LOG="/var/log/borg/backup.log" BACKUP_USER="u123456-sub1" BACKUP_HOST="u123456.your-storagebox.de" REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_HOST}:23/./$(hostname)" ## ## Write output to logfile ## if [ ! -d "/var/log/borg/" ] then echo "create log dir ..." mkdir -p /var/log/borg/ fi exec > >(tee -i ${LOG}) exec 2>&1 echo "###### Starting backup on $(date) ######" echo "" ## ## Create list of installed software ## dpkg --get-selections > /root/backup/software.list ## ## Sync backup data ## echo "Syncing backup files ..." echo "" borg create -v --stats \ $REPOSITORY::'{now:%Y-%m-%d_%H:%M}' \ / \ --exclude /dev \ --exclude /proc \ --exclude /sys \ --exclude /var/run \ --exclude /run \ --exclude /lost+found \ --exclude /tmp \ --exclude /mnt status_backup=$? if [ $status_backup -eq 0 ] then echo "###### Finished backup on $(date) ######" else echo "###### Failed backup on $(date) ######" >&2 fi echo "" ## ## Pruning backup data ## echo "###### Pruning backup on $(date) ######" echo "" borg prune -v $REPOSITORY \ --keep-daily=7 \ --keep-weekly=4 \ --keep-monthly=6 status_prune=$? if [ $status_prune -eq 0 ] then echo "###### Pruning finished ######" else echo "###### Pruning failed ######" >&2 fi ## ## Send mail to admin ## if [ $status_backup -eq 0 ] && [ $status_prune -eq 0 ] then mailx -a "From: "$(hostname)" Backup <"$(hostname)"@meinedomain.de>" -s "Successful Borg Backup | "$(hostname) admin@meinedomain.de < $LOG else mailx -a "From: "$(hostname)" Backup <"$(hostname)"@meinedomain.de>" -s "Failed Borg Backup | "$(hostname) admin@meinedomain.de < $LOG fi
Cronjob für das Script.
/etc/crontab
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 5 1 * * * root /root/backup/borgbackup.sh > /dev/null