Backup von Daten auf dem Raspberry Pi erstellen
Ein Backup machen ist sinnvoll. Aber das ganze händisch machen ist weniger sinnvoll. Was ist, wenn man es mal vergisst? Genau dann braucht man es. Also automatisiert man das Backup. Beispielsweise einmal Nachts, zu einer Zeit, wo das System, auf dem ein Backup gemacht werden soll, gerade nichts zu tun hat.
Aufgabe
- Erzeugen Sie ein Backup Ihres User-Verzeichnisses "/home/pi" auf einem USB-Stick.
- Erzeugen Sie eine ausführbare Skript-Datei, dass das Backup ausführt.
- Das Backup soll automatisch jeden Tag um ein Uhr Nachts angelegt werden.
Lösung: Backup auf einen USB-Stick erstellen
Ein Backup zu erstellen macht in der Regel nur Sinn, wenn man das Backup außerhalb des Systems speichert. Zum Beispiel auf einen USB-Stick. Dazu haben wir einen solchen Stick beim Einstecken per "usbmount" automatisch auf "/media/usb" ins System integriert.
Alternativ kann das Backup auch auf "/dev/sda1" erfolgen. Nur muss man dann sicherstellen, dass der USB-Stick auch tatsächlich dort zu finden ist.
Jetzt geht es darum, ein Backup auf dem USB-Stick zu erstellen. Grundsätzlich gibt es dafür mehrere Möglichkeiten. In diesem Fall wählen wir mit "tar" ein ziemlich altes Programm, dass aber sehr weit verbreitet und in jedem Linux vorhanden ist.
"tar" erzeugt Archive mit der Datei-Endung ".tar". Es handelt sich dabei um Zusammenfassungen von Dateien. Neben der Verzeichnisstruktur, werden auch Rechte und Eigentümer gespeichert. Das bedeutet, wenn man die Sicherung zurückspielt, ist alles wieder da. Um ein Backup zu erstellen ist "tar" perfekt.
Der Parameter "c" weist "tar" an, eine Archiv-Datei zu erstellen.
Mit dem Parameter "P" merkt sich "tar" den ursprünglichen Ort der archivierten Dateien und Verzeichnisse. Das hat aber auch die Konsequenz, dass man die Dateien nur an ihren ursprünglichen Ort wiederherstellen kann. Will man es flexibel, dann sollte man auf den Parameter "P" verzichten, muss aber bei der Wiederherstellung genau aufpassen, wo man das Archiv extrahiert.
Der Parameter "v" listet bei der Archiv-Erzeugung alle Dateien auf. Wenn es also etwas länger dauert, dann sieht man wo "tar" gerade steht.
Mit dem Parameter "f" weist man "tar" an, die Daten in eine Datei umzuleiten. Ursprünglich schreibt "tar" die Daten auf ein Bandlaufwerk. In der Regel ruft man "tar" immer mit dem Parameter "f" auf.
So erstellt man ein Archiv:
tar -cPvf /media/usb/backup-home-pi.tar /home/pi
Wenn das Archiv schon bestehen sollte, dann wird es einfach überschrieben.
Wenn "tar" fertig ist, kehrt die Kommandozeile zur Eingabe zurück.
Wenn man wissen möchte, ob die Datei tatsächlich erstellt wurde und wie groß sie ist, gibt man folgendes ein:
cd /media/usb ls -all
Und wir können uns noch den Archiv-Inhalt anzeigen lassen:
tar -tvf /media/usb/backup-home-pi.tar
Der Befehl "tar" erstellt nicht nur eine Archiv-Datei, sondern kann sie auch wieder extrahieren. Ein Restore würde so aussehen:
tar -xvzf /media/usb/backup-home-pi.tar
Lösung: Backup per Skript
Wechseln Sie in Ihr Benutzerverzeichnis:
cd /home/pi
Erstellen Sie folgende Datei:
nano backup-home-pi.sh
mit folgendem Inhalt:
#!/bin/bash tar -cPf /media/usb/backup-home-pi.tar /home/pi exit 0
Drei Dinge sind hier anders im Vergleich zur direkten Befehlseingabe. Die erste Zeile weist den Interpreter an. In der zweiten Zeile verzichten wir auf die Bildschirmausgabe durch Weglassen des Parameters "v". Beim automatischen Backup brauchen wir das nicht. Als letztes steht in der dritten Zeile ein Exit-Code. Damit weiß das System, dass das Skript erfolgreich ausgeführt wurde.
Speichern und schließen: Strg + O, Return, Strg + X.
Anschließend muss man die Datei noch ausführbar machen.
chmod +x backup-home-pi.sh
Um zu testen, ob die Datei sich ausführen lässt und das Backup angelegt wird, einfach den Namen der Datei eingeben:
bash backup-home-pi.sh
Hinweis: Bei der Ausführung von "tar" in der Bash-Datei haben wir auf den Parameter "v" verzichtet. Deshalb wird jetzt nichts angezeigt.
Hat "tar" das Archiv erstellt, kehrt die Kommandozeile zur Eingabe zurück.
Jetzt sollte man noch prüfen, ob das Backup wirklich erfolgreich war.
ls -all /media/usb0
Sofern die Datei "backup-home-pi.tar" mit der aktuellen Zeit angezeigt wird, war das Backup erfolgreich.
Lösung: Backup automatisch erstellen
Für solche Automatismen bringt Linux ein Werkzeug mit. Den sogenannten "Cron". "Cron" ist ein Daemon zum zeitbasierten Ausführung von Prozessen und wiederkehrenden Aufgaben (Cronjobs) in Unix-Betriebssystemen und somit auch Linux.
Die auszuführenden Anweisungen werden in einer benutzereigenen Tabelle gespeichert, der sogenannten "Crontab". Die "Crontab" ist eine "Zeittafel", im Prinzip eine einfache Tabelle, mit fünf oder sechs Spalten. Wobei die ersten fünf der Zeitangabe (Minute, Stunde, Tag, Monat, Wochentag) dienen. Dann folgt der User, der das Skript ausführen soll und alle weiteren Zeichen in einer Zeile dienen der auszuführenden Anweisung. Beispielsweise ein Shell- oder Bash-Skript. Für das Backup haben wir so ein Skript schon erstellt. Man sollte aber nur solche Skripte in die "Crontab" eintragen, die man manuell getestet hat.
Die "Crontab" ist eine einfache Textdatei. Es gibt zwei Arten von "Crontab" die man unterschieden muss.
- Benutzer-Crontab: Kann über den Befehl "crontab -e" bearbeitet werden.
- System-Crontab: Befindet sich in der Datei "/etc/crontab".
Sie unterscheiden sich im Prinzip durch dadurch, dass in der System-Crontab eine Spalte enthalten ist, in der der Benutzername steht, der den Befehl oder das Skript ausführen soll.
Wir rufen die System-Crontab auf.
sudo nano /etc/crontab
Dort trägt man folgende Zeile am Ende ein:
0 1 * * * root bash /home/pi/backup-dokuwiki2-data.sh
Was bedeutet das? Wir möchten das Backup-Skript jeden Tag (Monat und Jahr) um 1:00 Uhr durch den User "root" ausführen lassen.
Anschließend nur noch speichern und schließen: Strg + O, Return, Strg + X.
Wenn man alles richtig gemacht hat, dann sollte das Backup zu der angegebenen Zeit automatisch erstellt werden.
Wenn was nicht funktioniert
Schwerwiegende Fehler werden in die "/var/log/syslog" geschrieben. Wenn also irgendwas nicht funktioniert und man kommt nicht gleich auf den Fehler, dann sollte das der erste Ort sein, wo man nach sieht weshalb es nicht funktioniert. Vielleicht findet sich hier ein Hinweis.