Rsync auf einen FTP-Server

Ich bin im Moment daran, ein Backupsystem für einen vServer eines Freundes zu realisieren. Mein erster Gedanke war hier rsync. Allerdings bietet der Backupserver ledeglich die Möglichkeit, sich via FTP einzuloggen. Was also tun?

Nach etwas googeln bin ich auf das Paket curlftpfs gestoßen – ein hilfreiches Modul für FUSE ist. Mit curlftpfs lassen sich FTP-Server in das Dateisystem einhängen und stehen somit wie eine normale Festplatte zur Verfügung. Damit lassen sich Daten auf einem FTP-Server relativ komfortabel editieren.

Logischerweiße kann man curlftpfs also auch dazu nutzen, ein lokales Verzeichniss mit rsync auf einen externen FTP-Server zu spiegeln, und das völlig ohne SSH-Verbindung.

Installation
Für Debian und Ubuntu gibt es bereits fertige Pakete, welche man direkt mit der Paketverwaltung installieren kann:

apt-get install curlftpfs

Beispiel Benutzung
Hier ein kleines Beispiel für ein Script, dass das lokale Backup Verzeichniss zum FTP-Server synchronisiert. Darin könnten jetzt beispielsweiße Sicherungen von einzelnen Konfigurationsdateien (/etc/), oder komplette Fullbackups des Systems liegen.

#!/bin/bash

# Mountpoint anlegen
mkdir -p /mnt/ftpserver

# FTP Server per curlftpfs einhängen
curlftpfs ftp.example.com/backups /mnt/ftpserver

# delete-after sorgt dafür das alte Dateien erst nach dem Transfer
# der neuen Dateien gelöscht werden.
rsync --archive --delete-after /var/backups /mnt/ftpserver

# FTP-Server unmounten
fusermount -u /mnt/ftpserver

Dieses Beispiel geht davon aus, dass bereits eine ~/.netrc Datei existiert. Mit der ~/.netrc kann man sich (mehr oder weniger) automatisch, ohne jedes mal das Passwort angeben zu müssen, in einen FTP-Server einloggen.

Auch wenn curlftpfs die direkte Angabe des Passworts im Kommando erlaubt, finde ich diese Möglichkeit doch etwas schöner. Die Datei ~/.netrc ist folgendermaßen aufgebaut:

machine ftp.example.com login backup_user password meinpasswort

Nachdem man sich diese angelegt hat setzt man sie zur Sicherheit noch auf chmod 600, und fertig ist der rsync über FTP. ;)

Den Code kann von oben kann man sich dann noch als Script abspeichern und per Cronjob, den rsync jede Nacht/jede Woche automatisch durchführen lassen. Das Script ist übrigens der Übersichtlichkeit bewusst schlicht gehalten, wer möchte kann sich natürlich auch noch eine Fehlerbehandlung und das schreiben eines Logfiles mit einbauen… je nach Wunsch.

Kommentare (9)

Mike17.10.2008 um 18:00 Uhr

Hier ein paar Hints zum rsync Kommando:

-z ist hier nicht nötig. Normalerweise sorgt das dafür, dass zwischen den beiden Rechnern die Daten komprimiert werden, was bei schmalbandigen Verbindungen nett ist. Hier ist es aber so, dass RSYNC die Daten lokal kopiert, die Übertragung durch’s Netz erfolgt ja per FUSE/FTP.

Ich würde noch –delete vorschlagen, da sonst nur neue Dateien übertragen werden, aber gelöschte Dateien werden im Backup nicht mehr gelöscht. Noch besser wäre –delete-after, welches erst am Ende der Übertragung löscht.

Simon17.10.2008 um 18:10 Uhr

> -z ist hier nicht nötig
Das stimmt, das hatte ich gar nicht bedacht. Das sollte natürlich curlftpfs erledigen. Danke für den Hinweis.

> Ich würde noch –delete vorschlagen, da sonst nur neue Dateien
> übertragen werden, aber gelöschte Dateien werden im Backup nicht mehr
> gelöscht.
Eventuell kann das ja gewünscht sein, aber den Parameter hätte ich vielleicht doch noch erwähnen sollen, das werde ich gleich noch nachtragen. Vielen Dank. :)

killerbees1917.10.2008 um 20:33 Uhr

Sag mal kannst du Gedanken lesen? Denn genau GESTERN habe ich in zig Chats nachgefragt, ob einer Programm für diese Anforderungen kennt, ähnlich rsync. Netter Beitrag, werde ich einmal ausprobieren, thx ;-)

MfG Christian

flix31.10.2008 um 14:15 Uhr

Vielen Dank, genau das habe ich gesucht :)

keinname13.12.2008 um 00:00 Uhr

Momentan beschäftige ich mich auch damit, Daten auf ein Verzeichnis zu rsyncen, auf dem der Inhalt eines FTP Servers gemountet ist. Bei mir werden lustigerweise alle Ordner auf dem FTP angelegt, jedoch keine Dateien übertragen – auch wenn dies angezeigt wird.

Zusätzlich tritt aber auch folgender fehler beim erstellen der Ordner auf:

rsync: chgrp “/home/zelasko/ftp.zelasko.de/rsync/.mozilla-thunderbird/.” failed: Operation not permitted (1)

Grüße

Simon13.12.2008 um 01:06 Uhr

keinname: Du benutzt ebenfalls curlftpfs nehme ich an?

Beachte das rsync die Dateirechte (bzw. und Gruppenrechte) mitkopiert, wenn dein FTP-User also nur beschränkte Rechte hat, kann das natürlich nur schief gehen. Was passiert wenn du das ganze mit einem simplen cp machst?

Falls das das Problem nicht lösen sollte, poste bitte einmal den kompletten Befehl, mit dem du den rsync startest.

Gruß, Simon

Mike13.12.2008 um 13:02 Uhr

Ich vermute, du nutzt auch den Schalter -a (oder –archive), welches die Rechte mitkopiert. Benutze stattdessen einfach nur -r (–recursive), gegebenenfalls auch noch -t (–times).

keinname29.12.2008 um 23:30 Uhr

Simon, Mike: Danke soweit!

Ich habe es mit dem cp probiert. Das Bild ist nach dem Vorgang auf dem Webserver vorhanden und auch abrufbar, jedoch läuft es nicht “ganz” sauber ab:
z@001:~$ curlftpfs http://ftp.zelasko.de /ftp
z@001:~$ cp /PATH/bild.jpg /ftp/PATH/bild.jpg
cp: Schließen von „/ftp/PATH/bild.jpg“: Input/output error

Möglicherweise liegt das Problem schon an dieser Stelle! Jedoch weiß ich nicht wirklich was damit anzufangen, denn mein FTP Acc hat die nötigen Rechte in diesem Verzeichnis.

Meine beiden rsync Befehle
1) rsync -trv /PATH/files/ /ftp/PATH/files/
> Zeigt keine Fehler an, erstellt jedoch nur Verzeichnisse
2) rsync –archive -v /PATH/files/ /ftp/PATH/files/
> rsync: chgrp “/ftp/PATH/files” failed: Operation not permitted (1)

Grüße

[...] fü die Anregungen/Ideen an: blog.simlau.net, lieber-linux.de, stackoverflow.com, debiantutorials.net und commandlinefu.com. Verwandte [...]

Einen Kommentar hinterlassen

Dein Kommentar