Ich verwende tar
, um einen Snapshot von verschiedenen Teilen des Dateisystems auf meinen Servern zu erstellen und diesen Snapshot dann zur Archivierung an einen externen Speicherort zu senden.
Ich möchte diesen Vorgang nur starten, wenn sich etwas geändert hat. Einige der Sicherungen werden in allen Ordnern des Systems ausgeführt, die sich sehr selten ändern (dh wenn neue Software installiert oder die Konfigurationen geändert werden).
Immer wenn eine Änderung eintritt, möchte ich einen vollständigen Schnappschuss. Ich könnte eine Liste mit geänderten Dateien erstellen find
, aber ich muss wirklich nur wissen, ob die Länge dieser Liste 0 oder mehr beträgt. Die Verwendung von find ist dafür zu langsam.
Mir ist bekannt, dass es inkrementelle Sicherungen gibt, und ich verwende rsync bereits in anderen Situationen in Verbindung mit ZFS. Hier ist der Sicherungshost jedoch ein FTP-Server (also kein rsync). Ich benötige vollständige Sicherungen (da das Sicherungsarchiv als Image zum Wiederherstellen oder Klonen von Servern verwendet wird) und möchte eine komprimierte Ausgabe (daher ist tar praktisch).
Bearbeiten : Beachten Sie, dass ich nicht nach einer inkrementellen Sicherung suche (ich habe diese), sondern nach einer schnellen (die das Finden und dergleichen irgendwie ausschließt) und einfachen Möglichkeit, zu entscheiden, ob ein vollständiger Schnappschuss mit dem letzten identisch ist. Vielleicht war meine Formulierung nicht so gut. Ich habe den Titel jetzt bearbeitet.
Das Dienstprogramm incron verwendet inotify, um Befehle auszuführen, wenn Dateisystemereignisse auftreten. Die Konfigurationsdatei ähnelt einer Crontab, aber anstelle von Zeiten geben Sie Pfade und Ereignisse an.
Der Befehl kann entweder Ihr Sicherungsskript sein (in diesem Fall wird die Sicherung fast unmittelbar nach dem Ändern der Dateien gestartet), oder Sie können eine Datei erstellen lassen und das Sicherungsskript auf das Vorhandensein dieser Datei prüfen lassen und sie dann löschen. Wenn die Datei vorhanden ist, ist eines der Ereignisse seit dem letzten Lauf aufgetreten.
quelle
Sie können die Ausgabe von find immer an wc weiterleiten und eine ganzzahlige Anzahl geänderter Dateien abrufen:
Obwohl Davids Antwort weniger Codeänderungen erfordert :)
quelle
Dies ist eine etwas wilde Idee, aber Sie könnten ein wenig mit md5sum und ls spielen.
Diese Idee besteht darin, nur eine MD5-Summe einer Datei zu betrachten, und diese Datei ist eine Dateiliste des Verzeichnisses, das Sie gerade ansehen. Und solange sich nichts ändert, ist die md5sum dieselbe. Wenn jedoch ein Zeitstempel aktualisiert wird, ändert sich die md5sum, und Sie wissen, dass Sie einen neuen Tar erstellen und an Ihren FTP-Server senden müssen.
Wir könnten mit so etwas beginnen
Dann müssten Sie einen Vergleich zwischen dem alten md5 und dem aktuellen hinzufügen ... etc etc.
/ Johan
quelle
diff -q
die aktuellen und vorherigen Einträge.tar hat eine
--diff
Option, die "Unterschiede zwischen Archiv und Dateisystem findet". Wenn Sie eine lokale Kopie der hochgeladenen Datei behalten, können Sie diese damit vergleichen.quelle
Sie haben auch die Kleinbuchstaben -g-Option -g, --listed-incremental F Erstellen / Auflisten / Extrahieren einer neuen inkrementellen Sicherung im GNU-Format
Ich habe noch nie damit gespielt, aber Sie könnten etwas schreiben, also testen Sie dies zuerst auf unkritisch. ;) mache eine vollständige Sicherung
dann
quelle
Ich habe mein Backup komplett auf rsnapshot umgestellt (perlscript, es verwendet rsync und Hardlinks, es kann Remote-Hosts sichern)
Jede Nacht kopiert rsync nur neuere Dateien und dank Hardlinks repräsentiert jeder Backup-Ordner die vollständigen Daten.
rsnapshot ist super schnell und die Wiederherstellung ist so einfach - probieren Sie es aus!
quelle
Radikale Idee: Sie können das System die betreffenden Dateien für jeden Zugriff prüfen lassen.
Dies ist in Bezug auf die Protokollierung sehr ausführlich, würde Ihnen jedoch bei jedem Lesen / Schreiben Datenstempel liefern. Ja, das Konzept ähnelt der Windows NT-Überwachungsprotokollierung. Es ist wahrscheinlich übertrieben für Ihr Setup, aber der Vollständigkeit halber lehne ich dieses Konzept ab ...
Mit diesem kurzen Tutorial können Sie hier die Überwachung einrichten .
Vorteile:
Nachteile:
Mit dem
ausearch
Tool können Sie Änderungen an Dateien pro Dateiname suchen. Mit einem einfachen Skript, das die Verzeichnisse (und Unterverzeichnisse?) Pro Datei durchlaufen kann, können Sie Änderungen an einer einfachen Datei vornehmen und erhalten eine Liste der Dateien, die in den von Ihnen angegebenen Kriterien "berührt" wurden. Sie können dies problemlos mit anderen Filteroptionenausearch
für Benutzer pro Benutzer (nützlich, wenn Sie ein Benutzerkonto für einen Dienst haben), pro Befehl usw. erweitern.quelle
Sie könnten git installieren und die Ausgabe von "git status" (oder vielleicht die Exit-Codes?) Für die betreffenden Verzeichnisse analysieren. Git ist ziemlich schnell in dem, was es tut.
Stellen Sie einfach sicher, dass Sie die Änderungen festschreiben, damit bei aufeinanderfolgenden Aufrufen des "Git-Status" Änderungen angezeigt werden.
Eine andere Idee wäre, Tripwire oder ein ähnliches Werkzeug zu verwenden.
Ein Brute-Force-Ansatz wäre, die Verzeichnisse ohnehin regelmäßig zu tarieren und einen MD5 des vorherigen Teers zu vergleichen. Wenn die Verzeichnisse jedoch groß sind, würde dies nicht allzu gut skalieren.
quelle
Es hört sich so an, als ob Sie wirklich einen Sicherungsprozess auslösen möchten, wenn sich etwas in einer Verzeichnishierarchie ändert. Inotify kann hier möglicherweise helfen.
quelle
Protokollieren Sie die Ausgabe von
ls -UlR --full-time /list/of /folders/to/monitor
und leiten Sie sie weiterdiff -q
, um den Vergleich zu stoppen, wenn eine Änderung zwischen der Eingabe und der zwischengespeicherten Version festgestellt wird (erstes Argument).Wenn
diff
Sie einen Unterschied feststellen, erstellen Sie die zwischengespeicherte Version neu, um die letzten Dateien zu berücksichtigen, und erstellen Sie dann erneut einen Snapshot der Pfade, wie Sie es normalerweise tun.quelle