Subversion Repository inkrementell mit Hilfe eines Cron-Jobs sichern
Jeder, der ein umfangreicheres Repository zur Softwareentwicklung pflegt, kennt die Probleme der Datensicherung.
Um die Sicherungen nicht unnötig anwachsen zu lassen, empfiehlt sich eine inkrementelle Sicherung.
Anhand eines Shell-Skriptes zeigen wir, wie diese Aufgabe bewerkstelligt werden kann.
Das Shell-Skript kann wochenweise durch den Cron Daemon aufgerufen werden.
Nach einer erfolgreichen Sicherung kann das Backupverzeichnis mittels rsync auf einen anderen Server repliziert werden.
Somit erreicht man eine höchstmögliche Sicherheit und Redundanz für seinen Quellcode.
Das svn-backup-script erzeugt Dateieinträge, die mit den entsprechenden Revisionsnummern gekennzeichnet sind.
2007-08-07 22:19 svn_mysoftware_backup_r0-499.tar.gz 2007-08-07 22:19 svn_mysoftware_backup_r500-799.tar.gz 2007-08-26 06:47 svn_mysoftware_backup_r1012-1025_070826.tar.gz 2007-09-02 06:47 svn_mysoftware_backup_r1026-1057_070902.tar.gz 2007-09-09 06:47 svn_mysoftware_backup_r1058-1079_070909.tar.gz 2007-09-16 06:47 svn_mysoftware_backup_r1080-1083_070916.tar.gz
Die letzte Revisions-Nr. wird in die Datei last_dumped_revision_mysoftware geschrieben.
Wie funktioniert das Skript?
Das Skript ist für die Bash geschrieben.
Zuerst werden die benötigen Variablen deklariert.
Wir benötigen das Datum sowie 2 Variablen für die aktuelle Revsions-Nr. (revid) und die zuletzt gesicherte Revisions-Nr. (lastid).
#!/bin/bash #set -x Dat=`date +%y%m%d` declare -i revid=0 declare -i lastid=0
Die revid Variable wird mit der Revisionsnummer aus der Datei last_dumped_revision_mysoftware belegt.
revid=`cat /var/data/backup/svn/last_dumped_revision_mysoftware`
Den Revisionsstand des Repositorys fragen wir mittels eines subversion Kommandos ab und weisen den Wert der Variablen lastid zu.
Der Pfad “/var/subversion/mysoftware” muss auf das zu sichernde Repository zeigen.
lastid=`svnlook youngest /var/subversion/mysoftware`
Anschließend überprüfen wir, ob eine neuere Revision vorliegt (-gt = greater than).
if [ $lastid -gt $revid ]; then
Falls eine neuere Revision vorhanden ist, treten wir in die if-clause ein.
Als erstes wird die Variable revid inkrementiert.
revid=$(($revid+1))
Danach wird ein neuer Dump durch den Aufruf von "svnadmin dump" und fer Angabe der Revisionsnummern erzeugt.
svnadmin dump /var/subversion/mysoftware -r$revid:$lastid --incremental > `echo ''/var/data/backup/svn/svn_mysoftware_backup_r"$revid"-"$lastid"_"$Dat"''`
Um Platz zu sparen wird der neue Dump mit tar und gzip komprimiert..
tar -czf `echo ''/var/data/backup/svn/svn_mysoftware_backup_r"$revid"-"$lastid"_"$Dat".tar.gz''` `echo ''/var/data/backup/svn/svn_mysoftware_backup_r"$revid"-"$lastid"_"$Dat"''`
und die unkomprimierte Version gelöscht.
rm `echo ''/var/data/backup/svn/svn_mysoftware_backup_r"$revid"-"$lastid"_"$Dat"''`
Schlussendlich wird die letzte Revisionsnummer wieder in die Datei geschrieben.
echo $lastid > /var/data/backup/svn/last_dumped_revision_mysoftware fi #Ende der if clause
Das Skript zum Download
(Endung ändern in .sh)
Download Skript