So sichern Sie Daten auf einem Objektspeicherdienst mit dem Restic Backup-Client

Einführung

Restic ist ein sicherer und effizienter Sicherungsclient, der in der Sprache Go geschrieben ist. Es kann lokale Dateien in verschiedenen Backend-Repositorys sichern, z. B. in einem lokalen Verzeichnis, einem SFTP-Server oder einem S3-kompatiblen Objektspeicherdienst.

In diesem Lernprogramm werden wir Restic installieren und ein Repository auf einem Objektspeicherdienst initialisieren. Wir werden dann einige Dateien im Repository sichern. Schließlich automatisieren wir unsere Backups, um stündliche Snapshots zu erstellen und alte Snapshots bei Bedarf automatisch zu entfernen.

Voraussetzungen

Für dieses Tutorial benötigen Sie einen UNIX-basierten Computer mit einigen Dateien, die Sie sichern möchten. Obwohl Restic für Mac, Linux und Windows verfügbar ist, funktionieren die in diesem Lernprogramm verwendeten Befehle und Techniken nur unter MacOS und Linux.

Für die Ausführung von Restic ist ausreichend Arbeitsspeicher erforderlich. Sie sollten daher mindestens 1 GB RAM zur Verfügung haben, um Fehler beim Empfang zu vermeiden.

Sie müssen außerdem die folgenden Details zu Ihrem Objektspeicherdienst kennen:

  • Zugangsschlüssel

  • Geheimer Schlüssel

  • Server-URL

  • Bucket-Name

Wenn Sie den ObjektspeicherdienstDigitalOcean Spacesverwenden, können Sie ein Leerzeichen einrichten und alle oben genannten Informationen abrufen, indem Sie unserem LernprogrammHow to Create a DigitalOcean Space and API Key folgen.

Sobald Sie Ihre Objektspeicherinformationen haben, fahren Sie mit dem nächsten Abschnitt fort, um die Restic-Software zu installieren.

Installieren des Restic Backup-Clients

Restic ist als vorkompilierte ausführbare Datei für viele Plattformen verfügbar. Dies bedeutet, dass wir eine einzelne Datei herunterladen und ausführen können, ohne dass ein Paketmanager oder Abhängigkeiten erforderlich sind.

Um die richtige Datei zum Herunterladen zu finden, navigieren Sie zunächst mit Ihrem Webbrowser zuRestic’s release page on GitHub. Eine Liste der Dateien finden Sie unter der ÜberschriftDownloads.

Für ein 64-Bit-Linux-System (die am häufigsten verwendete Serverumgebung) soll die Datei mit_linux_amd64.bz2 enden.

Suchen Sie unter MacOS nach der Datei mit_darwin_amd64.bz2.

Klicken Sie mit der rechten Maustaste auf die richtige Datei für Ihr System und wählen Sie dannCopy Link Address (der Wortlaut kann in Ihrem Browser leicht abweichen). Dadurch wird die Download-URL in Ihre Zwischenablage kopiert.

Stellen Sie als Nächstes in einer Terminalsitzung auf dem Computer, den Sie sichern (wenn es sich um einen Remotecomputer handelt, müssen Sie sich möglicherweise zuerst über SSH anmelden), sicher, dass Sie sich in Ihrem Ausgangsverzeichnis befinden, und laden Sie dann die Datei mitcurlherunter. s:

cd ~
curl -LO https://github.com/restic/restic/releases/download/v0.7.3/restic_0.7.3_linux_amd64.bz

Entpacke die heruntergeladene Datei:

bunzip2 restic*

Kopieren Sie dann die Datei nach/usr/local/bin und aktualisieren Sie ihre Berechtigungen, um sie ausführbar zu machen. Für diese beiden Aktionen müssen wirsudo verwenden, da ein normaler Benutzer keine Berechtigung zum Schreiben in/usr/local/bin hat:

sudo cp restic* /usr/local/bin/restic
sudo chmod a+x /usr/local/bin/restic

Testen Sie, ob die Installation erfolgreich war, indem Sie den Befehlresticohne Argumente aufrufen:

restic

Einige Hilfetexte sollten auf Ihrem Bildschirm gedruckt werden. In diesem Fall wurde die Binärdateiresticordnungsgemäß installiert. Als Nächstes erstellen wir eine Konfigurationsdatei für Restic und initialisieren dann unser Objektspeicher-Repository.

Erstellen einer Konfigurationsdatei

Restic muss unseren Zugriffsschlüssel, unseren geheimen Schlüssel, die Verbindungsdetails zum Objektspeicher und das Repository-Passwort kennen, um ein Repository zu initialisieren, auf das wir dann ein Backup durchführen können. Wir werden Restic diese Informationen mitenvironment variables zur Verfügung stellen.

Umgebungsvariablen sind Informationen, die Sie in Ihrer Shell definieren können und die an die von Ihnen ausgeführten Programme weitergegeben werden. Beispielsweise kann jedes Programm, das Sie in der Befehlszeile ausführen, die Umgebungsvariable$PWDehen, die den Pfad des aktuellen Verzeichnisses enthält.

Es ist gängige Praxis, vertrauliche Token und Kennwörter in Umgebungsvariablen abzulegen, da deren Angabe in der Befehlszeile nicht sicher ist. Da wir unsere Sicherungen später automatisieren werden, speichern wir diese Informationen in einer Datei, auf die unser Skript zugreifen kann.

Öffnen Sie zunächst eine Datei in Ihrem Home-Verzeichnis:

nano ~/.restic-env

Dadurch wird eine leere Datei mit dem Texteditor vonnanogeöffnet. Wenn wir fertig sind, besteht die Datei aus vierexport Befehlen. Dieseexport-Anweisungen definieren Umgebungsvariablen und stellen sie allen Programmen zur Verfügung, die Sie in Zukunft ausführen:

restic-env
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export RESTIC_REPOSITORY="s3:server-url/bucket-name"
export RESTIC_PASSWORD="a-strong-password"

Der Zugriff und die geheimen Schlüssel werden von Ihrem Objektspeicherdienst bereitgestellt. Möglicherweise möchten Sie einen eindeutigen Schlüsselsatz nur für Restic generieren, damit der Zugriff für den Fall, dass die Schlüssel verloren gehen oder beschädigt werden, problemlos widerrufen werden kann.

Ein Beispiel für den Wert vonRESTIC_REPOSITORYwäre:s3:nyc3.digitaloceanspaces.com/example-bucket. Wenn Sie eine Verbindung zu einem Server über einen nicht standardmäßigen Port oder nur über ungesichertes HTTP herstellen müssen, fügen Sie diese Informationen wies3:http://example-server:3000/example-bucket in die URL ein.

RESTIC_PASSWORD definiert ein Kennwort, mit dem Restic Ihre Backups verschlüsselt. Diese Verschlüsselung erfolgt lokal, sodass Sie auf einem nicht vertrauenswürdigen Offsite-Server sichern können, ohne sich Gedanken über den Inhalt Ihrer Dateien zu machen.

Wählen Sie hier ein sicheres Passwort und kopieren Sie es an einen sicheren Ort für die Sicherung. Eine Möglichkeit, ein sicheres Zufallskennwort zu generieren, besteht darin, den Befehlopenssl zu verwenden:

openssl rand -base64 24
Outputj8CGOSdz8ibUYK137wtdiD0SJiNroGUp

Dies gibt eine 24-stellige Zufallszeichenfolge aus, die Sie kopieren und in die Konfigurationsdatei einfügen können.

Sobald alle Variablen richtig ausgefüllt sind, speichern und schließen Sie die Datei.

Das Repository wird initialisiert

Um die Konfiguration in unsere Shell-Umgebung zu laden, verwenden wirsourcedie gerade erstellte Datei:

source ~/.restic-env

Sie können überprüfen, ob dies funktioniert, indem Sie eine der Variablen ausdrucken:

echo $RESTIC_REPOSITORY

Ihre Repository-URL sollte ausgedruckt werden. Jetzt können wir unser Repository mit dem Restic-Befehl initialisieren:

restic init
Outputcreated restic backend 57f73c1afc at s3:nyc3.digitaloceanspaces.com/example-bucket

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Das Repository ist jetzt bereit, Sicherungsdaten zu empfangen. Wir senden diese Daten als Nächstes.

Ein Verzeichnis sichern

Nachdem unser Remote-Objektspeicher-Repository initialisiert wurde, können wir Sicherungsdaten dorthin übertragen. Zusätzlich zur Verschlüsselung führt Restic während des Backups Abweichungen und Deduplizierungen durch. Dies bedeutet, dass unsere erste Sicherung eine vollständige Sicherung aller Dateien ist und nachfolgende Sicherungen nur neue Dateien und Änderungen übertragen müssen. Außerdem werden doppelte Daten erkannt und nicht in das Backend geschrieben, was Platz spart.

Erstellen Sie vor dem Sichern eine einfache Textdatei in Ihrem Ausgangsverzeichnis, wenn Sie auf einem leeren System testen und einige Beispieldateien zum Sichern benötigen:

echo "sharks have no organs for producing sound" >> ~/facts.txt

Dadurch wird einefacts.txt-Datei erstellt. Sichern Sie es jetzt zusammen mit dem Rest Ihres Home-Verzeichnisses:

restic backup ~
Outputscan [/home/sammy]
scanned 4 directories, 14 files in 0:00
[0:04] 100.00%  2.558 MiB/s  10.230 MiB / 10.230 MiB  18 / 18 items  0 errors  ETA 0:00
duration: 0:04, 2.16MiB/s
snapshot 427696a3 saved

Restic wird eine Weile arbeiten und Ihnen währenddessen Live-Statusaktualisierungen anzeigen und dann die neue Schnappschuss-ID ausgeben (oben hervorgehoben).

[.note] #Note: Wenn Sie ein anderes Verzeichnis sichern möchten, ersetzen Sie die obigen~ durch den Pfad des Verzeichnisses. Möglicherweise müssen Siesudo vorrestic backup verwenden, wenn das Zielverzeichnis nicht Ihrem Benutzer gehört. Wenn Siesudo zum Sichern benötigen, denken Sie daran, es beim Wiederherstellen des Snapshots erneut zu verwenden. Andernfalls können Fehler auftreten, wenn Sie die Berechtigungen nicht ordnungsgemäß festlegen können.
#

Als Nächstes erfahren Sie, wie Sie weitere Informationen zu den in unserem Repository gespeicherten Snapshots erhalten.

Auflisten von Snapshots

Verwenden Sie den Unterbefehlsnapshots, um die im Repository gespeicherten Sicherungen aufzulisten:

restic snapshots
OutputID        Date                 Host         Tags        Directory
----------------------------------------------------------------------
427696a3  2017-10-23 16:37:17  restic-test              /home/sammy

Sie sehen die Snapshot-ID, die wir bei unserer ersten Sicherung erhalten haben, einen Zeitstempel für die Erstellung des Snapshots, den Hostnamen, die Tags und das gesicherte Verzeichnis.

UnsereTags-Spalte ist leer, da wir in diesem Beispiel keine verwendet haben. Sie können einem Snapshot Tags hinzufügen, indem Sie ein--tag-Flag gefolgt vom Tag-Namen einfügen. Sie können mehrere Tags angeben, indem Sie die Option--tag wiederholen.

Tags können hilfreich sein, um Snapshots später zu filtern, wenn Sie Aufbewahrungsrichtlinien einrichten, oder wenn Sie manuell nach einem bestimmten Snapshot suchen, der wiederhergestellt werden soll.

DasHost ist in der Liste enthalten, da Sie Snapshots von mehreren Hosts an ein einzelnes Repository senden können. Sie müssen das Repository-Kennwort auf jeden Computer kopieren. Sie können auch mehrere Kennwörter für Ihr Repository einrichten, um eine differenziertere Zugriffskontrolle zu erhalten. Weitere Informationen zum Verwalten von Repository-Kennwörtern finden Sie inthe official Restic docs.

Nachdem wir einen Snapshot hochgeladen haben und wissen, wie Sie den Inhalt unseres Repositorys auflisten, verwenden wir unsere Snapshot-ID, um die Wiederherstellung eines Backups zu testen.

Wiederherstellen eines Schnappschusses

Wir werden einen gesamten Snapshot in einem temporären Verzeichnis wiederherstellen, um sicherzustellen, dass alles ordnungsgemäß funktioniert. Verwenden Sie eine Snapshot-ID aus der Auflistung im vorherigen Schritt. Wir werden die wiederhergestellten Dateien in/tmp/restore in ein neues Verzeichnis senden:

restic restore 427696a3 --target /tmp/restore
Outputrestoring  to /tmp/restore

Wechseln Sie in das Verzeichnis und listen Sie dessen Inhalt auf:

cd /tmp/restore
ls

Sie sollten das Verzeichnis sehen, das wir gesichert haben. In diesem Beispiel wäre dies das Ausgangsverzeichnis des Benutzerssammy. Geben Sie das wiederhergestellte Verzeichnis ein und listen Sie die darin enthaltenen Dateien auf:

cd sammy
ls
Outputfacts.txt  restic_0.7.3_linux_amd64

Unserefacts.txt-Datei befindet sich dort, zusammen mit der Restic-Binärdatei, die wir zu Beginn des Tutorials extrahiert haben. Drucken Siefacts.txt auf den Bildschirm, um sicherzustellen, dass es unseren Erwartungen entspricht:

cat facts.txt

Sie sollten die Hai-Tatsache sehen, die wir zuvor in die Datei eingefügt haben. Es funktionierte!

[.note] #Note: Wenn Sie nicht alle Dateien in einem Snapshot wiederherstellen möchten, können Sie die Optionen mit den Optionen--include und--exclude optimieren. Lesen Siethe Restore section of the Restic documentation, um mehr zu erfahren.
#

Nachdem wir wissen, dass das Sichern und Wiederherstellen funktioniert, können Sie die Erstellung neuer Snapshots automatisieren.

Backups automatisieren

Restic enthält den Befehlforget, um ein laufendes Archiv von Snapshots zu verwalten. Mitrestic forget --prune können Sie Richtlinien festlegen, wie viele Sicherungen täglich, stündlich, wöchentlich usw. gespeichert werden sollen. Sicherungen, die nicht der Richtlinie entsprechen, werden aus dem Repository gelöscht.

Wir werden den Systemdienstcronverwenden, um jede Stunde eine Sicherungsaufgabe auszuführen. Öffnen Sie zunächst die crontab Ihres Benutzers:

crontab -e

Möglicherweise werden Sie aufgefordert, einen Texteditor auszuwählen. Wählen Sie Ihren Favoriten aus - odernano, wenn Sie keine Meinung haben - und drücken Sie dannENTER. Die Standard-Crontab für Ihren Benutzer wird in Ihrem Texteditor geöffnet. Es kann einige Kommentare geben, die die Crontab-Syntax erläutern. Fügen Sie am Ende der Datei Folgendes in eine neue Zeile ein:

crontab

. . .
42 * * * * . /home/sammy/.restic-env; /usr/local/bin/restic backup -q /home/sammy; /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7

Lassen Sie uns diesen Befehl schrittweise ausführen. 42 * * * * definiert, wanncron die Aufgabe ausführen soll. In diesem Fall wird es in den 42.minute von jedemhour,day,month undday of week ausgeführt. Weitere Informationen zu dieser Syntax finden Sie in unserem TutorialHow To Use Cron To Automate Tasks.

Als nächstes entspricht. /home/sammy/.restic-env;source ~/.restic-env, die wir zuvor ausgeführt haben, um unsere Schlüssel und Kennwörter in unsere Shell-Umgebung zu laden. Dies hat den gleichen Effekt in unserer crontab: Nachfolgende Befehle in dieser Zeile haben Zugriff auf diese Informationen.

/usr/local/bin/restic backup -q /home/sammy; ist unser Restic Backup-Befehl. Wir verwenden den vollständigen Pfad zurrestic-Binärdatei, da dercron-Service in/usr/local/bin nicht automatisch nach Befehlen sucht. In ähnlicher Weise buchstabieren wir den Pfad des Basisordners explizit mit/home/sammy, anstatt die Verknüpfung~ zu verwenden. Es ist am besten, beim Schreiben eines Befehls fürcron so explizit wie möglich zu sein. Wir verwenden das-q-Flag, um die Statusausgabe von Restic zu unterdrücken, da wir nicht da sind, um sie zu lesen.

Schließlich werden mit/usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7 alte Snapshots, die nicht mehr benötigt werden, basierend auf den angegebenen Aufbewahrungsflags entfernt. In diesem Beispiel werden 24-Stunden-Schnappschüsse und 7 tägliche Schnappschüsse gespeichert. Es gibt auch Optionen für wöchentliche, monatliche, jährliche und tagbasierte Richtlinien.

Wenn Sie den Befehl an Ihre Anforderungen angepasst haben, speichern Sie die Datei und schließen Sie den Texteditor. Die crontab wird installiert und aktiviert. Führen Sie nach einigen Stunden erneutrestic snapshots aus, um zu überprüfen, ob neue Snapshots hochgeladen werden.

Fazit

In diesem Lernprogramm haben wir eine Konfigurationsdatei für Restic mit unseren Objektspeicher-Authentifizierungsdetails erstellt, mit Restic ein Repository initialisiert, einige Dateien gesichert und die Sicherung getestet. Zuletzt haben wir den Prozess mit cron automatisiert.

Restic bietet mehr Flexibilität und Funktionen als hier beschrieben. Um mehr über Restic zu erfahren, werfen Sie einen Blick auf derenofficial documentation odermain website.