Ich mache meine Backups
nun nicht mehr mit dem Bash-Skript aus dem UU-Wiki, sondern nutze dafür
ccollect
, das von Nico Schottelius programmiert wurde.
ccollect
ist ein in sh
geschriebenes Programm, das durch rsnapshot
inspiriert wurde. Aufmerksam wurde ich durch
die Sendung RadioTux Talk 144: RAID0 ====== Backup.
Installation
Das Programm ist eigentlich sehr einfach zu installieren, wenn man Arch Linux nutzt und somit Zugriff auf die Pakete im AUR hat. Denn hier gibt es das gleichnamige Paket. Die Installation ist wie gewohnt einfach:
$ yaourt -S ccollect
Während der Installation würde ich empfehlen in das PKGBUILD
zu schauen.
sh PKGBUILD (Auszug)
pkgname=ccollect
pkgver=0.8
pkgrel=2
pkgdesc="(pseudo) incremental backup with different exclude lists using hardlinks and rsync"
arch=('any')
url="http://www.nico.schottelius.org/software/ccollect/"
license=('GPL3')
depends=('rsync')
makedepends=('asciidoc')
source=(http://www.nico.schottelius.org/software/$pkgname/download/$pkgname-$pkgver.tar.bz2)
md5sums=('4b7e0fb9c8d1ae989582d2020996fa67')
Daraus erkennt man, dass rsync
eine Abhängigkeit ist, das bei Nichtvorhandensein nachinstalliert wird. Nach dem
Kompilieren und Installieren des Programms ist es bereit für die Konfiguration.
Tipp: In meinem Fall brauchte ich das Paket asciidoc
nicht mehr. Dieses kann deinstalliert werden:
# pacman -Ru asciidoc
Konfiguration
Die Konfiguration des Programms ist gewöhnungsbedürftig, hat aber ihren Scharm. Also ich finde es nicht schlecht.
Zuerst möchte ich euch das Konfigurationsverzeichnis zeigen. Hierbei sieht man, dass für jeden Backupjob ein
source
-Verzeichnis erstellt wird. In diesem sind die unterschiedlichen Einstellungen in verschiedenen Dateien
verwaltet.
``` text Inhalt von /etc/ccollect
/etc/ccollect/
├── defaults
│ └── intervals
│ ├── daily
│ ├── media
│ ├── monthly
│ ├── once
│ ├── sys
│ └── weekly
└── sources
└── home
├── destination
├── exclude
├── post_exec -> /home/dsiw/bin/sys/mount/umountwd
├── pre_exec -> /home/dsiw/bin/sys/mount/mountwd
├── quiet_if_down
├── rsync_failure_codes
├── source
└── summary
```
Intervalle
Der Inhalt der Dateien im Ordner defaults/intervals/
ist folgender und beschreibt die Anzahl der Backups, die
nicht gelöscht werden sollen. Erst wenn die Anzahl die vorgeschriebene Anzahl überschritten wird, werden die ältesten
Backups automatisch gelöscht.
Der Inhalt der Intervall-Dateien:
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
Quelle (mit Ausschluss) und Ziel
In der Datei source
wird der Pfad zu dem Verzeichnis angegeben, das gesichert werden soll. Leider habe ich bis jetzt
keine Möglichkeit gefunden, mehrere Pfad in der Datei source
anzugeben. Deswegen hat meine exclude
-Datei entsprechend
viele Einträge (siehe unten).
Update vom 2012-07-15: Ich hatte deswegen den Autoren des Skript angeschrieben. Er meinte, dass man keine mehreren
Dateien in der Datei source
eintragen kann. Das ist aber nicht weiter tragisch, denn ich habe eine andere Möglichkeit
gefunden, wie man die unendlich vielen auszuschließenden Dateien auf einfache Weise los wird. Dies ist weiter unten
beschrieben.
1
|
|
Meine Pfade, die gesichert werden, sind folgende. Eigentlich sollten diese in der Datei source
stehen.
/usr/local/bin
/usr/local/sbin
/bin
/home
/etc
/opt
/boot
/var/log
/var/mail
/var/www
/var/lib/mysql
In der folgenden Datei sind alle Pfade angegeben, die nicht gesichert werden sollen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Update vom 2012-07-15: Im
RSYNC-Artikel vom Ubuntuusers-Wiki
wird eine Möglichkeit gezeigt, wie mehrere Dateien ausgeschlossen werden können, ohne diese explizit anzugeben. Es wird mit
Wildcards gearbeitet, somit sieht meine neue exclude
folgendermaßen aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Ich musste ein bisschen herumexperimentieren, damit alle gewünschten Verzeichnisse gesichert werden. Dadurch ist mir aufgefallen, dass ich bei Unterordnern spezielle Pfade ein- und ausschließen muss, damit es funktioniert:
sh Generisch
+ /.../to # Pre
+ /.../to/backup # Dieser Pfad soll gesichert werden.
- /.../to/* # Post
Bei dem folgenden Beispiel soll nur der Pfad /var/lib/mysql
gesichert werden, alle anderen Pfade werden
ausgeschlossen.
diff Beispiel: Einschließen nur von /var/lib/mysql und Ausschließen aller anderen
+ /var
+ /var/lib
+ /var/lib/mysql
- /var/lib/*
- /var/*
- /*
Hier erkennt man gut, dass das spezielle Ein- und Ausschließen für jede Pfad-Komponente gemacht werden muss.
Ich habe den folgenden Befehl genutzt, um die Datei exclude
mit den richtigen Einträgen zu füllen:
/etc/ccollect/sources/home# rsync -apv --dry-run --exclude-from=exclude / /media/backup/test
In der Datei destination
ist der Pfad enthalten, wo die Backups gespeichert werden sollen:
1
|
|
Wie man im Baum sehen kann, sind pre_exec
und post_exec
symbolische Links zu meinen beiden Skripten, die das Mounten
und Unmounten meiner externen Festplatte steuern. Die Platte wird unter /media/backup
gemounted -- deswegen auch der
Inhalt in destination
.
Funktionen
Die leeren Dateien quiet_if_down
, summary
und rsync_failure_codes
werden zum Aktivieren von Funktionen
benötigt. Möchte man diese nicht nutzen, dann können die Dateien ohne Probleme gelöscht werden.
pre_exec
program to execute before backing up this sourcepost_exec
program to execute after backing up this sourceverbose
whether to be verbose (passes-v
torsync
)very_verbose
be very verbose (mkdir -v
,rm -v
andrsync -vv
)summary
create a transfer summary when rsync finishedexclude
exclude list for rsync. newline seperated list.rsync_options
extra options for rsync. newline seperated list.delete_incomplete
delete incomplete backupsremote_host
host to backup torsync_failure_codes
list of rsync exit codes that indicate complete failuremtime
Sort backup directories based on their modification timequiet_if_down
Suppress error messages if source is not connectable
Quelle: Dokumentation
Starten des Backups
Zum Starten von ccollect
nutze ich ein kleines Skript. Die Verzweigung stellt sicher, dass das Skript mit Superuser-Rechten
gestartet wurde.
1 2 3 4 |
|
Fazit
Ich bin mit der neuen Variante des Sichern von Dateien recht zufrieden. Leider können keine mehreren Pfade als Quelle
angegeben werden. Dies liegt aber, glaube ich, an rsync
. Vielleicht sollte ich mehrere Backupjobs anlegen, wobei das
auch nicht eine komfortable Variante ist.
Wenn man nur sein Home-Verzeichnis sichern möchte, ist dies eine sehr schön Variante. Ich bleibe erstmal dabei.