30.6.2006

Bashen fuer Anfaenger

Posted in Chaos & Illusion at 13:26 by Rafayel

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

11 Responses to “Bashen fuer Anfaenger”

  1. G. Says:

    … 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.

  2. Rafayel Says:

    Das Drittfirmenprojekt ist aber nicht effizient(!) bei Google zu finden, waehrend mein Skript nach eigenem Ermessen ueberaus effektiv(!) ist.

    scnr.

  3. G. Says:

    das nächste Mal einfach mal die Zähne auseinander ;)

    G.

  4. Tokbela Says:

    Aus den 101 Machoregeln:

    Frag niemals nach Hilfe. Auch wenn Du wirklich dringend Hilfe brauchst – frag nicht danach. Sonst denken alle, dass Du keinen Penis hast.

    Ausserdem denke ich, dass es Raffi so weniger Zeit und Aerger gekostet hat..

  5. G. Says:

    Tokkiliebes, Du luegst ja auch wie gedruckt.
    Denn denken kannst Du, wie wir alle wissen, ja gar nicht ;)
    G.

  6. Tokbela Says:

    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.

  7. G. Says:

    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.

  8. Rafayel Says:

    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. :)

  9. Tokbela Says:

    G. wrote:

    Da aber Raffi kein Macho sondern ein irgendwie liebenswerter Kerl ist

    ACK!

  10. drosi Says:

    Diesmal bin ich schon nach einem Absatz drauf gekommen, dass der Eintrag von Raffi ist. Toks Einträge sind literarisch wertvoller :)

  11. Rafayel Says:

    *in die Ecke stell und schmoll*

Leave a Reply

You must be logged in to post a comment.