Rsnapshot: Komplettes Systembackup
Rsnapshot. Weil alt, stabil, transparent.
Inkrementell für immer.
Rsnapshot nutzt unter der Haube rsync, es dedupliziert mehrfach vorkommende Dateien auf Dateisystemebene mittels Hard-Links, einem Feature, dass seit einiger Zeit auch in rsync direkt eingebaut ist. Im Grunde genommen ist es ein Wrapper um rsync.
Das schöne ist, man bekommt wirklich eine ganz normale Ordnerstruktur, in denen die Dateien von den jeweils letzten stündlichen, täglichen, wöchentlichen, usw. Backups liegen.
Ich brauche
Jedoch gibt es schon genug Informationen dort draußen, was rsnapshot angeht, darum beschränke ich mich hier auf das Wesentliche.
In meiner rsnapshot.conf habe ich folgende Änderungen vorgenommen:
hilft, denn rsnapshot aktzeptiert ausschließlich TABs als Trennzeichen. Verzeichnisse müssen mit
Bei Verwendung von sync_first, was Konsistenz der Backups im Falle einer Unterbrechung garantiert, muss der kleinste rsync Intervall, z.B. "hourly", mit "sync" ausgeführt werden:
Schließlich wäre es unschön, wenn im Fehlerfall Backups wegrotiert werden.
Normalerweise steht rsnapshot im Crontab, nur ist das bei einem Desktop-Rechner etwas unpraktisch, da er schlicht nicht 24/7 durchläuft.
Eine Lösung ist es, die Zeitangaben relativ zu machen, so dass das Skript periodisch aufgerufen werden kann, statt zu fixen Zeiten:
Download
Um die Größe des aktuellen Snapshots anzuzeigen, kann
Im rsnapshot Verzeichnis:
Daraus folgt, dass ich aus jedem Verzeichnis die Größe der darin geänderten, nicht schon anderswo redundant durch Hardlinks abgelegten Dateien erhalte.
Zu guter Letzt muss aber auch gesagt werden, rsnapshot eignet sich nicht für alles. Man bedenke nur VM-Images, mehrere Gigabyte große Dateien, die bei der kleinsten Änderung noch einmal komplett synchronisiert werden müssen.
Nichtsdestotroz lässt rsnapshot auch Skripte ausführen, in denen z.B. ein MySQL-Dump erzeugt werden kann.
Ich würde wichtige Backups (Schreibzugriffe, Datenbank, etc) immer mit LVM-Snapshots realisieren, das Backup vom konsistenten Snapshot aus durchführen.
Weiter:
Rsnapshot verschlüsselt über's Netzwerk nutzen
Inkrementell für immer.
Rsnapshot nutzt unter der Haube rsync, es dedupliziert mehrfach vorkommende Dateien auf Dateisystemebene mittels Hard-Links, einem Feature, dass seit einiger Zeit auch in rsync direkt eingebaut ist. Im Grunde genommen ist es ein Wrapper um rsync.
Das schöne ist, man bekommt wirklich eine ganz normale Ordnerstruktur, in denen die Dateien von den jeweils letzten stündlichen, täglichen, wöchentlichen, usw. Backups liegen.
Ich brauche
rsnapshot
nicht, um wieder an die Backups heranzukommen. Jedoch gibt es schon genug Informationen dort draußen, was rsnapshot angeht, darum beschränke ich mich hier auf das Wesentliche.
In meiner rsnapshot.conf habe ich folgende Änderungen vorgenommen:
snapshot_root /external_drive/
no_create_root 1
cmd_du /usr/bin/du
exclude /home/*/.cache/**
exclude /dev/**
exclude /proc/**
exclude /sys/**
exclude /tmp/**
exclude /run/**
exclude /mnt/**
exclude /media/**
exclude /lost+found
link_dest 1
sync_first 1
###############################
### BACKUP POINTS / SCRIPTS ###
###############################
# LOCALHOST
backup / some_prefix/
rsnapshot configtest
hilft, denn rsnapshot aktzeptiert ausschließlich TABs als Trennzeichen. Verzeichnisse müssen mit
/
enden.Bei Verwendung von sync_first, was Konsistenz der Backups im Falle einer Unterbrechung garantiert, muss der kleinste rsync Intervall, z.B. "hourly", mit "sync" ausgeführt werden:
/usr/bin/rsnapshot sync && /usr/bin/rsnapshot hourly
Schließlich wäre es unschön, wenn im Fehlerfall Backups wegrotiert werden.
Normalerweise steht rsnapshot im Crontab, nur ist das bei einem Desktop-Rechner etwas unpraktisch, da er schlicht nicht 24/7 durchläuft.
Eine Lösung ist es, die Zeitangaben relativ zu machen, so dass das Skript periodisch aufgerufen werden kann, statt zu fixen Zeiten:
Download
#!/bin/bash
cd "$(dirname "$0")"
# parameters:
# target seconds
# target: daily, hourly etc
# minutes: trigger rsnapshot with target if last run was >seconds ago
function rsnapshot-desktop () {
if [ ! -e $1.lastrun ]; then
echo "initialise $1"
touch -t 200001010101.00 $1.lastrun
fi
if (( $(date +%s) - $(stat -c%Y $1.lastrun) >= $2 )); then
echo "running rsnapshot $1"
echo > $1.lastrun
return $(rsnapshot $1)
fi
return 0
}
while pgrep rsync; do
exit 1
done
rsnapshot-desktop sync 0 && \
rsnapshot-desktop hourly 3600 && \
rsnapshot-desktop daily 86400 && \
rsnapshot-desktop weekly 604800 && \
rsnapshot-desktop monthly 2592000 && \
echo done
Um die Größe des aktuellen Snapshots anzuzeigen, kann
du
benutzt werden:Im rsnapshot Verzeichnis:
du -sh .
30G .
du -shl
98G .
du -sh .sync $(ls)
22G .sync
1.7G daily.3
2.9G daily.4
1.6G daily.5
122M hourly.0
129M hourly.1
1.6G weekly.0
du
zählt Hardlinks nur einmal, oder mit dem l
Parameter jedes mal.Daraus folgt, dass ich aus jedem Verzeichnis die Größe der darin geänderten, nicht schon anderswo redundant durch Hardlinks abgelegten Dateien erhalte.
Zu guter Letzt muss aber auch gesagt werden, rsnapshot eignet sich nicht für alles. Man bedenke nur VM-Images, mehrere Gigabyte große Dateien, die bei der kleinsten Änderung noch einmal komplett synchronisiert werden müssen.
Nichtsdestotroz lässt rsnapshot auch Skripte ausführen, in denen z.B. ein MySQL-Dump erzeugt werden kann.
Ich würde wichtige Backups (Schreibzugriffe, Datenbank, etc) immer mit LVM-Snapshots realisieren, das Backup vom konsistenten Snapshot aus durchführen.
Weiter:
Rsnapshot verschlüsselt über's Netzwerk nutzen