Im letzten Artikel Restic - Ein Backupkonzept - Automatisieren! haben wir mittels Restic und Rclone eine Datensicherungsmöglichkeit erstellt, die uns vollautomatisch Backup's in eine Nextclod-Installation sichert.
So weit, so gut. Aber ein Backup nützt nichts, wenn man die Daten nicht testet und auch mal die Wiederherstellung ausprobiert. Restic legt ja nun bei jedem Vorgang einen Snapshot an. Hier eine kurze Erklärung wie man diese testet und wiederherstellt.
Snapshot auflisten
Mit folgendem Befehl listet man alle Snaphots auf.
restic -r rclone:nextcloud:TEST snapshots
Ausgabe:
restic -r rclone:nextcloud:TEST snapshots
enter password for repository:
password is correct
ID Date Host Tags Directory
----------------------------------------------------------------------
5c190a9a 2018-04-25 17:32:56 frank-MS-7A34 /media/
80dbfa5e 2018-04-25 17:33:54 frank-MS-7A34 /media/
7c894658 2018-04-25 17:36:06 frank-MS-7A34 /media/
32f6138b 2018-04-25 17:39:09 frank-MS-7A34 /media/
51746817 2018-04-25 17:39:34 frank-MS-7A34 /media/
5fba5e1d 2018-04-25 17:39:51 frank-MS-7A34 /media/
0f4b2d7e 2018-04-25 20:24:40 frank-MS-7A34 /media/
a3622a2b 2018-04-25 20:26:17 frank-MS-7A34 /media/
c15e6293 2018-04-25 20:29:03 frank-MS-7A34 /media/
3c13b348 2018-04-26 20:00:04 frank-MS-7A34 /media/
ad607561 2018-04-27 20:00:05 frank-MS-7A34 /media/
----------------------------------------------------------------------
11 snapshots
Snapshot testen
restic -r rclone:nextcloud:TEST check --read-data
using temporary cache in /tmp/restic-check-cache-935353687
enter password for repository:
password is correct
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
read all data
[0:00] 100.00% 5 / 5 items
duration: 0:00
no errors were found
Wir sehen, das die Daten in Ordnung sind.
Snapshot wiederherstellen
Die Snapshot-ID kopieren und dann folgenden Befehl eingeben
restic -r rclone:nextcloud:TEST restore ad607561 --target /home/frank/Test_Restic
enter password for repository:
password is correct
restoring to /home/frank/Test_Restic
Danach befinden sich die Daten im Ordner /home/frank/Test_Restic
Script erweitern
Um das Ganze jetzt rund zu machen, brauchen wir ein Script, was die Daten sichert. Nach der Sicherung uns die Daten testet und bei einem Fehler eine Ausgabe in ein Logfile macht.
Ok, also manipulieren wir ein File um den Fehler abfangen zu können.
./check.sh
using temporary cache in /tmp/restic-check-cache-068904630
password is correct
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
error: load <snapshot/a82ece8693>: invalid data returned
read all data
[0:00] 100.00% 3 / 3 items
duration: 0:00
Fatal: repository contains errors
Abgebrochen
Den Snapshot a82.... habe ich manipuliert, eine Fehlermeldung "Abgebrochen" gebe ich auch schon aus. Das File sieht so aus.
#!/bin/bash
# Script um mit Restic & Rclone Daten zu checken!
# PW hinterlegen
export RESTIC_PASSWORD=12345678
restic -r rclone:nextcloud:Daten check --read-data
failcode=$?
d='date +%d.%m.%Y_%H:%M:%S'
if [ $failcode != 0 ]
then
echo $d "Ein Fehler ist aufgetreten!" >> /home/frank/restic.log
fi
Bei einem Fehler wird geloggt. Ausgabe:
27.04.2018_22:13:51 Ein Fehler ist aufgetreten!
27.04.2018_22:14:35 Ein Fehler ist aufgetreten!
Das Ganze basteln wir jetzt mit dem Backup-Script zusammen.
#!/bin/bash
# Script um mit Restic & Rclone Daten automatisiert zu sichern!
# Repo definieren und PW hinterlegen
export RESTIC_PASSWORD=12345678
#Was soll gesichert werden?
backup_pfad=/media/
#Programm Start
restic -r rclone:nextcloud:TEST backup $backup_pfad
restic -r rclone:nextcloud:TEST check --read-data
failcode=$?
d='date +%d.%m.%Y_%H:%M:%S'
if [ $failcode != 0 ]
then
echo $d "Ein Fehler ist aufgetreten!" >> /home/frank/restic.log
fi
Done!