Restore-Script für Duplicity

Meine ownCloud läuft inzwischen auf dem Raspberry Pi im Wohnzimmer. Die wichtigen Daten darauf werden verschlüsselt auf einem externen FTP-Server gesichert. Hierfür wird Duplicity verwendet, ein leistungsfähiges Backup-Tool, das allerdings auf der Kommandozeile etwas unhandlich zu bedienen ist.

Für das tägliche automatische Backup verwende ich dieses Backup-Script für Duplicity von Hetzner. Aber was, wenn der Ernstfall eintritt und verlorene Daten wieder hergestellt werden müssen? Dafür habe ich mir das folgende Restore-Script geschrieben. Es müssen dieselben Zugangsdaten eingetragen werden, die in dem oben verlinkten Backup-Script verwendet wurden.

#!/bin/bash
#
# Simple script for restoring Duplicity backups.
#
# Usage: restore.sh FNAME TARGET [TIME]
# FNAME: fully qualified name of the file or folder to restore
# TARGET: fully qualified name of the restored file or folder,
#         can be the original name and location or another
# TIME: Specify the time from which to restore files, e.g. 3D for 3 days
#       See duplicity manpage chapter "Time Formats" for details
#
# Example to restore /etc from 2 days ago in /home/user/etc_restored:
# restore.sh /etc /home/user/etc_restored 2D 

# Set protocol (use scp for sftp and ftp for FTP, see manpage for more)
BPROTO=scp

# set user and hostname of backup account
BUSER='u10000'
BHOST='u10000.your-backup.de'

# Setting the password for the Backup account that the
# backup files will be restored from.
# for sftp a public key can be used.
BPASSWORD='yourpass'

# Setting the pass phrase to encrypt the backup files. Will use symmetrical keys in this case.
PASSPHRASE='yoursecretgpgpassphrase'
export PASSPHRASE

##############################

if [ $BPASSWORD ]; then
 BAC="$BPROTO://$BUSER:$BPASSWORD@$BHOST"
else
 BAC="$BPROTO://$BUSER@$BHOST"
fi

FNAME=$1
TARGET=$2
TIME=$3

if [ $TIME ]; then
 TIME="-t $TIME"
fi

if [ $FNAME != ${FNAME#/*/} ]; then
 CMD="duplicity $TIME --file-to-restore ${FNAME#/*/} $BAC${FNAME%%/${FNAME#/*/}} $TARGET >> $LOGDIR/system.log"
else
 CMD="duplicity $TIME $BAC${FNAME%%/${FNAME#/*/}} $TARGET >> $LOGDIR/system.log"
fi

eval $CMD

# Check the manpage for all available options for Duplicity.
# Unsetting the confidential variables
unset CMD
unset PASSPHRASE
unset FTP_PASSWORD

exit 0

Das Script kann man z.B. unter /usr/local/sbin/restore.sh speichern und mit folgendem Befehl ausführbar machen:

sudo chmod 750 /usr/local/sbin/restore.sh

Benutzung:

sudo restore.sh FNAME TARGET [TIME]

FNAME: Name der Datei oder des Verzeichnis, das aus dem Backup wiederhergestellt werden soll.
TARGET: Name, unter dem die Daten wiederhergestellt werden sollen. Das kann auch ein abweichender Name oder Speicherort sein.
TIME: Optional, ohne Angabe wird das letzte Backup wiederhergestellt. Für Details siehe die Duplicity Manpage im Kapitel „Time Formats“.

Jetzt wollen wir z.B. das versehentlich gelöschte Verzeichnis /home/username/Maildir an seiner ursprünglichen Stelle wiederherstellen.

sudo restore.sh /home/username/Maildir /home/username/Maildir

Im folgenden Beispiel wird der Stand von vor fünf Tagen wiederhergestellt, außerdem werden die Daten im abweichenden Verzeichnis /home/username/Maildir_restored gespeichert:

sudo restore.sh /home/username/Maildir /home/username/Maildir_restored 5D

Auch einzelne Dateien können aus dem Backup zurückgeholt werden. Im folgenden Beispiel wollen wir nachsehen, wie die Datei /home/username/Dokumente/Artikel.txt vor zwei Wochen ausgesehen hat, ohne den aktuellen Stand zu verlieren:

sudo restore.sh /home/username/Dokumente/Artikel.txt /home/username/Dokumente/Artikel_alt.txt 2W

Duplicity überschreibt beim Wiederherstellen bestehende Dateien nicht. Auch sonst ist es eine gute Idee, die Daten erst mal an einer anderen Stelle wiederherzustellen. Nach einer Kontrolle, ob man wirklich die gewünschte Version aus dem Backup geholt hat, kann man die Daten dann an die ursprüngliche Stelle verschieben.

Dieser Beitrag wurde unter Server veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *