Änderungen

Wechseln zu: Navigation, Suche

Borg Backup

4.686 Byte hinzugefügt, 06:36, 13. Jun. 2020
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 ==

borg list ssh://u123456-sub1@u123456.your-storagebox.de:23/./$(hostname)


== Backups löschen ==

borg delete ssh://u123456-sub1@u123456.your-storagebox.de:23/./$(hostname)::2020-02-22_10:00

== 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

[[Kategorie:Software]]
495
Bearbeitungen