
Ich habe zwei Backup-Verzeichnisse, die auf demselben Dateisystem auf meinem Backup-Server liegen. Das erste heißt „clone“ – es enthält einen Klon meines Laptops, der jede Nacht per Remote-Zugriff über rsync aktualisiert wird. Das zweite heißt „backup“ und ist ein wöchentlicher rsync-Snapshot nur der wichtigen Teile des Klons. Um Platz zu sparen, wird „backup“ mit --link-dest als Hardlinks zum Klon statt als Kopien erstellt:
rsync -avum --link-dest=/clone /clone/ /backup
Nun möchte ich die Option --backup auch verwenden, um die alten Versionen geänderter Dateien aus dem Backup in einen Zwischenspeicher zu kopieren, falls ich sie brauche oder versehentlich etwas Wichtiges lösche. Das funktioniert auch ohne --link-dest:
rsync -avumb --backup-dir=/holding/2016_10_22 /clone/ /backup
Dadurch werden jedoch Kopien der geänderten Dateien im Backup erstellt, was Speicherplatz verschwendet - ich möchte Hardlinks. Aber wenn ich den Parameter --link-dest wieder hinzufüge:
rsync -avumb --backup-dir=/holding/2016_10_22 --link-dest=/clone /clone/ /backup
...Nur danngelöschtDateien werden gesichert. Geänderte Dateien werden stillschweigend fest verknüpft. Der Grund (glaube ich) ist, dass --link-dest die gleiche Logik hat wie --copy-dest. D. h., wenn die Quelldatei im Verhältnis zur Kopierziel- (oder Linkziel-)Datei unverändert ist, wird sie nicht übertragen, sondern vom Kopier-/Linkzielverzeichnis in das Zielverzeichnis kopiert/verknüpft. Da ich das Quellverzeichnis als Linkzielverzeichnis verwende, bleiben alle nicht gelöschten Dateien „unverändert“ und werden stillschweigend behandelt.
Ich könnte dies in zwei Schritten tun: zuerst --backup ohne --link-dest, dann noch einmal --link-dest ohne --backup. (Neuere Versionen von rsync ersetzen identische Dateien durch Hardlinks.) Aber ich würde es wirklich lieber tun, alles auf einmal.
Gibt es eine Möglichkeit, --backup auszuführen und dabei nur Hardlinks zu erstellen? (Eigentlich möchte ich ein „normales“ rsync mit Hardlinks statt Dateiübertragung. Meine Verwendung von --link-dest scheint angesichts der beabsichtigten Logik dieser Option ein bisschen wie ein Hack.)
Bonusfrage: Die Manpage scheint darauf hinzuweisen, dass die Verwendung von --link-dest nur bei leeren Zielen vorzuziehen ist:
Diese Option funktioniert am besten beim Kopieren in eine leere Zielhierarchie, da vorhandene Dateien ihre Attribute ändern können und dies über Hardlinks Auswirkungen auf alternative Zieldateien haben kann. Außerdem kann die Auflistung der Änderungen etwas unübersichtlich werden.
Der Teil über die „Verwirrung“ der Auflistung ist ein bisschen vage. Ist die Verwendung von --link-dest auf einem nicht leeren Ziel wirklich „gefährlich“, vorausgesetzt, ich kümmere mich nicht allzu sehr um Dateiattribute? Kann jemand ein Beispiel geben?
Antwort1
Wie oben erwähnt, habe ich den Vorgang letztendlich in zwei Schritten ausgeführt.
src = the "live" clone directory, a mirror of my laptop = primary backup
dst = the weekly snapshot of important parts clone
trashdir = the items from src that don't exist in dst, because they have since been deleted, sorted into date-stamped directories
cmd = ("rsync -avumb --stats --delete --delete-excluded --filter='merge %s' --backup-dir=%s %s %s" %
(filterfile, trashdir, src, dst))
cmd = ("rsync -avum --stats --delete --delete-excluded --filter='merge %s' --link-dest=%s %s %s" %
(filterfile, src, src, dst))
Der erste Schritt erstellt eine Sicherungskopie der wichtigen Teile des Klons und speichert die Dateien, die seit der letzten Sicherung gelöscht wurden, im Papierkorb. (Es gibt Gründe, warum ich diese Zwischensicherung nur von ausgewählten Dateien möchte und sie nur wöchentlich aktualisieren lassen möchte.)
Der zweite Schritt konvertiert die Dateien im Backup in Hardlinks, die auf den Klon verweisen. Das Ergebnis ist, dass das Backup keinen tatsächlichen Speicherplatz beansprucht. trashdir ist per Definition keine Hardlink-Datei, da es nur aus Dateien besteht, die aus dem Klon und Backup gelöscht wurden.
Ich bin mir nicht ganz sicher, ob die Flags --delete-excluded notwendig sind (insbesondere im zweiten Befehl). Ich habe sie dort gelassen, für den Fall, dass ich die Filterdatei ändere, die definiert, welche Teile des Klons beim Erstellen des Backups ignoriert werden sollen.
Ich habe festgestellt, dass „trashdir“ in fünf Jahren ungefähr auf die Größe von „clone“ angewachsen ist. Die Gesamtgröße entspricht also „clone x2“, was für mich akzeptabel ist, da ich über einen Verlauf gelöschter Dateien von sechs Jahren verfüge und diese problemlos nach Datum bereinigen kann.
Zusätzlich zu dem oben genannten habe ich ein Skript, das ausgeführt wird, cp -al
um den Klon in etwa einen Monat mit Datumsstempel versehene rotierende, fest verknüpfte Snapshots zu kopieren. Dies deckt mich für Dateien ab, die geändert und nicht gelöscht wurden. Die Gesamtgröße für einen Monat scheint etwa halb so groß wie die Größe des Klons zu sein.
Der gesamte Speicherplatz beträgt also ca. 2,5 des Klons und ich habe:
- der Klon selbst, jede Nacht aktualisiert
- ein Backup ausgewählter Dateien, das eine Woche lang stabil ist
- einen Monat lang versionierte Klon-Snapshots
- gelöschte Dateien im Wert von sechs Jahren
Dies ist meiner Meinung nach ein ziemlich guter Schutz gegen den Verlust der Originaldiskette, das Überschreiben einer Datei und die Notwendigkeit einer älteren Version sowie das Löschen einer Datei und die spätere Notwendigkeit dieser.
Es ist ein wenig kompliziert und hätte wahrscheinlich auch mit Software von Drittanbietern erreicht werden können, aber es funktioniert für mich und basiert auf Low-Level-Tools, die voraussichtlich nicht verschwinden oder deren Funktionalität wesentlich verändert wird.
(@gsl – Danke eigentlich für die Update-Anforderung. Ich habe festgestellt, dass eines meiner Skripte beim Update auf Python 3 kaputt ging und einige Monate lang nicht mehr lief. Ich muss meinen Fehlerprotokollen mehr Aufmerksamkeit schenken!)
Ich bin jedoch auf jeden Fall immer noch an Möglichkeiten zur Rationalisierung interessiert, also geben Sie gerne Kommentare ab, wenn die Dinge, die ich mache, auf einfachere Weise erreicht werden könnten.