Nur das reine Kopieren von Dateien zur Datensicherung ist zwar schon mal mehr als gar keine Kopie, aber noch schöner wäre es, wenn man unterschiedliche Stände der gesicherten Dateien hätte, so dass man versehentlich gelöschte Dateien auch über einen längeren Zeitraum wieder herstellen kann. Und mit Hardlinks kann man das sogar recht platzsparend erledigen.
Der Versuchsaufbau bleibt gleich zum Teil 1: es sollen die Daten aus dem Verzeichnis „/daten“ auf die externe Festplatte – gemountet unter „/backup“ – gesichert werden.
Lediglich die Verzeichnisstruktur passe ich unter „/backup“ etwas an.
Ich erzeuge zwei Verzeichnisse:
/backup/orig enthält die aktuell gesicherten Daten
/backup/save enthält mehrere Backupversionen, welche mit Hardlinks erzeugt wurden.
1 2 |
># mkdir /backup/orig ># mkdir /backup/save |
Der rsync-Befehl wird ebenfalls angepasst.
1 |
># rsync -a --delete-before /daten/ /backup/orig |
Angepasst wurde das Zielverzeichnis und der Parameter –delete-before.
Der Befehl –delete sorgt dafür, dass Dateien, welche im Quellverzeichnis „/daten“ gelöscht wurden, auch im Zielverzeichnis „/backup/orig“ gelöscht werden. Somit hat man zum Backupende immer genau den gleichen Stand zwischen dem Datei-Verzeichnis und dem Backup. Der Befehl –delete-before sorgt lediglich dafür, dass neue Dateien erst dann übertragen werden, wenn die, im Quellverzeichnis nicht mehr vorhandenen , Dateien im Zielverzeichnis gelöscht wurden. So kann es nicht passieren, dass die externe Backupfestplatte voll läuft, nur weil nicht mehr verwendete Dateien noch unnötig Platz darauf belegen.
Als nächstes erzeuge ich eine Kopie dieses neuen Backups in das Verzeichnis „/backup/save“ mit dem heutigem Datum.
Um Platz zu sparen, kopiere ich die Dateien jetzt nicht, sondern lasse Hardlinks erzeugen (siehe Beitrag Hardlinks und Hardlinks Linux)
Erzeugen des Backupverzeichnisses mit heutigem Datum:
1 |
># mkdir /backup/save/150414 |
Und erzeuge nun Hardlinks zu den Dateien in /backup/orig
1 |
># cp –rl /backup/orig/* /backup/save/150414 |
Führe ich nun den rsync-Befehl zu einem späteren Zeitpunkt erneut aus…
1 |
># rsync -a --delete-before /daten/ /backup/orig |
Werden alle geänderten, neuen und gelöschten Dateien abgeglichen und ich erhalte im Verzeichnis „/backup/orig“ wieder eine 1:1 Kopie aller Daten aus dem Verzeichnis „/daten“
Auch diesen Stand sichere ich wieder per Hardlinks in ein Verzeichnis mit heutigem Datum unter „/backup/save“
1 2 |
># mkdir /backup/save/150416 ># cp –rl /backup/orig/* /backup/save/150416 |
Was bringt das nun.
Wie im Beitrag Hardlinks erklärt, wird eine Datei erst dann gelöscht, wenn sie in keinem Verzeichnis mehr angezeigt werden soll. Beim ersten Backup kopiere ich die Daten physikalisch in das Verzeichnis „/backup/orig“ und benötige denmach den gleichen Platz, wie auf der Quellfestplatte (unbeachtet von Blockgrößen unterschiedlicher Datenträger).
Mit dem „cp“-Befehl erzeuge ich nun in jeder Datei einen Eintrag, dass diese auch im Verzeichnis „/backup/save/150414“ erscheinen soll.
Nach dem neuerlichen Ausführen des rsync-Befehls wird nun das Verzeichnis „/backup/orig“ wieder mit dem Quellverzeichnis abgeglichen und Dateien werden neu erzeugt, erneuert oder gelöscht.
Wird eine Datei im Verzeichnis „/backup/orig“ gelöscht, so bleibt diese aber noch im Dateisystem erhalten, da sie ja auch im Verzeichnis „/backup/save/140415“ erscheinen soll.
Neue und geänderte Dateien bekommen eine neue Inode, womit sie für das Dateisystem andere/neue Dateien sind.
Mit dem erneuten „cp“-Befehl zur Hardlinkerzeugung für das neue Verzeichnis „/backup/save/150416“ wird dieser aktuelle Stand von „/backup/orig“ „eingefroren“.
Und schon hat man eine kleine Historie und kann im Backup verschiedene Stände erhalten und muss nur den benötigten Platz aller unterschiedlichen Dateien bereitstellen.
Machen wir es etwas eleganter … im Teil 3