Jede Datenbank und jede Art von Daten (sofern für jemanden von Wichtigkeit) sollten regelmäßig gesichert werden, um einen Datenverlust bei einem System- oder Speichermedien-Crash oder auch ungewolltem Löschen vorzubeugen. Darum beschreibe ich hier, wie man den Raspberry Pi so konfigurieren kann, dass er automatisch jeden Tag ein Backup unserer weewx Installation mit allen Konfigurations- und Datendateien erstellt. Dieses Backup wird in meiner Anwendung automatisch auf einem Netzwerkserver (NAS) 1) gespeichert.
Hinweis: grundsätzlich kann man die hier beschriebene Konfiguration auch direkt (ohne SSH Verbindung) auf dem Raspberry Pi durchführen. Wir nutzen hier die SSH Verbindung, da dies die Dokumentation in diesem Wiki vereinfacht und wir an den kleinen Raspberry nicht extra Maus, Tastatur und Monitor anschließen müssen.
Um eine Datei oder wie hier einen ganzen Ordner zu sichern, gehen wir in 4 Schritten vor
1. die komplette zu sichernde Struktur in einem Archiv packen
2. das Archiv an einem entsprechend sicheren Ort speichern
3. die beiden Vorgänge 1. und 2. durch ein Script ausführen lassen
4. das Script automatisieren, dass es automatisch einmal pro Tag ausgeführt wird
1. bis 3. erschlagen wir mit einem Backup Script und 4. mittels des bereits aus der Zeitsynchronisierung bekannten cron
Dienstes.
Um ein Backup Script zu erstellen, wechseln wir zunächst in den Ordner /etc
cd /etc
Anschließend öffnen wir den Editor nano
und geben direkt den Dateinamen backup.sh
unseres neuen Scripts mit
nano backup.sh
Nun wird das Backup-Script im Editor wie folgt erstellt:
#!/bin/bash ## Dieses Script sichert die komplette Wetterstations-Software ## mit allen Einstellungen und Daten. ## 2017-02-23, MSchnack # Aktuelles Datum in Variable speichern DATE=$(date +%Y-%m-%d-%H%M%S) # Pfad zum Backup-Verzeichnis # Pfad sollte nicht mit "/" enden! # Man muß schreibberechtigt im entsprechenden Verzeichnis sein. BACKUP_DIR="/home/pi" # Verzeichnisse auflisten, die gesichert werden sollen. # Bei Verzeichnissen, für die der User keine durchgehenden Leserechte hat (z.B. /etc) sind Fehler vorprogrammiert. # Pfade sollte nicht mit "/" enden! SOURCE="/home/weewx " # Pfad(e) packen und als Backup ablegen # Komprimieren mit tar und gzip tar -czpf $BACKUP_DIR/$DATE-Wetterstation.tar.gz $SOURCE
Damit das Script ausführbar ist, müssen wir noch das passende Bit in den Datei-Rechten setzen
chmod u+x backup.sh
Nun können wir mit dem Befehl
./backup.sh
testen, ob unser Script funktioniert. Am im Script angegebenen Speicherort sollte jetzt eine Archivdatei liegen. Diese sollte man zur Sicherheit auch einmal entpacken und schauen, ob die korrekten Inhalte gesichert wurden. ACHTUNG! dabei nicht versehentlich die Original-Dateien auf dem System überschreiben!
Damit unser Backup Script regelmäßig einmal am Tag ausgeführt wird, muss noch ein crontab-Eintrag vorgenommen werden, damit der cron
Dienst das Script ausführt. Dazu zunächst die Datei /etc/crontab
mit dem Editor nano
öffnen:
nano /etc/crontab
Es wird eine neue Zeilen hinzugefügt. 7 18
am Beginn der Zeile gibt dem cron
Dienst die Anweisung in der 7. Minute der 18. Stunde den Eintrag auszuführen, also um 18:07 Uhr, die weiteren * bedeuten dann zusammen „täglich“. Die Ausführung soll als Benutzer root erfolgen und es soll die Datei /etc/backup.sh
ausgeführt werden. Der Zusatz > /dev/null 2>&1
leitet alle Ausgaben der Kommandozeile ins Nirwana um.
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) @reboot root ntpdate -s 0.de.pool.ntp.org 3 */5 * * * root ntpdate -s 0.de.pool.ntp.org 7 18 * * * root /etc/backup.sh > /dev/null 2>&1 #
Mit der Tastenkombination Strg + O
speichern wir die Änderung ab und mit Strg + X
verlassen wir den Editor nano
.