Backup mit rsync

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche

Zielsetzung

Das Script ScriptBackupWithRsync dient dazu, ausgewählte Verzeichnisse (mit Unterverzeichnissen) zu sichern. Dabei steht im Vordergrund, gelöschte oder geänderte Dateien wiederherzustellen bzw. zum Vergleich zur Verfügung zu haben. Das kann zwar ein Versionskontrollsystem auch (sogar besser), aber das Script arbeitet vollautomatisch (kein Einchecken nötig...) Es gilt also, möglichst viele Sicherungen mit möglichst wenig Platzbedarf zu verwalten.

Einsatzbeispiel

Bei mir sichert das Script die Verzeichnisse /home und /etc. Der Platzbedarf der Verzeichnisse beträgt etwa 2.8 GByte. Gesichert wird:

  • Alle 30 Minuten (wobei davon die letzten 4 Versionen aufgehoben werden)
  • jeden Wochentag (7 Versionen)
  • jede Woche (52 Versionen)
  • Jeden Monat (beliebig viele Versionen)

Meine Sicherungspartition enthält etwa 70 Versionen, Platzbedarf etwa 6 GByte

Voraussetzungen

Als Sicherungsmedium dient eine eigene Partition. Aus Sicherheitsgründen sollte diese auf einer anderen Platte als die Originaldaten sein, da sonst beim einem Ausfall der Platte alles verschwindet. Das Dateisystem der Sicherungspartition muss "Hardlinks" erlauben, geeignet sind also "Linux-Typen" ext3, reiserfs, XFS ..., nicht aber vfat, ntfs. Benutzt werden die Programme sh, rsync und cron und anacron.

Das Funktionsprinzip

Das Zielverzeichnis enthält eine Kopie der Orginaldaten im Unterverzeichnis arch.0 rsync wird benutzt, diesen Dateibaum effizient abzugleichen: Nur geänderte Dateien werden kopiert, andererseits werden nicht mehr vorhandene Dateien im Zielverzeichnis gelöscht (Option --delete). Wird eine neue Version erstellt, wird dieses Backupverzeichnis in das versionspezifische Verzeichnis kopiert, wobei das Kopieren mit Hardlinks erfolgt: Damit wird nur der Verzeichniseintrag der Datei kopiert, beide Verzeichniseinträge verweisen auf die gleichen Datenblöcke. (Gelöscht werden die Datenblöcke erst, wenn es keinen zugehörigen Verzeichniseintrag mehr gibt.) Daraus ergibt sich die große Platzersparnis: Da sich die meisten Dateien von einer Version zur nächsten nicht ändern, ist der zusätzliche Platzbedarf nur der der geänderten/neuen Dateien und die Verzeichniseinträge.

Installation

Das Script in /usr/local/bin speichern. Das Programm cron sorgt für automatischen Aufruf alle 30 Minuten, anacron für den täglichen, wöchentlichen, monatlichen Aufruf:

apt-get install anacron
echo <<EOS >>/etc/anacrontab
1 10  jonny.arch.day   nice -n 19 /usr/local/bin/arch_rotate.sh -q day /home/jonny/arch_jonny.dat
7 20  jonny.arch.week  nice -n 19  /usr/local/bin/arch_rotate.sh -q week /home/jonny/arch_jonny.dat
EOS
echo "Eintrag der folgenden Zeile:"
echo "*/30 * * * * /usr/local/bin/std/mk_arch.sh -q /home/jonny/arch_jonny.dat"
read
crontab -e

Konfiguration

Das Script ist für Multiuser-/Multihostbetrieb vorgesehen, bezieht die umgebungsspezifischen Daten aus einer externen Datei /home/jonny/arch_jonny. Beispiel der Datei:

#!/bin/sh
# Die Sicherungspartition:
MOUNT_DEVICE=/dev/sda12
# Das Mount-Verzeichnis, das zum Schreiben benutzt wird.
ARCH_RW=/arch
# Datei, die Dateinamen/muster enthält, die nicht gesichert werden:
EXCLUDES=/home/bin/$HOST/arch_exclude.lst
# Verzeichnisse, die gesichert werden, mit Leerzeichen getrennt:
DIR_TO_SAVE="/home /etc /boot/grub"
# Vorspann des Verzeichnisnamens der Sicherung, wird mit .0, .1... ergänzt, die 30-Minuten-Sicherungen heißen also arch.0, arch.1 ...
DIR_HOURLY=arch

Mit der Datei arch_exclude.lst können Verzeichnisse und Dateien von der Sicherung ausgeschlossen werden.

Hier ein Beispiel:

/home/backup
.mozilla/**/Cache/
.cache/
tmp/
*~
*.bak
.#*

Anmerkungen zum Script

Hinweis.png Das Sicherungsverzeichnis sollte "nur-lesend" eingebunden werden. Das Script meldet automatisch zum Schreiben an.

Scripts