Logo

Backup

Nach­dem mir mein eigens geschrie­be­nes Perl-Script (Code am Ende) zum Kopie­ren mei­ner wich­tigs­ten Daten etwas lang­sam erscheint und vor allem den gewal­ti­gen Nach­teil hat, dass es nur kopiert, die Daten aber nicht auf Exis­tenz prüft, ver­su­che ich mich an rsync.

Das Script funk­tio­niert nun fol­genderma­ßen:

  • es muss mit root-Rechten gestar­tet werden
  • es muss eine Option -t ziel über­ge­ben wer­den, wo das Back­up­ver­zeich­nis spä­ter lie­gen soll
  • es kann eine Option -f über­ge­ben wer­den, was durch den Ein­satz von rsync aller­dings über­flüs­sig gewor­den ist, da mit die­ser Option ein bereits beste­hen­des Back­up­ver­zeich­nis gelöscht wer­den sollte, falls sich das mal zuge­müllt haben sollte
  • es kann ein eige­ner Name für das Backup ver­ge­ben wer­den, per Default heißt es backup. Es kann auch das aktu­elle Datum aus­ge­wählt wer­den. Zur Hilfe zeigt das Script die vor­han­de­nen Ord­ner im ziel an.
  • im Script wer­den zwei Arrays in der Sub­rou­tine Kopiere_dateien defi­niert:

    • @config_files

      • hier sol­len die Kon­fi­gu­ra­ti­ons­da­teien ein­ge­tra­gen werden

    • @backup_files

      • hier kön­nen alle ande­ren Dateien und Ord­ner, die zu sichern sind, ein­ge­tra­gen werden

  • falls im ziel keine Unter­ord­ner vor­han­den sind, geht das Script davon aus, dass es sich um ein nicht ein­ge­han­ge­nes USB-Medium hand­lest und fragt nach, ob es es moun­ten soll
  • am Ende zeigt es die benö­tigte Zeit an

rsync

Auf den ers­ten Blick scheint das Tool alles zu kön­nen, was ich für meine Zwe­cke benötige:

  • Kopie­ren von Unterverzeichnissen
  • Bei­be­hal­ten von Rechten
  • Bei­be­hal­ten des Besitzers
  • aus­schließ­li­ches Backup geän­der­ter Daten

Außer­dem bie­tet das Tool auch ein gra­fi­sches Backend, wel­ches ich eigent­lich nich nut­zen will. Statt­des­sen will ich ver­su­chen, rsync in das schon beste­hende Perl-Script einzubinden.

Wie ich gerade her­aus­finde, gibts auch ein CPAN-Modul, namens File::Rsync, allerd­insg müsste das erst instal­liert wer­den. Somit ist das Pro­gramm nicht auf jedem Ubuntu-Rechner mit Defaul­t­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­mo­dus aktiviert
    1. -r = rekursiv
    2. -l = kopiert sym­bo­li­sche Links als sym­bo­li­sche Links
    3. -p = bewahrt Rechte
    4. -t = bewahrt Zeiten
    5. -g = bewahrt Gruppen
    6. -o = bewahrt den Besit­zer, nur wenn rsync mit root-Rechten gestar­tet wurde
    7. -D = bewahrt Gerä­te­da­teien, nur wenn rsync mit root-Rechten gestar­tet wurde
  2. -v = ver­bose; ich will ja sehen, was gerade passiert
  3. --delete = löscht die Dateien im Ziel­ver­zeich­nis, die auch im Quell­ver­zeich­nis gelöscht wur­den (quasi die Funk­tion, die Stein des Ansto­ßes war)

Da rsync nur die Daten kopie­ren kann, auf die der auf­ru­fende Benut­zer zugrei­fen darf, werde ich das Pro­gramm nur mit root-Rechten starten.

Lan­ges Schrei­ben und Lesen, kurze Ände­rung im Script:

Den Sys­tem­auf­ruf zum Kopie­ren ersetze ich durch

  • rsync -av --delete

Ich werde spä­ter noch Ver­bes­se­run­gen am Pro­gramm vor­neh­men, die mir auch mit Hilfe von Para­me­tern erlau­ben wer­den, ein Backup auf ent­fernte Rech­ner zu täti­gen und auch die Daten aus einem Kon­fi­gu­ra­ti­ons­file aus­zu­le­sen. Dar­über werde ich dann spä­ter berichten.

Jetzt habe ich das Script nach eini­gen Tests ange­sto­ßen und werde es durch­lau­fen las­sen. Das kann bei der Daten­menge noch eine Weile dauern…

…einige Zeit später

Habe gerade fest­ge­stellt, dass ich Stun­den mei­nes Lebens fast unnütz mit War­ten ver­bracht habe. Da ich in der rsync-Schleife einige “/” am Ende zuviel hatte, hat rsync die neu zu kopie­ren­den Ord­ner mit den bereits kopier­ten ver­gli­chen und immer wie­der gelöscht. Zum Schluss hatte ich dann nur noch den Inhalt des letz­tens Ord­ners, der im Siche­rungs­ar­ray stand.

Ver­such macht kluch Wink

Dafür hab ich noch schnell die Abfrage ob root oder nicht ein­ge­baut und einige kleine Feh­ler ausgemerzt.

Und wei­ter gehts…

…40 min spä­ter

einige Test­läufe ver­lie­fen her­vor­ra­gend, so dass ich das Script natür­lich in abge­än­der­ter Form als Cron­job einsetze.

Zusam­men­fas­sung

rsync ist echt ein­fach, hätte mich gleich am Anfang damit befas­sen 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

Dieser Blog benutzt das großartige WordPress.

top