Website-Suche

So erstellen Sie sichere und effiziente Backups mit Restic


Restic ist ein plattformübergreifendes, kostenloses Open-Source-Programm, das in Go geschrieben wurde. Wir können es verwenden, um komprimierte, verschlüsselte und platzsparende Backups zu erstellen, da es intelligent genug ist, nur geänderte Fragmente von Dateien zu archivieren. Restic kann viele Speicherdienste als Ziele verwenden, wie z.B. Google Drive oder AWS (Amazon Web Services) S3-Buckets, funktioniert aber auch lokal und über reine SFTP-Verbindungen.

In diesem Tutorial erfahren Sie, wie Sie Restic auf den am häufigsten verwendeten Linux-Distributionen installieren und wie Sie es verwenden, um Daten sicher zu erstellen und wiederherzustellen.

In diesem Tutorial lernen Sie:

  • So installieren Sie Restic auf der am häufigsten verwendeten Linux-Distribution
  • So initialisieren und mounten Sie ein Restic-Repository
  • So erstellen Sie einen Snapshot, listen dessen Inhalt auf und extrahieren ihn

Installation von Restic

Sehen wir uns zunächst an, wie Sie Restic auf unserem System installieren. Wenn wir RHEL (Red Hat Enterprise Linux) oder einen seiner Klone, wie z. B. Rocky Linux, verwenden, müssen wir das EPEL-Repository zu den Systemsoftwarequellen hinzufügen, bevor wir mit der Installation fortfahren können. Auf Rocky können wir dies tun, indem wir einfach das Paket "epel-release" installieren:

sudo dnf install epel-release

Um EPEL auf einem RHEL-System hinzuzufügen, müssen wir stattdessen die entsprechende Version des Pakets epel-release von der Projektwebsite herunterladen. Angenommen, wir verwenden RHEL 9, dann würden wir z. B. Folgendes ausführen:

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Wenn wir auf Fedora laufen, müssen wir nichts Besonderes tun, da das restic-Paket im offiziellen Repository verfügbar ist. In all diesen Distributionen können wir Restic installieren, indem wir Folgendes ausführen:

sudo dnf install restic

Die Installation von Restic auf Debian-basierten Distributionen ist nur eine Frage des folgenden Befehls:

sudo apt install restic

Als alternative, verteilungsübergreifende Methode können wir die vorgefertigte Restic-Binärdatei direkt aus dem Github-Repository des Projekts herunterladen und installieren. Zum Zeitpunkt des Schreibens ist die neueste verfügbare Version 0.16.2.

Initialisieren eines Repositorys

Restic ist in der Lage, Daten lokal, über SFTP-Verbindungen und auf verschiedenen Plattformen wie AWS oder Google Drive zu sichern. In diesem Tutorial erstellen wir der Einfachheit halber ein lokales Repository. Um ein Repository zu erstellen, verwenden wir den Befehl restic init und geben den Pfad des Ziel-Repositorys als Argument für die Option -r an. Im folgenden Beispiel erstellen wir das Repository "restic-repo" unter dem Verzeichnis /mnt:

sudo restic init -r /mnt/restic-repo

Da unsere Daten verschlüsselt sind, werden wir aufgefordert, ein Passwort für das Repository anzugeben. Jedes Mal, wenn wir restic aufrufen, müssen wir es auf den Speicherort des Repositorys verweisen. Das kann schnell nervig werden. Um dies zu vermeiden, können wir einfach den Pfad des Repositorys als Wert der Umgebungsvariablen RESTIC_REPOSITORY zuweisen.

Erstellen unseres ersten Backups

Sobald wir unser Repository initialisiert haben, können wir unseren ersten Snapshot erstellen. Um einen Snapshot zu erstellen, verwenden wir den Befehl backup. Im einfachsten Fall geben wir nur den Pfad zum Repository und die Liste der Dateien an, die wir in das Backup aufnehmen möchten. Angenommen, wir möchten den gesamten Inhalt des Verzeichnisses /etc archivieren, würden wir Folgendes ausführen:

sudo restic backup -r /mnt/restic-repo /etc

Anstatt die Liste der Dateien direkt von der Befehlszeile zu übergeben, können wir sie eine pro Zeile in eine Datei schreiben. Dann übergeben wir den Pfad der Datei als Argument an die Option --files-from. Sobald der Snapshot erstellt ist, erhalten wir einen Bericht mit wichtigen Informationen wie der Anzahl der darin enthaltenen Dateien und Verzeichnisse:

repository a6797806 opened (version 2, compression level auto)
created new cache in /root/.cache/restic
no parent snapshot found, will read all files

Files: 1477 new, 0 changed, 0 unmodified
Dirs: 427 new, 0 changed, 0 unmodified
Added to the repository: 24.957 MiB (5.953 MiB stored)

processed 1477 files, 23.789 MiB in 0:00

Der erste Snapshot enthält alle Dateien. Nachfolgende Dateien nehmen weniger Zeit in Anspruch, da sie nur die Fragmente von Dateien enthalten, die tatsächlich geändert wurden.

Ausschließen von Dateien und Verzeichnissen aus einem Snapshot

Im vorherigen Beispiel haben wir den gesamten Inhalt des Verzeichnisses /etc in den Snapshot aufgenommen. Manchmal möchten wir jedoch bestimmte Dateien und Verzeichnisse von der Sicherung ausschließen. Wir können Ausschlussmuster als Argument für die Option --exclude angeben. Nehmen wir zum Beispiel an, wir möchten alle Dateien mit der Erweiterung ".py" ausschließen. Hier ist der Befehl, den wir ausführen würden:

sudo restic backup -r /mnt/restic-repo /etc --exclude *.py

Wir können die Option --exclude mehrmals wiederholen, um mehrere Ausschlussmuster anzugeben. Wir haben auch die Möglichkeit, alle Ausschlussmuster in eine Datei zu schreiben, eines pro Zeile, und dann den Pfad dieser Datei als Argument an die Option --exclude-file zu übergeben.

Auflisten der Snapshots in einem Repository

Jedes Mal, wenn wir restic verwenden, wird ein neuer Snapshot erstellt. Um die Liste der Snapshots in einem Repository abzurufen, verwenden wir den Befehl restic snapshots. Um alle Snapshots im Repository "restic-repo" aufzulisten, würden wir Folgendes ausführen:

sudo restic snapshots -r /mnt/restic-repo

In diesem Fall erzeugt der Befehl nach Angabe des Repository-Kennworts die folgende Ausgabe:

repository a6797806 opened (version 2, compression level auto)
ID Time Host Tags Paths
------------------------------------------------------------
982dac84 2023-11-23 12:47:53 fingolfin /etc
a91be944 2023-11-24 10:16:50 fingolfin /etc
------------------------------------------------------------
2 snapshots

Die Ausgabe enthält Informationen zu den einzelnen Momentaufnahmen:

  • ID
  • Erstellungsdatum
  • Host, auf dem der Snapshot erstellt wurde
  • Schilder
  • Enthaltene Dateien

Die wichtigste Information hier ist die ID, da wir sie verwenden, um auf einen Snapshot zu verweisen, wenn wir seinen Inhalt auflisten oder extrahieren möchten.

Auflisten der Dateien in einem Snapshot

Um eine Liste der Dateien zu erhalten, die in einem Snapshot enthalten sind, verwenden wir den Befehl restic ls und übergeben die ID des Snapshots als Argument. Angenommen, wir möchten den Inhalt des ersten Snapshots überprüfen, den wir erstellt haben (a91be944). Wir würden laufen:

sudo restic ls -r /mnt/restic-repo a91be944

Wir können uns auch dafür entscheiden, den Inhalt eines oder mehrerer bestimmter Verzeichnisse abzurufen, die im Snapshot enthalten sind. Um beispielsweise nur die Dateien aufzulisten, die im Verzeichnis /etc/xdg enthalten sind, würden wir Folgendes ausführen:

sudo restic ls -r /mnt/restic-repo a91be944 /etc/xdg

Bereitstellen eines Repositorys

Um den Inhalt eines Projektarchivs zu überprüfen, können wir es mit dem Befehl restic mount mounten. Wir müssen nur das Verzeichnis angeben, das wir als Mountpoint verwenden möchten. Angenommen, wir möchten das Repository im Verzeichnis /media mounten, würden wir Folgendes ausführen:

sudo restic mount -r /mnt/restic-repo /media

Sobald ein Repository gemountet ist, können alle darin enthaltenen Snapshots im Verzeichnis "snapshots" (in diesem Fall /media/snapshots) gefunden werden:

ls -l /media/snapshots
total 1
dr-xr-xr-x. 2 root root 0 Nov 23 12:47 2023-11-23T12:47:53+01:00
dr-xr-xr-x. 2 root root 0 Nov 24 10:16 2023-11-24T10:16:50+01:00
lrwxrwxrwx. 1 root root 25 Nov 24 10:16 latest -> 2023-11-24T10:16:50+01:00

Jedes Verzeichnis enthält den gesamten Dateibaum, wobei "latest" nur ein symbolischer Link zum neuesten Snapshot ist:

sudo tree /media/snapshots -L 2
/media/snapshots
├── 2023-11-23T12:47:53+01:00
│   └── etc
├── 2023-11-24T10:16:50+01:00
│   └── etc
└── latest -> 2023-11-24T10:16:50+01:00

Wiederherstellen von Daten

Der wichtigste Teil eines Backups ist die Möglichkeit, die darin enthaltenen Daten einfach wiederherzustellen. Wenn wir restic verwenden, verwenden wir zum Wiederherstellen von Daten aus einem Snapshot den Befehl restore. Wir übergeben die ID des Snapshots, den wir wiederherstellen möchten, als Argument und das Verzeichnis, in das wir das Backup extrahieren möchten, als Argument der Option --target:

sudo restic restore -r /mnt/restic-repo latest --target=/

Wir können entscheiden, ob der gesamte Inhalt eines Snapshots, wie wir es oben getan haben, oder nur Teile davon wiederhergestellt werden sollen. Um nur einen Unterordner aus einem Snapshot zu extrahieren, z. B. /etc/xdg, können wir die folgende Syntax verwenden:

sudo restic restore -r /mnt/restic-repo latest:/etc/xdg --target=/

Beachten Sie, dass, wenn ein Verzeichnis wie oben angegeben wird, nur dessen Inhalt extrahiert wird, nicht das Verzeichnis selbst.  Wir können auch angeben, welche Dateien wiederhergestellt werden sollen, indem wir die Optionen --include und --exclude oder ihre Entsprechungen ohne Berücksichtigung der Groß- und Kleinschreibung verwenden: --iinclude und --iexclude. Um beispielsweise nur Dateien mit der Erweiterung ".conf" zu extrahieren, würden wir Folgendes ausführen:

sudo restic restore -r /mnt/restic-repo latest --include=*.conf --target=/

Schlüsse

In diesem Tutorial haben wir gelernt, wie Sie Daten mit Restic sichern und wiederherstellen können. Restic funktioniert ähnlich wie Borg: Es erzeugt komprimierte, verschlüsselte und platzsparende deduplizierte Snapshots. Hier haben wir gesehen, wie man ein Repository initialisiert und mountet und wie man den Inhalt von Restic-Snapshots auflistet und wiederherstellt. Aus offensichtlichen Gründen haben wir in diesem Artikel nur die Grundkonzepte von Restic behandelt; Um mehr über dieses wunderbare Programm zu erfahren, werfen Sie bitte einen Blick auf die Man-Seite oder besuchen Sie die offizielle Website des Projekts!

Verwandte Artikel: