Backups sind genauso wichtig wie das Programmieren. Wenn Sie bereits einen einzelnen Repository-Dump erstellen können (siehe unsere Anleitung), lässt sich der Prozess mit wenig Aufwand auf hunderte Repositories skalieren.
Skriptüberblick
Das Skript unten läuft durch jeden Ordner im SVN-Root, führt svnadmin dump aus und schreibt jedes Archiv in ein Zielverzeichnis. Legen Sie es dort ab, wo Sie Shell-Zugriff haben, geben Sie Ausführungsrechte und passen Sie wenige Variablen an.
Systemanforderungen
- Linux-Server mit Bash/POSIX-Shell
- Installiertes Subversion (
svnadmin-Pfad perwhereis svnadminprüfen) - Beschreibbares Verzeichnis für Dumps und genügend Speicherplatz
Legen Sie zuerst das Skript an und machen Sie es ausführbar:
root@server:~# touch multidump.sh
root@server:~# chmod +x multidump.sh
Kopieren Sie den folgenden Inhalt in multidump.sh und passen Sie die drei Variablen oben an Ihre Pfade an:
#!/bin/bash
REPO_BASE=/location/where/your/svn/root/folder/is/
TARGET=/location/of/storage/
SVNADMIN=/usr/bin/svnadmin
cd "$REPO_BASE"
for f in *; do
FILE="$TARGET$f.dump"
echo "Dump: $f => $FILE"
test -d "$f" && $SVNADMIN dump "$f" > "$FILE"
done
Ersetzen Sie REPO_BASE durch das Verzeichnis mit allen Repositories, TARGET durch Ihr Dump-Ziel und SVNADMIN durch den zuvor ermittelten absoluten Pfad.
Unterwegs komprimieren
Wenn Sie Speicherplatz sparen möchten, leiten Sie die Dump-Ausgabe in gzip. Die Struktur bleibt gleich, nur die Dateiendung ändert sich und der Komprimierbefehl kommt hinzu.
#!/bin/bash
REPO_BASE=/location/where/your/svn/root/folder/is/
TARGET=/location/of/storage/
SVNADMIN=/usr/bin/svnadmin
cd "$REPO_BASE"
for f in *; do
FILE="$TARGET$f.dump.gz"
echo "Dump: $f => $FILE"
test -d "$f" && $SVNADMIN dump "$f" | gzip -9 > "$FILE"
done
Führen Sie das Skript manuell aus oder planen Sie es per cron für nächtliche Backups. Sie können die Schleife auch erweitern, um alte Backups zu rotieren oder sie auf einen anderen Host zu kopieren.