Logo

Backup

Nach­dem mir mein eigens geschriebenes Perl-Script (Code am Ende) zum Kopieren meiner wichtig­sten Daten etwas langsam erscheint und vor allem den gewalti­gen Nachteil hat, dass es nur kopiert, die Daten aber nicht auf Exis­tenz prüft, ver­suche ich mich an rsync.

Das Script funk­tion­iert nun fol­gendermaßen:

  • es muss mit root-Rechten ges­tartet werden
  • es muss eine Option –t ziel übergeben wer­den, wo das Back­upverze­ich­nis später liegen soll
  • es kann eine Option –f übergeben wer­den, was durch den Ein­satz von rsync allerd­ings überflüs­sig gewor­den ist, da mit dieser Option ein bere­its beste­hen­des Back­upverze­ich­nis gelöscht wer­den sollte, falls sich das mal zugemüllt haben sollte
  • es kann ein eigener Name für das Backup vergeben wer­den, per Default heißt es backup. Es kann auch das aktuelle Datum aus­gewählt wer­den. Zur Hilfe zeigt das Script die vorhan­de­nen Ord­ner im ziel an.
  • im Script wer­den zwei Arrays in der Sub­rou­tine Kopiere_dateien definiert:

    • @config_files

      • hier sollen die Kon­fig­u­ra­tions­dateien einge­tra­gen werden

    • @backup_files

      • hier kön­nen alle anderen Dateien und Ord­ner, die zu sich­ern sind, einge­tra­gen werden

  • falls im ziel keine Unterord­ner vorhan­den sind, geht das Script davon aus, dass es sich um ein nicht einge­hange­nes USB-Medium han­dlest und fragt nach, ob es es moun­ten soll
  • am Ende zeigt es die benötigte Zeit an

rsync

Auf den ersten Blick scheint das Tool alles zu kön­nen, was ich für meine Zwecke benötige:

  • Kopieren von Unterverzeichnissen
  • Beibehal­ten von Rechten
  • Beibehal­ten des Besitzers
  • auss­chließliches Backup geän­derter Daten

Außer­dem bietet das Tool auch ein grafis­ches Back­end, welches ich eigentlich nich nutzen will. Stattdessen will ich ver­suchen, rsync in das schon beste­hende Perl-Script einzubinden.

Wie ich ger­ade her­aus­finde, gibts auch ein CPAN-Modul, namens File::Rsync, allerdinsg müsste das erst instal­liert wer­den. Somit ist das Pro­gramm nicht auf jedem Ubuntu-Rechner mit Default­in­stal­la­tion benutzbar.

Ich werde rsync mit fol­gen­den Para­me­tern starten:

  1. –a; das ist ein Art Meta­pa­ra­me­ter, der den Archiv­modus aktiviert
    1. –r = rekursiv
    2. –l = kopiert sym­bol­is­che Links als sym­bol­is­che Links
    3. –p = bewahrt Rechte
    4. –t = bewahrt Zeiten
    5. –g = bewahrt Gruppen
    6. –o = bewahrt den Besitzer, nur wenn rsync mit root-Rechten ges­tartet wurde
    7. –D = bewahrt Geräte­dateien, nur wenn rsync mit root-Rechten ges­tartet wurde
  2. –v = ver­bose; ich will ja sehen, was ger­ade passiert
  3. –delete = löscht die Dateien im Zielverze­ich­nis, die auch im Quel­lverze­ich­nis gelöscht wur­den (quasi die Funk­tion, die Stein des Anstoßes war)

Da rsync nur die Daten kopieren kann, auf die der aufrufende Benutzer zugreifen darf, werde ich das Pro­gramm nur mit root-Rechten starten.

Langes Schreiben und Lesen, kurze Änderung im Script:

Den Sys­temaufruf zum Kopieren ersetze ich durch

  • rsync –av –delete

Ich werde später noch Verbesserun­gen am Pro­gramm vornehmen, die mir auch mit Hilfe von Para­me­tern erlauben wer­den, ein Backup auf ent­fer­nte Rech­ner zu täti­gen und auch die Daten aus einem Kon­fig­u­ra­tions­file auszule­sen. Darüber werde ich dann später berichten.

Jetzt habe ich das Script nach eini­gen Tests angestoßen und werde es durch­laufen lassen. Das kann bei der Daten­menge noch eine Weile dauern…

…einige Zeit später

Habe ger­ade fest­gestellt, dass ich Stun­den meines Lebens fast unnütz mit Warten ver­bracht habe. Da ich in der rsync–Schleife einige “/” am Ende zuviel hatte, hat rsync die neu zu kopieren­den Ord­ner mit den bere­its kopierten ver­glichen und immer wieder gelöscht. Zum Schluss hatte ich dann nur noch den Inhalt des let­ztens Ord­ners, der im Sicherungsar­ray stand.

Ver­such macht kluch Wink

Dafür hab ich noch schnell die Abfrage ob root oder nicht einge­baut und einige kleine Fehler ausgemerzt.

Und weiter gehts…

…40 min später

einige Testläufe ver­liefen her­vor­ra­gend, so dass ich das Script natür­lich in abgeän­derter Form als Cron­job einsetze.

Zusam­men­fas­sung

rsync ist echt ein­fach, hätte mich gle­ich am Anfang damit befassen sollen.

Hier gehts zum Script

Geschrieben am 24.12.2007 von Sven in Programmieren · Kommentare deaktiviert
Weder Pings noch Kommentare sind erlaubt.

Kommentare sind geschlossen.


Diese Seite und ihr Inhalt unterliegen, sofern nicht anders gekennzeichnet, einer Creative Commons-Lizenz.
cclicense
top