Backup Raspberry Pi to Windows Share

Auch wenn ich noch keine Probleme mit defekten SD Karten im Raspberry Pi hatte, ist es schon sinnvoll sich Gedanken über ein automatisches Backup zu machen. Auf Wunsch eines Kollegen (der scheinbar weniger Glück bei den Karten hat 😉 ) gibt es jetzt einen “Howto Backup Raspberry Pi to Windows Share” Beitrag. Ich selbst nutze das Skript auch um z. B. ein Backup meiner wfrog SQLite Datenbank zu machen.

Windows Freigabe

Bevor die Dateifreigabe angelegt wird, empfehle ich aus Sicherheitsgründen und falls man doch mal sein Kennwort ändern sollte, einen extra Benutzer für den Zugriff auf die Backup Freigabe einzurichten. Als nächstes wird dann die Dateifreigabe eingerichtet. Wichtig ist hierbei nur, dass der Benutzer Lese- und Schreibrechte auf die Freigabe und auf das Verzeichnis (NTFS Rechte) bekommt. Wenn man von einem anderen Windows System auf die Freigabe kommt und eine Datei ablegen kann, sollte es mit den gleichen Zugangsdaten auch unter Linux funktionieren.

Credentials File

Um die Zugangsdaten für die Windows Freigabe separat in einer Datei abzulegen, habe ich eine .smbcredentials Datei erstellt. Ich nutze als Editor gerne Joe, wer will kann natürlich auch einen anderen Linux Editor wählen.

sudo joe /root/.smbcredentials

In die Datei werden jetzt zwei Zeilen für Benutzername und Passwort eingetragen.

username=<Username>
password=<Password>
domain=<domain>

# Beispiel
# username=backupuser
# password=Geheim!7

Je nachdem wo die Credentials Datei abgelegt wird, macht es Sinn die Rechte so zu vergeben, dass nur noch der root User (vorausgesetzt die Datei wurde auch mit sudo Rechten angelegt) alleinige Lese- und Schreibrechte auf die Datei hat.

sudo chmod 600 /root/.smbcredentials

Requirements

Zum mounten von SMB/CIFS Shares muss noch, wenn nicht bereits vorhanden, ein Paket installiert werden.

sudo apt-get install cifs-utils

Damit wir uns später auch mit einem SMB/CIFS Verzeichnis verbinden können, benötigen wir noch einen Mountpoint. Ich habe mich für /mnt/backup entschieden. Mit folgenden Befehl lässt sich das Verzeichnis erstellen.

sudo mkdir /mnt/backup

Backup Skript

Das Backup Skript kann mit folgendem Befehl im Home Verzeichnis vom root User angelegt werden.

sudo joe /root/backup.sh

Im oberen Abschnitt vom Shell Skript werden die Variablen definiert und im unteren Abschnitt wird die Datei bzw. das Verzeichnis gepackt und komprimiert, die Freigabe verbunden, die Sicherung verschoben und dann die Freigabe wieder getrennt.

#!/bin/bash

# Zielserver und Freigabe definieren (Achtung! Kein \ nutzen)
# Beispiel "//192.168.1.100/Backup/wfrogDB"
sharename="//<IP-Adresse des Zielservers>/<Freigabename>"

# Was soll gesichert werden (Auch *.cfg oder ganze Ordner möglich)
backuplocation="/var/lib/wfrog/wfrog.sql"

# Dateiname der Sicherungsdatei
filename=$(hostname).backup.$(date +%Y-%m-%d).tar.gz

# Credential File
credentialfile="/root/.smbcredentials"

# Mountpoint definieren (Muss vorhanden sein)
mountpoint="/mnt/backup"

# Zwischenspeicher
savepath="/tmp/" 

########################### DO NOT EDIT BELOW THIS LINE ###########################

# Datei komprimieren
tar -czf $savepath$filename $backuplocation

# Dateifreigabe verbinden
mount -t cifs -o credentials=$credentialfile $sharename $mountpoint

# Sicherung verschieben
mv -f $savepath$filename $mountpoint

# Dateifreigabe trennen
umount $mountpoint

Automatisches Backup

Wie das Skript automatisch zu einer bestimmten Uhrzeit gestartet werden soll, ist bereits unter PHP-Skripte als Cronjob ausführen beschrieben. Ich habe mich z. B. bei meiner wfrog SQLite Datenbank für eine tägliches Backup um 0 Uhr entschieden.

0 0 * * * /root/backup.sh

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert