30.6.2006
Bashen fuer Anfaenger
In einer der letzten c'ts gab es einen interessanten Artikel ueber duplicity, ein Tool fuer Backups auf nicht vertrauenswuerdige Systemen (und zig weiteren Anwendungsmoeglichkeiten). Prima, dachte ich mir, genau das richtige, um meine bisherige Backupstrategie (rsync ueber GPRS auf ein auf einer externen Firewire-Platte liegendes und in einer VMware laufendes grml – ich schwoere!) zu ergaenzen. Installieren und Einrichten war in Minuten erledigt und der erste Test erfolgreich. Nun noch schnell in die crontab eintragen und fertig.
Am naechsten Tag die Enttaeuschung: Das naechtliche Backup konnte wegen Verbindungsproblemen zum FTP-Server nicht durchgefuehrt werden. Nachdem diese Probleme unregelmaessig auch in den naechsten Naechten anzutreffen waren, entschloss ich mich, das Problem zu zerlegen. Das Backup von duplicity sollte im lokalen Dateisystem abgelegt werden und ich wuerde mich um den Transport zum Server selbst kuemmern.
Eine Suche bei Google zum Thema Synchronisation per FTP (wobei mein Rechner die Quelle und nicht das Ziel spielen sollte), blieb erfolglos. Also Editor auf und los. Resultat der Anstrengungen ist ein kleines Shellskript, welches ein Verzeichnis im lokalen Dateisystem mit einem auf einem FTP-Server abgleicht, wobei alle nur remote verfuegbaren Dateien geloescht und alle nur lokal verfuegbaren uebertragen werden. Dateien mit gleichem Namen und gleicher Groesse werden dabei ausgelassen, um Traffic einzusparen.
Der Clou ist, dass Dateien, die durch Verbindungsabbrueche die falsche Dateigroesse besitzen, ebenfalls geloescht und neu uebertragen werden (auf eine Fortsetzung des fehlerhaften Uploads moechte ich mich dabei nicht verlassen). Einzig eine Pruefung per Hashwert wuerde ich gern ergaenzen, nur kenne ich keine Moeglichkeit, die Hashwerte vom Server geliefert zu bekommen. Naja, damit muss ich leben.
Ich stelle das Skript hier als Anregung zur Verfuegung, muss jedoch _dringend_ davon abraten, es ohne Anpassungen an die eigenen Gegebenheiten einzusetzen! Die Kommentare sind absichtlich sehr spaerlich, da sie bei einem so kleinen Skript schnell dazu fuehren, dass man es einsetzt, ohne es genau durchdacht zu haben.
#!/bin/bash
USER=XXX
PASS=XXX
SERVER=backupXX.pureserver.info
LOCAL=/root/backup/duplicity
REMOTE=duplicity
# Remote-Verzeichnis einlesen
ncftp -u $USER -p $PASS $SERVER >_tmp.remote_dir <<EOF
dir $REMOTE
EOF
# ACHTUNG: An die Ausgabe von ls anpassen!
# ($9 bei mir im cron; $8 auf der Konsole)
ls -l $LOCAL | grep 'duplicity-' | awk '{print $5" "$9}' > _tmp.local_files
grep 'duplicity-' _tmp.remote_dir | awk '{print $5" "$9}' > _tmp.remote_files
echo "ncftp -u $USER -p $PASS $SERVER <<EOF" > _tmp.ncftp_cmd
echo "cd $REMOTE" >> _tmp.ncftp_cmd
echo "lcd $LOCAL" >> _tmp.ncftp_cmd
grep -vf _tmp.local_files _tmp.remote_files | sed -e 's/^[^ ]*/rm/' >> _tmp.ncftp_cmd
grep -vf _tmp.remote_files _tmp.local_files | sed -e 's/^[^ ]*/put/' >> _tmp.ncftp_cmd
echo "EOF" >> _tmp.ncftp_cmd
. _tmp.ncftp_cmd
rm _tmp.remote_dir
rm _tmp.local_files
rm _tmp.remote_files
rm _tmp.ncftp_cmd
June 30th, 2006 at 14:00
… na nur gut, das jeder das Rad neu erfindet…
Ich kenn da einen lieben (meist) netten MUD-Erzi, der sich vor Jahren mal mit genau dem Problem im Rahmen eines Drittfirmenprojektes beschäftigt hat.
Das funktionierte wenigstens effektiv *duck*
G.
June 30th, 2006 at 14:14
Das Drittfirmenprojekt ist aber nicht effizient(!) bei Google zu finden, waehrend mein Skript nach eigenem Ermessen ueberaus effektiv(!) ist.
scnr.
June 30th, 2006 at 15:12
das nächste Mal einfach mal die Zähne auseinander ;)
G.
June 30th, 2006 at 15:19
Aus den 101 Machoregeln:
Ausserdem denke ich, dass es Raffi so weniger Zeit und Aerger gekostet hat..
June 30th, 2006 at 17:32
Tokkiliebes, Du luegst ja auch wie gedruckt.
Denn denken kannst Du, wie wir alle wissen, ja gar nicht ;)
G.
June 30th, 2006 at 17:45
Stimmt, mit dem Denken ist es bei mir nicht weit her. Das ueberlasse ich lieber den Pferden, aus altbekanntem Grund.
Seit neuestem habe ich aber wissen gelernt. Lust auf ‘ne Kostprobe? Gut:
Ich weiss, wer so schnell von mit keine Crêpes bekommt!
*harr*
Und das Sprichwort “wie gedruckt luegen” kommt sicherlich von der B*LD und damit moechte ich nun wirklich nicht in Verbindung gebracht werden.
June 30th, 2006 at 19:33
nö, die Bild macht Nachrichten für ihre Leser.
Und die vertragen die nicht.
Da aber Raffi kein Macho sondern ein irgendwie liebenswerter Kerl ist, war das Angebot EHRLICH gemeint.
G.
June 30th, 2006 at 20:37
Jetzt bin ich geruehrt. Und du scheinst auf deine alten Tage doch noch weich zu werden – oder wirklich dringend Urlaub zu benoetigen.
PS: Eigentlich wollte ich in deinem Kommentar nur den Link reparieren, der sich etwas zu weit ausgebreitet hat. Danach waren die Umlaute im Eimer und zum Schluss der Link ganz unbrauchbar. Ich hoffe, ich habe jetzt alles wieder korrekt hergestellt (bis auf den zu langen Link); das Wort “Wahrheit” scheint zu fehlen, aber ich aendere die Aussagen anderer sicher nicht ohne ihr Einverstaendnis. :)
June 30th, 2006 at 21:55
G. wrote:
ACK!
June 30th, 2006 at 23:05
Diesmal bin ich schon nach einem Absatz drauf gekommen, dass der Eintrag von Raffi ist. Toks Einträge sind literarisch wertvoller :)
June 30th, 2006 at 23:12
*in die Ecke stell und schmoll*