Restic: Ausschließen von $RECYCLE.BIN mit einer Ausschlussdatei funktioniert nicht

Erstellt am 31. Mai 2020  ·  4Kommentare  ·  Quelle: restic/restic

Ausgabe von restic version

restic 0.9.6 (v0.9.6-0-gb723ca3d) kompiliert mit go1.10.4 unter Linux/amd64

Wie bist du restic genau gelaufen?

Ich habe eine NTFS-Partition, die zwischen einem Dual-Boot-Windows 10 und Ubuntu 18.04 geteilt wird, die ich mit Restic von Ubuntu sichere. Wie Sie wahrscheinlich wissen, erstellt Windows 10 ein Verzeichnis $RECYCLE.BIN im Stammverzeichnis der Partition, um Dateien zu speichern, die in den Papierkorb verschoben werden. Ich möchte die freigegebene Partition sichern, aber nicht das Verzeichnis $RECYCLE.BIN .

Weiter unten habe ich eine detaillierte Beschreibung gegeben, wie man das, was ich beobachte, reproduzieren kann. Lange Rede, kurzer Sinn: Die Verwendung von --exclude="\$RECYCLE.BIN" mit dem Backup-Befehl schließt das Verzeichnis aus, das Setzen von "$RECYCLE.BIN" (oder jede andere Variante, die mir einfällt, siehe unten) in ein --exclude-file tut das Verzeichnis nicht ausschließen.

Welches Backend/Server/Dienst haben Sie zum Speichern des Repositorys verwendet?

Ich beobachte das Verhalten sowohl bei einem lokalen Repository (unter Ubuntu 18.04) als auch bei einem Remote-Repository per SFTP (Backup-Lauf auch unter Ubuntu 18.04).

Erwartetes Verhalten

Der Ordner $RECYCLE.BIN wird vom Backup ausgeschlossen, wenn er zu einer Ausschlussdatei hinzugefügt wird.

Tatsächliches Verhalten

Der Ordner $RECYCLE.BIN ist in der Sicherung enthalten, obwohl er zu einer Ausschlussdatei hinzugefügt wurde.

Schritte zum Reproduzieren des Verhaltens

Geben Sie in einem temporären Testverzeichnis die folgenden Befehle in einer Bash aus:

# prepare the directory to be backed up
mkdir "data";
mkdir "data/\$RECYCLE.BIN";
touch "data/backup_this";
touch "data/\$RECYCLE.BIN"/ignore_this";

# init repo
mkdir "repo";
restic init --repo=repo/

# prepare exclude file
echo "\$RECYCLE.BIN" > exclude.file

Die Ausgabe von restic --repo=repo/ backup --verbose --verbose data/ ergibt nun:

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.004s (0 B added)
new       /data/backup_this, saved in 0.000s (0 B added)

Files:           2 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 2 files, 0 B in 0:00
snapshot 27c00c6b saved

wie erwartet.

Ausgeben von restic --repo=repo/ backup --verbose --verbose --exclude="\$RECYCLE.BIN" data/ Erträgen

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 27c00c6b
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 1 files, 0 B in 0:00
snapshot 61c27a16 saved

was auch erwartet wird.

Ausgabe von restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ , wobei

 $ cat exclude.file 
$RECYCLE.BIN

ergibt sich

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 61c27a16
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 2 files, 0 B
unchanged /data/backup_this
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.003s (0 B added)

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot 9a62470f saved

Das heißt, das Verzeichnis wird nicht von der Sicherung ausgeschlossen, obwohl es in der Ausschlussdatei vorhanden ist.

Ich habe auch verschiedene Varianten der Ausschlussdatei ausprobiert (das Dollarzeichen umgehen, Anführungszeichen hinzufügen, einen Zeilenumbruch am Ende der Datei hinzufügen), aber nichts war restriktiv, um das Verzeichnis auszuschließen.

Hast du eine Idee, was das verursacht haben könnte?

Ich gehe davon aus, dass beim Umgang mit Dateinamen aus einer Ausschlussdatei mit bösen Zeichen (wie dem Dollarzeichen) ein Fehler auftreten muss.

Haben Sie eine Idee, wie Sie das Problem lösen können?

Leider habe ich keine Ahnung von go (ich spreche nur fließend C++), aber beim Umgang mit Dateinamen mit seltsamen Zeichen muss in der Interaktion mit dem Betriebssystem und/oder dem Dateisystem etwas nicht stimmen.

Hat dir Restic heute geholfen? Hat es dich irgendwie glücklich gemacht?

Ich verwende Restic ausgiebig sowohl für lokale als auch für Remote-Backups. Mach weiter so!
Wenn ich Ihnen bei der Lösung dieses Problems weiterhelfen kann, lassen Sie es mich wissen.

backup need feedback questioproblem

Alle 4 Kommentare

Bei --exclude bin ich mir nicht sicher, aber in Ausschlussdateien erweitert restic Umgebungsvariablen. Verwenden Sie $$RECYCLE.BIN , um dies zu vermeiden.

Siehe: https://restic.readthedocs.io/en/latest/040_backup.html#exklusive -files

Nun, danke, anscheinend habe ich genau diesen einen Absatz in der Dokumentation übersehen.

Es scheint zu klappen:

 $ cat exclude.file 
$$RECYCLE.BIN

und erneutes Ausgeben von restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ ergibt

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 96bdd658
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 1 files, 0 B in 0:00
snapshot 5c475b96 saved

wie erwartet.

In jetzt über 10 Jahren Linux-Erfahrung habe ich jedoch nie erlebt, dass ich einem $ um $$ anstelle von \$ entkommen musste, aber wie in der Dokumentation angegeben, scheint dies Standard zu sein für os.ExpandEnv , also ist dies nicht spezifisch für restic.

restic --repo=repo/ backup --verbose --verbose --exclude="$$RECYCLE.BIN" data/ ergibt jedoch

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 5c475b96
start scan on [data/]
start backup on [data/]
scan finished in 0.204s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.002s (0 B added)
unchanged /data/backup_this

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot ed44b219 saved

was ziemlich inkonsistent und kontraintuitiv erscheint.

Die doppelten Anführungszeichen in --exclude="$$RECYCLE.BIN" bedeuten, dass die Shell $$ auf die aktuelle PID erweitert. Versuchen Sie es mit einfachen Anführungszeichen: --exclude='$$RECYCLE.BIN'

(Beispiel: echo "$$RECYCLE.BIN" vs echo '$$RECYCLE.BIN' )

@kontakm Das Problem

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen