Intelligente Lösungen
in neuer Dimension

Dateien aus RESTIC-Sicherung entfernen

Heute habe ich festgestellt, dass ich bei meinen RESTIC-Tests vertrauliche Dateien in die Sicherungen aufgenommen hatte. Klar: Ich halte die Sicherungen unter Verschluß, also keine Gefahr. Trotzdem ist mir’s lieber, wenn die besagten Dateien in den Sicherungen nicht enthalten ist. Man weiß ja nie!

Aufgabenstellung

Ich möchte, dass das Ordner “.kennwoerter” samt Inhalt nicht mehr in den Sicherungen auftaucht!

1
2
3
4
5
6
7
8
$ restic -r ... snapshots
f242617f  2021-11-21 09:27:07  ulicsl                  /home/uli

$ restic -r ... ls f242617f /.kennwoerter
snapshot f242617f of ...
/.kennworter
/.kennworter/private
/.kennworter/work

Vorbereitungen

Zum Bereinigen brauche ich eine Version von RESTIC, die die Änderungen für das RESTIC-Kommando “rewrite” enthält. Dazu muß ich den Zweig rewrite-snapshot mergen und dann RESTIC neu bauen.

Löschung vorbereiten

Ich möchte, dass das Ordner “.kennwoerter” samt Inhalt nicht mehr in den Sicherungen auftaucht:

1
2
3
4
5
6
$ restic -r ... rewrite --exclude "/.kennwoerter" all
# ... das dauert ...

$ restic -r ... snapshots
f242617f  2021-11-21 09:27:07  ulicsl                  /home/uli
a9a6dbd4  2021-11-21 09:27:07  ulicsl   rewrite        /home/uli

Es gibt nun viele neue Snapshots, die mit dem Tag “rewrite” versehen sind!

Schrott-Snapshots löschen

Alle Snapshots mit dem gleichen Zeitstempel wie die “rewrite”-Snapshots müssen manuell gelöscht werden:

1
2
3
$ restic -r ... forget f242617

$ restic -r ... prune

Tags löschen

1
$ restic -r ... tag --remove rewrite --tag rewrite

Nachkontrolle

1
2
3
4
5
$ restic -r ... snapshots
a9a6dbd4  2021-11-21 09:27:07  ulicsl                  /home/uli

$ restic -r ... ls a9a6dbd4 /.kennwoerter
snapshot a9a6dbd4 of ...

Es erscheint keinerlei Spur von “.kennwoerter” in der Ausgabe, also hat die Löschung hoffentlich geklappt!

Hilfsskript

Das nachfolgende Hilfsskript

  • löscht die Snapshots dauerhaft (“forget” –> “prune”)
  • löscht das Tag “rewritten”

Es ist etwas kompliziert aufzurufen!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
#
# restic-remove-rewritten-snapshots.sh
#
# touch /tmp/restic-password && chmod 600 /tmp/restic-password
# echo my-password >/tmp/restic-password
# RESTIC_PASSWORD_FILE=/tmp/restic-password ./restic-remove-rewritten-snapshots.sh -r (restic-repo)
#
RESTIC_LINES="$(restic "$@" snapshots --tag rewrite \
| sed -n "/^---/,/^---/p" \
| grep -v "^--" | grep -v "^\s")"
SNAPSHOT_IDS="$(echo "${RESTIC_LINES}"\
| while read snapshot date time rest; do
  restic "$@" snapshots|grep "${date} ${time}"|grep -v rewrite|cut -f1 -d" "
done)"
restic "$@" forget "${SNAPSHOT_IDS}"
restic "$@" prune
restic "$@" tag --remove rewrite --tag rewrite

Links

Änderungen

  • 2021-11-15 – Erste Version