Backups unter Debian GNU/Linux mit duplicity und ftplicity

Dieses Howto beschäftigt sich mit Backups unter Debian GNU/Linux mit den Tools duplicity und ftplicity. ftplicity ist ein Skript der Computerzeitschrift c’t [# c't, Ausgabe 13/2006, Seite 216], das den Umgang mit duplicity vereinfacht.


Autor des Artikels ist Thorsten Walk (thorsten [at] walk-steinweiler [dot] de); der Text ist unter einer Creative-Commons-Lizenz freigegeben: Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 2.0 Deutschland

Feedback zu diesem Dokument ist natürlich willkommen, fachliche Fragen bitte an die Mailingliste (howto [at] lists [dot] debianhowto [dot] de).

Contents

Installation

duplicity

apt-get install duplicity

ftplicity

ftplicity ist auf der c't-Homepage verfügbar. Einfach das Archiv herunterladen und entpacken. Die Datei “ftplicity” aus dem Archiv nach /usr/local/bin kopieren und ausführbar machen:

cd /tmp
wget ftp://ftp.heise.de/pub/ct/listings/0613-216.tar.gz
tar xvfz 0613-216.tar.gz
mv ftplicity-1.1.1/ftplicity /usr/local/bin
chmod +x /usr/local/bin/ftplicity

Der dazugehörige Artikel bietet weitergehende Informationen zu der Funktionsweise von ftplicity.

GnuPG

Die Backups, die ftplicity anlegt, werden mit GnuPG verschlüsselt abgelegt. Dazu muss auf dem System ein GnuPG-Schlüssel erstellt werden. An dieser Stelle werde ich nur eine kurze Anleitung zum erstellen eines GnuPG Keys geben. Ausführliches findet sich reichlich im Netz.

Installation:

apt-get install gnupg

Erstellen eines Schluessels:

gpg --gen-key

Die Installation wäre hiermit schon abgeschlossen. Um die Backups erstellen zu können braucht man allerdings Zugriff auf einen FTP Server.

Konfiguration

Wenn man ftplicity das erste mal startet wird man darauf hingewiesen das noch keine Konfigurationsdatei für den ausführenden User vorhanden ist. ftplicity sollte als root ausgeführt werden damit es auch auf alle Verzeichnisse auf dem System Zugriff hat.

/usr/local/bin/ftplicity 

Offenbar benutzen Sie ftplicity zum ersten Mal. Eine vorlaeufige
Konfigurationsdatei wurde unter $HOME/.ftplicity/conf erstellt.
Sie muessen dort die Daten des verwendeten GPG-Schluessels sowie
die Zugangsdaten fuer den FTP-Server eintragen, bevor Sie mit dem
Backup fortfahren koennen.

WICHTIG:
Sichern Sie das komplette Konfigurationsverzeichnis nach dem
ersten erfolgreichen Backup unbedingt auf einen vertrauenswuerdi-
gen externen Rechner und schuetzen Sie es vor unbefugtem Zugriff.

Danach wechselt man in das eben erstellte Verzeichniss und erstellt da folgende Dateien:

   -rw-------  1 root root   99 Sep 14 16:03 exclude
   -rwx------  1 root root    0 Sep 14 15:11 post
   -rwx------  1 root root    0 Sep 14 15:11 pre

Die Datei exclude enthält eine Liste von Dateien die beim Backup nicht berücksichtigt werden sollen. Hier meine als Beispiel:

   /boot
   /dev
   /initrd
   /lib
   /media
   /mnt
   /proc
   /src
   /sys
   /tmp
   /var/tmp
   /var/run
   /var/spool

Die Dateien pre und post können Befehle beinhalten die Vor- bzw. nach dem Backupvorgang ausgeführt werden sollen.

Nun machen wir uns an die wichtigste Datei von allen, die “conf”. Diese wurde beim ersten Starten von ftplicity bereits erstellt und muss nur noch angepasst werden.

# Daten fuer GPG-Schluessel                                                                                                         
GPG_KEY=_KEY_ID_
GPG_PW='_GPG_PASSWORT_'
                                                                                                                                    
# Zugangsdaten fuer FTP-Server (URL-Format)
ZIEL='ftp://_USER_@_SERVER_/_VERZEICHNIS_/'
ZIEL_PW='_FTP_PASSWORT_'
                                                                                                                                    
# Basisverzeichnis fuers Backup
QUELLE='/'                                                                                                                          
                                                                                                                                    
# aeltester Wiederherstellungszeitpunkt
HOECHSTALTER=1M
                                                                                                                                    
# Ausfuehrlichkeit der Bildschirmausgaben (9 fuer Fehlersuche)
VERBOSITY=4                                                                                                                         
                                                                                                                                    
# Verzeichnis fuer temporaere Dateien. Beim Restore muss dort
# mindestens Patz fuer die groesste Datei im Backup sein
TEMP_DIR=/tmp

Hier eine kurze Beschreibung der wichtigsten Optionen:

  • GPG_KEY: Die ID eures zuvor erstellen GPG-Keys.
  • GPG_PW: Das Passwort zu eurem Key.
  • ZIEL= Der FTP-Server auf dem die Daten abgelegt werden sollen.
  • ZIEL_PW= Das Passwort um auf den FTP-Server Zugriff zu erlangen.

Benutzung von ftplicity

An dieser Stelle einfach nur die Hilfe Ausgabe von ftplicity, das Programm ist sehr leicht zu verstehen:

Usage: ftplicity <Kommando> [<Optionen> ...]

Kommandos:
  backup:    inkrementelles Backup
  full:      vollstaendiges Backup erzwingen
  list:      Dateien im Backup auflisten
  verify:    Backup pruefen und Aenderungen anzeigen
  purge [--force]:
             veraltete Backup-Archive anzeigen [und loeschen]
  cleanup [--force]:
             Backup-Verzeichnis aufraeumen (nach Programmabbruch)
  restore <Zielpfad> [<Alter>]:
             Backup nach <Zielpfad> restaurieren [vom Stand <Alter>]
  fetch <Datei/Verzeichnis> <Ziel> [<Alter>]
             Datei/Verzeichnis einzeln restaurieren (siehe Beispiel)

Beispiele:
  Veraltete Backup-Archive anzeigen und loeschen:
    ftplicity purge --force
  Vollstaendiges Backup nach /mnt zurueckspielen:
    ftplicity restore /mnt
  Datei /etc/passwd nach /root/pw restaurieren, Stand vor 4 Tagen:
    ftplicity fetch etc/passwd /root/pw 4D
    (siehe "man duplicity", Abschnitt TIME FORMATS)

Backupvorgang automatisieren

Um die Backups nicht immer per Hand erstellen zu müssen bietet sich cron an. Die Datei /etc/crontab muss dazu um folgende Zeilen ergänzt werden:

 
# ftplicity taegliches backup
0 5 * * *               root test -x /usr/local/bin/ftplicity && /usr/local/bin/ftplicity backup >/dev/null

# ftplicity monatliches full-backup
0 6 1 * *               root test -x /usr/local/bin/ftplicity && /usr/local/bin/ftplicity full && /usr/local/bin/ftplicity purge --force >/dev/null
Nacharbeiten

Nachdem das erste Backup erfolgreich erstellt wurde, ist es unbedingt erfoderlich, das “.ftplicity” Verzeichnis wegzusichern. Um dem Backupziel die vertraulichen Informationen nicht zugänglich zu machen, ist es sinnvoll jene Daten auf dein eigenen Arbeitsplatzrechner o.ä. zu sichern. Das “.gpg” Verzeichnis muss nicht unbedingt weggesichert werden, da ftplicity den Backup-schlüssel in sein eigenes Verzeichnis kopiert. Beide Verzeichnisse befinden sich z.B. beim Root User in seinem Homedir (”/root”).

Restore

Wenn man das komplette System gesichert hat und das wieder restoren will ist es unbedingt zu empfehlen das Rescuesystem des jeweiligen Hosters (falls vorhanden) zu nutzen. Damit sollte zu erst die gewünschte Partitionierung erstellt werden (kann auch ruhig eine andere als zuvor sein, aber dann sollte man auf entsprechenden Platz in den Filesystemen achten).

Danach muss zuerst duplicity in das Rescuesystem installiert werden und dann das ftplicity Paket. Nun muss das auf den eigenen Rechner gesicherte “.ftplicity” Verzichnisse in den entsprechenden Pfad kopiert werden (bzw. deren Inhalt).

Die Rootpartition sollte nun ins Rescuesystem eingehangen werden (z.b. unter /mnt) und darin dann (evt.) die weiteren Filesysteme. Wichtig: tmp braucht die Rechte 777 und genug Platz, da ftplicity dort arbeitet.

Wichtig sind auch die Einhängepunkte für die virtuellen Dateisysteme wie /proc, /dev und /sys. Laut Artikel soll man die Gerätedateien noch im Rescuesystem wiederherstellen. Theoretisch sollte dies mit

cd /mnt/dev
./MAKEDEV

funktionieren (mehr Infos bringt “man MAKEDEV”), ist aber ungetestet. (Brauchte bisher noch keinen Vollrestore mit ftplicity).

Jetzt sollte der Restore möglich sein mit einem

ftplicity restore /mnt

Danach muss noch der Bootloader restauriert werden. Bei lilo muss z.b. zuerst die entsprechende lilo.conf in das /etc des Rescuesystems kopiert werden und mit einem einfachen “lilo” neu geschrieben werrden. Hier aber besser die zahlreichen Bootloader Dokus bemühen. Nun ein Reboot absetzen und hoffen, dass alles wieder funktioniert.

Alle Informationen ohne Gewähr, da ungetestet.

Wie komme ich an die ID des GPG Schlüssels?

Bei Erstellung des Schlüssels wird die ID eigentlich mitgeliefert. Wer dennoch nachträglich die ID erfahren muss, setzt ein

gpg --list-keys

Die Ausgabe liefert nun je nach Schlüssel eine “pub”, eine “uid” und eine “sub” Zeile. Wer seinen Schlüssel sinnvoller Userinfos mitgegeben hat, wird ihn direkt erkennen, ansonsten kann man auch über das Erstellungsdatum auf den richtigen Schlüssel schliessen.

Folgend eine Beispielausgabe, das fettgedruckte ist dann die Schlüssel-ID:

pub 1024D/1234ABCD 2006-11-16

Bugs

Falls ihr einen Fehler 450/550 erhaltet und das FTP Ziel Verzeichniss leer ist, einfach eine leere Datei (touch emptyfile) in das FTP-Zielverzeichniss laden, dann sollte es funktionieren. Für weitere Infos bitte im GNU Bugtracker schauen, das ganze half bei mir auch gegen einen 550er Fehler.

Ein weiterer Bug ist bei NT-FTPs zu erwarten. Diese haben Probleme mit langen Dateinamen/Sonderzeichen. Ich habe es wie folgt lösen können: Zeile 82 von /usr/local/bin/ftplicity (oder wo auch immer es installiert ist) von “$@” zu –short-filenames “$@” abändern (Problemlösung von Christiane Ruetten)

Netmarks

Quelle