Restic: Mischen von Einschluss- und Ausschlussmustern für Sicherung und Wiederherstellung zulassen

Erstellt am 18. Juli 2015  ·  17Kommentare  ·  Quelle: restic/restic

Dies ist ein Folgeproblem für #226. Bisher ist es nur möglich, Ausschlussmuster für Backup und Restore anzugeben.

Es gibt Anwendungsfälle, die nicht abgedeckt werden, zum Beispiel: Ein Benutzer möchte sein Home-Verzeichnis unter /home/user sichern und alles aus dem Verzeichnis work außer C-Quelldateien ausschließen.

Gibt es noch andere Verwendungsmöglichkeiten, an die ich nicht gedacht habe?

Implementierung/Benutzeroberfläche: Erlaubt die Angabe von sowohl --include als auch --exclude Mustern in der Befehlszeile, die eine gemeinsame Liste füllen (die Reihenfolge spielt hier eine Rolle). Überprüfen Sie für jedes Verzeichnis/jede Datei alle Muster in der Liste. Die Aktion (ausschließen oder einschließen) des letzten Matching-Musters gewinnt. Die Standardaktion (die auch verwendet wird, wenn weder Einschluss- noch Ausschlussmuster angegeben sind) ist "include".

Darin ist bereits ein Eckkoffer enthalten: Sollte restic walk /home/user/work überhaupt gehen?

Ich denke, es sollte nicht. Wenn dies ein wünschenswertes Verhalten ist, fordern Sie stattdessen den Benutzer auf, ein spezifischeres Muster hinzuzufügen, um zu signalisieren, dass das ausgeschlossene Verzeichnis ebenfalls durchlaufen werden soll, zB restic backup --exclude /home/user/work --include /home/user/work/**/*c. /home/user .

Eine bessere Benutzeroberfläche wäre die Angabe einer Datei, aus der die Muster gelesen werden sollen ( --pattern-file oder so ähnlich). In dieser Datei sind alle Zeilen, die mit # Kommentare, leere Zeilen werden ignoriert, alle anderen Zeilen müssen entweder mit + (include) oder - (exclude) nach einem Leerzeichen beginnen Charakter und ein Muster. Für den obigen Anwendungsfall würde eine Filterdatei so aussehen:

# filter out everything from work, but include c source code files
- /home/user/work
+ /home/user/work/**/*.c

Dieses Problem kann geschlossen werden, sobald eine endgültige Lösung für das Einschließen und Ausschließen von Mustern implementiert ist.

backup restore feature enhancement

Hilfreichster Kommentar

Warum nicht einfach das Standard-Ignorierformat verwenden, das .gitignore verwendet? z.B.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

Alle 17 Kommentare

Eine andere Möglichkeit wäre, eine genaue Liste der zu sichernden Dateien aus einer Datei (oder von stdin) zu lesen. Dann könnten die Leute einfach alle Tools verwenden, die sie wollen (find, grep usw.), um ihre Liste zu erstellen und diese Liste auf Restic "pipe" zu lassen.

Ich sollte den gesamten Text lesen, bevor ich eine Antwort poste. Es tut uns leid.

Dies ist ein anderes Problem, da die Liste der zu sichernden Dateien/Verzeichnisse von stdin anstelle von Befehlszeilenargumenten übernommen wird. Findest du es wertvoll, das zu haben? Wenn ja, könnten Sie ein Problem hinzufügen?

Nur zur Erinnerung für mich selbst: In dieser Ausgabe geht es darum, Filter für die Sicherung einzubeziehen, die Wiederherstellung hat sie bereits.

Du solltest vielleicht einfach die --exclude/--include/--exclude-from Syntax von rsync kopieren, sie haben 20 Jahre Erfahrung :-)
(Bitte fügen Sie dem Benutzerhandbuch zumindest einige Beispiele der aktuellen Syntax hinzu, da unklar ist, ob "/foo" und "foo" gleich sind oder ob "*.c" unterstützt wird.

Ah, danke für den Kommentar, ich habe ein Problem für die fehlenden Beispiele im Handbuch hinzugefügt: https://github.com/restic/restic/issues/396

Ehrlich gesagt gefällt mir die Filtersyntax von rsync überhaupt nicht, weil die Regeln viel zu komplex sind. Aber wir werden sehen, was wir uns einfallen lassen.

Irgendwelche Aktualisierungen? Es ist definitiv eine Must-Have-Option. Derzeit ist es nicht einmal möglich, die zu sichernde Dateiliste von der stdin zu lesen:

$ find -name '*.go' | restic backup --files-from -
open -: no such file or directory

während es geschrieben werden könnte als

restic backup --exclude '*' --include '*.go'

Ähm, das Lesen der Dateiliste von stdin kann erreicht werden, indem man restic wie folgt aufruft:

$ find -name '*.go' | restic backup --files-from /dev/stdin

Wenn Sie möchten, würde ich eine PR akzeptieren, die - für --files-from hinzufügt. :)

@opennota würde es Ihnen etwas

Das Problem mit dem Bindestrich ( - ) wird als #769 verfolgt.

@fd0
Kein großer Anwendungsfall. Ich möchte nur die Dateien mit bestimmten Erweiterungen sichern, ohne eine temporäre Datei für die Liste zu verwenden.

Wenn Sie möchten, würde ich eine PR akzeptieren, die die Handhabung hinzufügt - für --files-from. :)

Ich sehe was ich tun kann.

Sie können dieses Verhalten mit sed und Named Pipes emulieren:

restic --exclude-file <(sed -n 's/^- \(.*\)/\1/p' files.list) --files-from <(sed -n 's/^+ \(.*\)/\1/p' files.list)

Zeilen, die mit - werden ausgeschlossen und Zeilen mit + werden eingeschlossen.

Ich denke, ein gutes Modell ist das, was borg kürzlich für --pattern und --patterns-from . implementiert hat
https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg -help-patterns
Nicht so sehr die verschiedenen Stilselektoren, sondern die Optionen zum Angeben von Stammpfaden, Include-Regeln, Ausschlussregeln und No-Recurse-Exclusion-Regeln in einer Datei.

Warum nicht einfach das Standard-Ignorierformat verwenden, das .gitignore verwendet? z.B.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

Soll --include implementiert werden?

Klingt so, als ob --include und --exclude nicht zusammen implementiert werden können oder zumindest eine Rangfolge untereinander wären...

Das Bereitstellen einer Liste von Dateien mit --files-from löst das Problem nicht vollständig, da der Unterbefehl snapshots eine riesige Liste von Dateien anzeigt und der Unterbefehl forget nicht wie erwartet funktioniert.

Mein Anwendungsfall ist die Sicherung meines Zuhauses und ich habe eine Liste von Pfaden mit einigen Ausschlüssen und einigen Ausnahmen für den Ausschluss. Die Basisliste der Pfade enthält bereits Hunderte von Elementen. Da alles unter $HOME , würde ich erwarten, etwas wie --exclude=** --include=~/path1 --include=~/path2 --exclude=~/path2/something --exclude=*~ sagen zu können. Um zu bestimmen, ob ein Pfad eingeschlossen werden soll, sollte er mit jedem --exclude und --include in der richtigen Reihenfolge verglichen werden und der letzte übereinstimmende gewinnt.

Ich denke, die PR von @vincentbernat ist eine effektive Lösung für diese Anforderung.

_Zusammenfassung: Lassen Sie negative Muster im Giignore-Stil zu, um Ausschlussregeln für Sicherung und Wiederherstellung festzulegen._

Ich benutze es jetzt seit mehreren Wochen effektiv.

Dies ermöglicht es mir insbesondere, meine Snapshot-Auflistung zu vereinfachen, die zuvor ziemlich ausführlich war:

b951f6a2  2019-06-15 11:30:18  elvandar    manual      /Users/daniel/Desktop
                                                       /Users/daniel/Documents
                                                       <lots more...>

zu:

d0c0bed1  2019-06-18 08:20:57  elvandar                /Users/daniel

Außerdem habe ich eine effektive (nicht perfekte, aber funktionierende) Lösung implementiert, die eine kontinuierliche Sicherung mit dieser Funktion ermöglicht (Details werden in Kürze bekannt gegeben).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen