Intelligente Lösungen
in neuer Dimension

Sicherungen mit RESTIC

Aktuell überlege ich, unsere Sicherungen umzustellen auf RESTIC. Bevor ich die Umstellung vornehme, brauche ich etwas Erfahrung im Umgang mit RESTIC. Deshalb hier ein kleiner einführender Artikel.

Tests mit Ubuntu-20.04 und Restic-0.12.1.

TLDR:

  • Die Einrichtung von RESTIC iist sehr einfach
  • Die Erstsicherung dauert etwas (bei mir bei grob 80GB etwa 30 Minuten)
  • Die Folgesicherungen gehen zügig (bei mir grob 2 Minuten)

Vorbemerkungen

Meine Tests mache ich mit dem Benutzer “uli”. Ich verwende zur Sicherung ein externes Speichermedium. Dieses hat die Bezeichnung “uli-0195”.

1
2
DP_USER=uli
DP_DRIVE=uli-0195

Für Tests kann man meiner Ansicht nach durchaus übliche USB-Sticks verwenden. Mit ihnen kann man sich mit der grundsätzlichen Bedienung von RESTIC vertraut machen. Für zuverlässige Sicherungen sind USB-Sticks eher nicht geeignet, dafür gehen sie zu oft kaputt.

Üblicherweise verwende ich verschlüsselte externe Medien. Die Sicherungen mit RESTIC sind dann quasi doppelt verschlüsselt: Einmal durch die Medien-Verschlüsselung und dann nochmal durch die in RESTIC eingebaute Verschlüsselung.

Herunterladen und installieren

RESTIC kann entweder als Binärdatei heruntergeladen und installiert werden oder als DP-Paket für Ubuntu. Das DP-Paket ist nur aus dem DP-Netz heraus verfügbar!

DP-Paket

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo apt install -y restic
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden NEUEN Pakete werden installiert:
  restic
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 10,3 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 30,5 MB Plattenplatz zusätzlich benutzt.
Holen:1 https://dprepo.daemons-point.com/dprepo/ubuntu 20.04_x86_64/ restic 0.12.1-2dp06~focal1 [10,3 MB]
Es wurden 10,3 MB in 2 s geholt (6.209 kB/s).
Vormals nicht ausgewähltes Paket restic wird gewählt.
(Lese Datenbank ... 257506 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../restic_0.12.1-2dp06~focal1_amd64.deb ...
Entpacken von restic (0.12.1-2dp06~focal1) ...
restic (0.12.1-2dp06~focal1) wird eingerichtet ...
Trigger für man-db (2.9.1-1) werden verarbeitet ...

$ restic version
restic 0.12.1 compiled with go1.13.8 on linux/amd64

Binärdatei

Entweder

RESTIC besteht aus einer einzelnen ausführbaren Datei:

  • restic_0.12.1_linux_amd64.bz2

Diese lade ich herunter, prüfe sie und entpacke sie dann so, dass ich sie auf der Kommandozeile mit restic version aufrufen kann:

1
2
3
4
5
6
7
8
$ wget -q -O restic_0.12.1_linux_amd64.bz2  https://github.com/restic/restic/releases/download/v0.12.1/restic_0.12.1_linux_amd64.bz2
# restic_0.12.1_linux_amd64.bz2 prüfen - virustotal, sha256-Summe, ...

$ bzip2 -cd restic_0.12.1_linux_amd64.bz2 >restic
$ chmod +x restic

$ ./restic -version
restic 0.12.1 compiled with go1.16.6 on linux/amd64

Sicherungsmedium initialisieren

  1. Sicherstellen: Medium ist eingelegt
  2. … und eingebunden: ls "/media/${DP_USER}/${DP_DRIVE}" –> klappt!
  3. Medium initialisieren: restic init --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
    • Kennwort muß 2x eingegeben werden!
    • Merken!
    • Für meine Tests verwende ich das Kennwort “uli-kw”

Erste Sicherung erstellen

Erste Sicherung meines kompletten Home-Verzeichnisses:

1
2
3
4
5
6
7
8
uli:~$ time restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --exclude-caches --exclude=".cache" --exclude="Cache*" --exclude="Downloads" --exclude=".m2*" --exclude=".gradle*" --exclude="*.log" .
enter password for repository:
repository 3c87d0bd opened successfully, password is correct
created new cache in /home/uli/.cache/restic
no parent snapshot found, will read all files
[19:27] 56.68%  712144 files 40.320 GiB, total 1167633 files 71.130 GiB, 0 errors ETA 14:52
...
# Dauert etwa 35 Minuten (19:27 + 14:52)

Nach Fertigstellung der Ausführung:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uli:~$ time restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --exclude-caches --exclude=".cache" --exclude="Cache*" --exclude="Downloads" --exclude=".m2*" --exclude=".gradle*" --exclude="*.log" .
enter password for repository:
repository 3c87d0bd opened successfully, password is correct
created new cache in /home/uli/.cache/restic
no parent snapshot found, will read all files

Files:       1167634 new,     0 changed,     0 unmodified
Dirs:        252425 new,     0 changed,     0 unmodified
Added to the repo: 57.334 GiB

processed 1167634 files, 71.137 GiB in 31:34
snapshot 2c9c8bc0 saved

real  31m38,701s
user  9m47,324s
sys   4m13,129s

Bei der ersten Sicherung werden alle Dateien gesichtert. Dementsprechend dauert diese Sicherung relativ lange!

Folgesicherung

Erneute Sicherung grob 1 Stunde später:

1
2
3
4
uli:~$ time restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --exclude-caches --exclude=".cache" --exclude="Cache*" --exclude="Downloads" --exclude=".m2*" --exclude=".gradle*" --exclude="*.log" .
enter password for repository:
...
# Dauert etwa 2 Minuten

Nach Fertigstellung der Ausführung:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uli:~$ time restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --exclude-caches --exclude=".cache" --exclude="Cache*" --exclude="Downloads" --exclude=".m2*" --exclude=".gradle*" --exclude="*.log" .
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct
using parent snapshot 2c9c8bc0
[0:28] 414853 files 29.702 GiB, total 995410 files 61.361 GiB, 0 errors

Files:          14 new,    53 changed, 1167569 unmodified
Dirs:            1 new,    56 changed, 252369 unmodified
Added to the repo: 40.397 MiB

processed 1167636 files, 71.131 GiB in 1:16
snapshot 9bcd9d85 saved

real  1m20,328s
user  1m57,693s
sys   0m25,038s

Tagessicherungen

In den nächsten Tagen werde ich regelmässig weitere Sicherungen erstellen!

Sicherungen sichten

Leeres Sicherungsmedium

1
2
3
uli:~$ restic snapshots --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct

Sicherungsmedium mit einer Sicherung

1
2
3
4
5
6
7
8
uli:~$ restic snapshots --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct
ID        Time                 Host        Tags        Paths
----------------------------------------------------------------
2c9c8bc0  2021-11-14 14:53:18  ulicsl                  /home/uli
----------------------------------------------------------------
1 snapshots

Sicherungsmedium mit vielen Sicherungen

1
2
3
4
5
6
7
8
9
10
11
uli:~$ restic snapshots --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct
ID        Time                 Host        Tags        Paths
----------------------------------------------------------------
2c9c8bc0  2021-11-14 14:53:18  ulicsl                  /home/uli
68b329d2  2021-11-14 16:12:34  ulicsl                  /home/uli
893e3409  2021-11-15 06:03:57  ulicsl                  /home/uli
...
----------------------------------------------------------------
10 snapshots

Gesicherte Dateien zurückspielen

Meiner aktuellen Ansicht nach geht das Zurückspielen am einfachsten über das Einbinden der Sicherungen. Dazu brauchst Du zwei Terminalfenster:

  • Fenster 1: Einbindefenster
  • Fenster 2: Recherchefenster

Einbindefenster

1
2
3
4
5
6
7
8
9
10
uli:~$ mkdir mnt-restic
uli:~$ restic mnt mnt-restic --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct
Now serving the repository at mnt-restic/
When finished, quit with Ctrl-c or umount the mountpoint.

# Nach Ende der Recherchen...
Ctrl-c ^C
uli:~$ rmdir mnt-restic

Recherchefenster

Im Recherchefenster können die Sicherungen durchsucht werden:

1
2
3
4
5
6
uli:~$ ls mnt-restic
hosts  ids  snapshots  tags
uli:~$ ls mnt-restic/snapshots
2021-11-14T14:53:18+01:00  2021-11-14T15:32:40+01:00  2021-11-15T06:26:13+01:00  latest
uli:~$ ls mnt-restic/snapshots/latest
# Inhalt der letzten Sicherung wird angezeigt

Die oberste Ebene hilft beim Suchen:

  • snapshots: Für jeden Sicherungslauf ein Datum –> sinnvoll für das Rückspielen nach Datum
  • hosts: Für jeden Sicherungsrechner ein Verzeichnis, darunter dann Datum, etc

Ich denke, man findet sich da recht einfach zurecht!

Audit-Kennworte vergeben

Vorhandene Kennworte auflisten

Sicherungsmedium mit einem Kennwort:

1
2
3
4
5
6
7
uli:~$ restic key list --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct
 ID        User  Host    Created
--------------------------------------------
*528d538b  uli   ulicsl  2021-11-14 14:52:52
--------------------------------------------

Zusätzliches Kennwort vergeben

Wir vergeben immer ein zusätzliches Kennwort, das wir ausdrucken und an zentraler Stelle ablegen, damit “notfalls” auch jemand anders als ich Zugriff auf die Sicherungen hat, bspw. um zu Sichten, ob die Sicherungen regelmässig erfolgen:

1
2
3
4
5
6
uli:~$ restic key add --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
enter password for repository:
repository 8e8d2ec7 opened successfully, password is correct
enter new password:
enter password again:
saved new key as <Key of uli@ulicsl, created on 2021-11-15 06:40:54.754677511 +0100 CET m=+14.738183040>

Für meine Tests habe ich hier das Kennwort “uli-audit” verwendet!

Hier die Kennwortliste:

1
2
3
4
5
6
7
uli:~$ restic key list --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}"
repository 8e8d2ec7 opened successfully, password is correct
 ID        User  Host    Created
--------------------------------------------
 97e69364  uli   ulicsl  2021-11-15 06:40:54
*528d538b  uli   ulicsl  2021-11-14 14:52:52
--------------------------------------------

Links

Änderungen

  • 2021-11-17 – Weg mit DP_HOSTNAME
  • 2021-11-16 – Installation via DP-Paket
  • 2021-11-15 – Audit-Kennwort
  • 2021-11-10 – Erste Version