Grundsätzlich bin ich auf der Suche nach einem Tool oder Skript, das verschobene oder umbenannte Dateien erkennt, damit ich eine Liste der umbenannten / verschobenen Dateien abrufen und denselben Vorgang am anderen Ende des Netzwerks ausführen kann, um Bandbreite zu sparen.
Grundsätzlich ist Festplattenspeicher billig, Bandbreite jedoch nicht, und das Problem ist, dass die Dateien häufig reorganisiert oder in eine bessere Verzeichnisstruktur verschoben werden. Wenn Sie also rsync für die Sicherung verwenden, merkt rsync nicht, dass es sich um ein umbenanntes oder handelt Datei verschoben und erneut über das Netzwerk übertragen, obwohl am anderen Ende dieselbe Datei vorhanden ist.
Ich frage mich also, ob es ein Skript oder Tool gibt, das aufzeichnet, wo sich alle Dateien und ihre Namen befinden. Kurz vor einer Sicherung würde es verschobene oder umbenannte Dateien erneut scannen und erkennen. Dann kann ich diese Liste übernehmen und erneut anwenden Verschieben / Umbenennen auf der anderen Seite.
Hier ist eine Liste der "allgemeinen" Funktionen der Dateien:
- Große unveränderliche Dateien
- Sie können umbenannt oder verschoben werden
[Bearbeiten:] Das sind alles gute Antworten, und am Ende habe ich mir alle Antworten angesehen und werde einen Code schreiben, um damit umzugehen. Grundsätzlich denke ich / arbeite ich gerade an:
- Verwenden Sie für den "anfänglichen" Scan so etwas wie AIDE, und ermöglichen Sie mir, die Prüfsummen für die Dateien beizubehalten, da sie sich eigentlich nie ändern sollten. Dies würde helfen, Beschädigungen zu erkennen.
- Erstellen eines inotify-Daemons, der diese Dateien / Verzeichnisse überwacht und alle Änderungen in Bezug auf das Umbenennen und Verschieben der Dateien in eine Protokolldatei aufzeichnet.
- Es gibt einige Randfälle, in denen inotify möglicherweise nicht aufzeichnet, dass etwas mit dem Dateisystem passiert ist. Daher besteht ein letzter Schritt darin, das Dateisystem mit find nach Dateien zu durchsuchen, deren Änderungszeitpunkt nach der letzten Sicherung liegt .
Dies hat mehrere Vorteile:
- Prüfsummen / etc von AIDE, um zu überprüfen / sicherzustellen, dass einige Medien nicht beschädigt wurden
- Inotify hält den Ressourcenverbrauch niedrig und es ist nicht erforderlich, das Dateisystem immer wieder neu zu scannen
- Rsync muss nicht gepatcht werden. Wenn ich Dinge patchen muss, die ich kann, aber ich würde es vorziehen, zu vermeiden, Dinge zu patchen, um die Belastung zu verringern (IE muss nicht jedes Mal neu patchen, wenn es ein Update gibt).
- Ich habe Unison schon einmal benutzt und es ist wirklich nett, aber ich hätte schwören können, dass Unison Kopien im Dateisystem aufbewahrt und dass seine "Archiv" -Dateien ziemlich groß werden können.
Dies ist eine seltsame Lösung, aber ... git erkennt Verschiebungen und benennt sie basierend auf dem Dateiinhalt um. Wenn Sie also die fraglichen Verzeichnisse unter Versionskontrolle halten, kann git Verschiebungen und dergleichen erkennen und die Übertragung vermeiden Inhalt (da es sich bereits auf beiden Seiten des Drahtes befindet), während noch Dinge im Baum bewegt werden.
Nur ein Gedanke.
quelle
interessante Vorschläge hier. Dachte auch an die Verwendung von Dateisystemfähigkeiten, zB ZFS. Fand es seltsam, dass es kein Tool gibt, das so einfach ist. Die Unison-Option funktioniert in den meisten Fällen nicht, da die Leute darüber berichten, auch nicht für mich.
Ich möchte, dass die Funktion die Sicherung meiner Filmsammlung auf der zweiten Festplatte synchronisiert, wenn Ordner neu angeordnet werden.
Jetzt fand ich dieses einfache C-Skript http://sourceforge.net/projects/movesync/
Scheint gut zu funktionieren. Führe es aus und synchronisiere es dann normal mit zB unisono.
quelle
Möglicherweise können Sie ein hostbasiertes IDS wie AIDE verwenden und anhand seiner Ausgabe ein Wrapper-Skript schreiben. Unter Berücksichtigung der Prüfsummen müssten Sie wahrscheinlich komplexere Logik schreiben.
Andernfalls kann ein netzwerkbasiertes Dateisystem sinnvoll sein, da die Änderungen an allen Standorten wirksam werden. Trotzdem vermute ich, dass Sie über das Internet übertragen, was die Möglichkeiten hier einschränken wird.
quelle
Sie könnten versuchen, unisono ; insbesondere das
Option erwähnt in den Dokumenten als
Sieht aus, als würde es tun, was Sie wollen.
quelle
Syrep macht was Sie brauchen. Es hält die Nachrichtenauszüge in einem Dateibaum auf dem neuesten Stand. Wenn Sie die Digests in der Nähe lassen, ist dies effizienter als rsync. Es wurde für Sneakernet entwickelt, sodass Sie möglicherweise einen Wrapper hinzufügen möchten, der Updates / Makepatches / Merges auf einmal ausführt.
quelle
Ich bin mir nicht sicher, ob es ein vorhandenes Tool gibt, das dies für Sie erledigt, aber Sie könnten ein einfaches Skript schreiben, das nur ein Skript
find
im Basisverzeichnis ausführt, dasmtime
neuer ist als die letzte Sicherung. Dadurch erhalten Sie eine Liste aller Dateien, die geändert wurden . Wenn eine Datei einfach verschoben wurde, wird sie nicht in der Liste angezeigt. Leider enthält diese Liste die Verzeichnisse, in die die Dateien verschoben wurden, da das Verzeichnis aktualisiert wird, wenn eine Datei hinzugefügt / entfernt wird.Mit dieser Dateiliste können Sie mit rsync nur diese Dateien synchronisieren. rsync bietet die Möglichkeit, eine Dateiliste einzulesen. Hier ist ein Test, der dieses Beispiel zeigt:
Bitte beachten Sie, dass ich zwischen den einzelnen Befehlen ca. 1 Minute gewartet habe
find
. Daraus geht hervor, dass die Datei beim erstmaligen Erstellen nach aufgelistet wirdfind
. Wenn ich die Datei in ein anderes Verzeichnis verschiebe und denfind
Befehl erneut ausführe , wird nur das Verzeichnis angezeigt, in das ich die Datei verschoben habe, und nicht die Datei selbst. Sie können eine Kombination ausfind
undrsync
Befehlen verwenden, um nur die gewünschten Dateien aufzulisten. Dies kann wahrscheinlich Ihr Ziel erreichen.Ich hoffe das hilft.
quelle
In Anbetracht Ihres Workflows frage ich mich, ob die Arbeit auf Dateiebene (wie bisher von anderen vorgeschlagen) die beste Lösung ist. Du könntest arbeiten ...
Auf Dateisystemebene
Die Idee ist, dass das Dateisystem die Vorgänge zwischen Sicherungen verfolgt. Anstatt eine Sicherung des Dateisystems zu machen, sichern das Dateisystem Journal (und Wiedergabe optional die Änderungen auf dem Backup - Maschine, wenn Sie eine ready-to-use sichern möchten). Ein Dateisystemjournal drückt natürlich Verschiebungen und Löschungen in wenigen Bytes aus.
Mit Fuse ist es relativ einfach, ein Dateisystem mit bestimmten Anforderungen zu entwerfen, das sich auf einem „echten Dateisystem“ befindet. Ich habe es noch nie benutzt, aber LoggedFS sieht vielversprechend aus.
Bei dieser Lösung lohnt sich eine Art Journalkomprimierung. Wenn eine Datei beispielsweise zehnmal überschrieben wurde, behalten Sie nur ihre letzte Aktualisierung im Journal bei. Eine weitere sinnvolle Optimierung besteht darin, Kopiervorgänge und noch besser Bearbeitungen zu erkennen (dh eine Datei zu erstellen, die zum größten Teil, aber nicht vollständig mit einer anderen Datei identisch ist). Ich weiß nicht, ob jemand dies umgesetzt hat. Für Ihren Workflow würde das ohnehin nicht viel ausmachen.
Bei der Lautstärke
Die Idee ist, dass der Volume-Manager die Vorgänge zwischen Sicherungen verfolgt. Anstatt eine Sicherungskopie des Dateisystems zu erstellen, erstellen Sie einen Snapshot mit dem Volume-Manager und sichern Sie den Snapshot , der als Unterschied zum vorherigen Snapshot ausgedrückt wird.
Dies sollte gut funktionieren, wenn Sie lediglich Dateien erstellen, umbenennen und entfernen. Es wäre viel schwieriger, Dinge wie Kopien und Bearbeitungen zu erkennen oder die Erstellung einer Datei und das anschließende Löschen zu optimieren.
quelle
Unison ist dafür gut geeignet, muss aber immer noch Dateien lokal kopieren und kann ein Verschieben / Umbenennen nicht erkennen, wenn sich auch der Dateiinhalt nur geringfügig geändert hat.
Ich habe ein einfaches Python-Skript erstellt, um umbenannte / verschobene Dateien und Verzeichnisse mithilfe von Inode-Nummern (nur * nix) zu erkennen und diese Änderungen auf dem synchronisierten Computer wiederzugeben. Sie können es alleine oder als "Umbenennungs-Präprozessor" für Unison oder rsync verwenden. Es kann hier gefunden werden
quelle