Daten vom FTP mit rsync sichern

Im folgenden erkläre ich, wie Kunden von Webhostern bequem die Daten ihrer Internetseiten sichern können.

Dass sich rsync hervorragend für zeit- und übertragungsdaten-sparende Backup-Lösungen eignet, erzählte ich bereits in einem umfangreicheren Artikel. Es wäre doch auch toll, diese Technik für den FTP-Server zu benutzen! Leider kann rsync ohne Weiteres nicht auf FTP-Server zugreifen. Wie es trotzdem funktioniert, lernte ich dort. Auch als Gedächtnisstütze für mich, werde ich hier erläutern, wie es gemacht wird:

Zunächst benötigen wir das Programm curlftpfs, das in den Repositorien der meisten Distributionen unter selbem Namen vorliegen sollte. Mit diesem Werkzeug kann man FTP-Server fast genau wie beliebige Laufwerke in das heimische Dateisystem einbinden.

Um den ganzen Vorgang ein wenig zu beschleunigen, bietet sich ein kleines Skript an, das in etwa so aussehen könnte und bereits einen beispielhaften rsync-Befehl enthält:

#!/bin/bash

# „mounte“ den FTP-Server unter /media/ftp. Dieses
# Verzeichnis vorher ggf. mit „sudo mkdir /media/ftp“
# erstellen!

curlftpfs ftp.meinbeispielhoster.de /media/ftp 

# Jetzt die Sicherung mit rsync vornehmen. Folgende
# Parameter werden verwendet:
#
# --delete-after: Alte Backup-Dateien werden nach der
#                 Übertragung gelöscht. 
# -r:             sichere auch Unterverzeichnisse
# -P:             Gibt eine Fortschrittsanzeige aus
# --exclude-from: Verweise auf eine Text-Datei, in
#                 der vom Backup auszuschließende
#                 Dateien und Ordner vermerkt sind

rsync -rP --delete-after --exclude-from=$HOME/rsync_exclude.txt /media/ftp $HOME/Webseiten-Backups

# Einbindung des FTP-Servers wieder lösen

fusermount -u /media/ftp

Weitere Erläuterungen:

Dein FTP-Server ist vermutlich passwortgeschützt. Du kannst die Zugangsdaten entweder direkt in den Befehl einbauen (curlftpfs benutzername:passwort@ftp.meinbeispielhoster.de /media/ftp) oder in der Datei ~/.netrc ablegen. Die Datei muss nach diesem Schema aufgebaut sein:

machine ftp.meinbeispielhoster.de login MeinBenutzername password MeinPasswort

Die im Skript genannte Exclude-Datei ist natürlich optional. Ich verwende sie, um bspw. temporäre Dateien und Log-Files nicht zu sichern. Dateien und Ordner mit rsync auszuschließen, ist ein wenig ungewohnt. Die genannte rsync_exclude.txt könnte etwa so aussehen:

# Ich gehe von der folgenden beispielhaften Ordner-
# Struktur aus:
#
#  .
#  |-- meineseite
#  |   |-- piwik
#  |   |   `-- tmp
#  |   |
#  |   `-- textpattern
#  |       `-- tmp
#  |
#  `-- logs
#
# Es können alle tmp-Verzeichnisse ignoriert werden.
# Außerdem möchte ich den Ordner „logs“ im
# Stammverzeichnis aus dem Backup ausschließen.
# So könnte man dies bewerkstelligen:

- **/tmp
- logs

Wie gezeigt müssen alle Pfade relativ sein. Die Benutzung von „Wildcards“ (*) ist dabei erlaubt. Genauere Details zu den sogenannten Exclude-Patterns finden sich in der Manpage von rsync (siehe unter „INCLUDE/EXCLUDE PATTERN RULES“). Das Ganze sieht komplizierter aus, als es ist. Notfalls versucht man eben per Versuch und Irrtum die richtige Ausschlussregel zu formulieren oder verzichtet komplett darauf.

Und damit haben wir auch schon alles, was wir für ein schlankes Backup brauchen. Wer will, kann aus dem Skript natürlich einen Cronjob machen und es auf diese Weise bspw. täglich oder wöchentlich automatisch ausführen lassen.

Noch ein wenig Lektüre zum Thema:

Betreiber von Blogs, Gästebüchern, Foren, etc. pp., möchten vielleicht auch den Inhalt ihrer MySQL-Datenbank bequem sichern. Über dieses Thema habe ich mich auch schon ausgelassen.

Andwils Avatar

~andwil

Geek aus Kiel. tobt sich hier vor allem über den Open-Source-Kosmos im Allgemeinen (und Linux im Speziellen) sowie Heavy Metal aus.