Backupscript für raspberry

Hallo zusammen,

ich möchte Euch meine Backup Variante für den Raspberry vorstellen:

Dazu habe ich ein Script erstellt das per CronJob eingeplant wird.
Es sichert den Raspberry komplett auf ein SMB Share (zb. auf eine Windowsfreigabe).
Gesichert wird die HAUPT-Partition /nicht die Bootpartition.
Mann kann dann einzelne Files aus dem Backup wiederherstellen oder auch die Komplette SD Card.

Funktionsweise:
Zunächst wird die Windows Freigabe gemountet.
Beim Ersten Vorgang wird mit DD ein leeres DD Image auf dem Netzlaufwerk erstellt, das etwas mehr Platz einnimmt als die zu sichernde Partition. Danach wird ein Filesystem in diesem Image typ ext4 erzeugt und die Dateien dort rein per rsync gebackupt.
Sofern der Platz des Images bei einem späteren Lauf nicht mehr reicht, wird das image zuerst um ein paar MB vergrößert.
Bei den nächsten Backup-Läufen wird mit RSYNC die Änderungen in dieses Image übertragen:

Anleitung:
Script runterladen:

cd ~
wget http://dl.e-hosting24.net/raspberry_scripts/backup_pi
wget http://dl.e-hosting24.net/raspberry_scripts/backup_pi_exclude.txt
chmod u+x,g+x ./backup_pi

Script Anpassen:

nano ./backup_pi

Konfiguration im Script anpassen , alle in <> gesetzen Einträge müssen angepasst werden

# ---- CONFIGURATION ----
#Pfad wohin die Freigabe gemountet werden soll, kann so belassen werden.
TARGETDIR="/mnt/backup"

#Pfad für das das Image (dorthin wird später per rsync reinychronisiert, kann so belassen werden
TARGETDIRFILE="/mnt/backup_file"

# Hier den Mount Befehl ggf. entsprechend anpassen wenn zb. per NFS gemountet wird.
# Beispiel zeigt eine Windowsfreigabe
TARGET_MOUNT=" -t cifs //<SERVERNAME>/<SHARE> $TARGETDIR -o user=<WIN_USER>,password=<WIN_PASSWORD>"

# Name des Images wohin später rein synchronisiert wird, wird auf dem Share erstellt
TARGET_IMG="<IMAGE_NAME>.img"

# Zu sichernde Paritition, kann in der Regel gelassen werden.
PARTITION="/dev/mmcblk0p2"

#EXCLUDE File
EXCLUDEFILE="/home/pi/backup_pi_exclude.txt"

#Wenn mail auf dem PI eingerichtet ist, kann die Sicherung per Mail informieren.
MAILINFO="<EMAIL-ADRESSE>"
# --- END CONFIGURATION ---

Gerne jetz mal manuell starten:

sudo ./backup_pi

Achtung, das Script kann eine ganze weile laufen beim ersten Mal!

Sicherung einplanen
crontab -e

Folgender Eintrag in der crontab sichert den Raspberry 1x pro Woche um 4:15 Uhr

15 4 * * 7 sudo /home/pi/backup_pi 

danach crontab speichern.

Recovern
Ein Recovern geht wie folgt.

Einzelne Dateien:
Wenn Verzeichnisse noch nicht vorhanden

sudo mkdir /mnt/backup
sudo mkdir /mnt/backup_file

sudo mount -t cifs //<SERVERNAME>/<SHARE> $TARGETDIR -o user=<WIN_USER>,password=<WIN_PASSWORD>
sudo mount -o loop /mnt/backup/<IMAGE_NAME>.img /mnt/backup_file

nun können die Einzelnen Dateien aus /mnt/backup_file mit copy etc. wieder zurückgeholt werden.

Komplett:
Neue SD-Karte mit Ursprünglichem Image auf SD-Karte flashen.
ggf. sudo raspi-config ausführen und vergrößen

Wenn Verzeichnisse noch nicht vorhanden

sudo mkdir /mnt/backup
sudo mkdir /mnt/backup_file

sudo mount -t cifs //<SERVERNAME>/<SHARE> $TARGETDIR -o user=<WIN_USER>,password=<WIN_PASSWORD>
sudo mount -o loop /mnt/backup/<IMAGE_NAME>.img /mnt/backup_file

sudo rsync -aAXvE --exclude-from=/mnt/backup_file/home/pi/backup_pi_exclude.txt /mnt/backup_file/ / 

Wenn man zwischenzeitlich eine Kernelupdate durchgeführt oder die Bootpartition geändert hat hat, dann sollte man dies vor dem Recovern mit rsyn manuell noch durchführen.

Info zur Basis-Konfiguration Mailversand hier: Post 386924

Hi!

Muß mich an dieser Stelle für dein Script bedanken, habs erfolgreich umgesetzt inkl. Mailversand!

Dank dir!

Gerne.
Ich weiß nicht, ob du die erste Version des Scriptes nutzt, oder bereits die neuere, diese erstellt kein komplettes Image mit DD sondern, nur einen so großes Container-Image, wie notwendig. das wird dann später ggf. einfach vergrößert. Spart Platz, wenn man eine 8GB SD hat und nur 1,5 nutzt…

Sicher die alte, nachdem mein Image genau die 8GB der SD Karte hat! Wo finde ich die neuere Version? Nachdem du diese Anleitung hier gerade erst gepostet hast, bin ich auch davon ausgegangen das dies ne aktuelle Variante darstellt :smiley:

gleicher link. (s.o.) habe es aktualisiert und die letzten Tage noch etwas verbessert.

Habs angepasst, funktioniert perfekt!

Servus zusammen,
das Script würde ich gerne nutzen. Nun klappt es leider nicht. Ich habe auf WIN10 eine eigene Ordnerfreigabe erstellt die auch mit einem MAC aufzurufen ist. Ist WIN10 keine cifs-Freigabe mehr oder muss ich etwas besonders einstellen? Schreibzugriff hat der neue User auch, den ich für das Backup eingerichtet habe.

Hat jemand eine Idee woran diese Fehlermeldung liegen kann?

mount error: cifs filesystem not supported by the system
mount error(19): No such device
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Grüße
Matthias

Hallo,

Danke für das Script, hab’s umgesetzt - klappt.
Eine Frage zum Mailing …was/wie muss man minimal einrichten damit man dieses Feature benutzen kann?

Gruß, Michael

… muss das noch mal hochholen…

kann mir jemand kurz erklären was/wie gebraucht wird um das Mailing zu nutzen?

(Link sollte reichen :))

Gruß, Michael

Hallo Miteinander,

erstmal vielen Dank @Stele99 für das Script. Leider bekomme ich beim Versuch das Backup auf meiner Synology Diskstation mit DSM 6.2.1 abzulegen folgende Fehlermeldung:

mount error(95): Operation not supported
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Hat jemand von Euch eine Idee was das Problem ist?

Grüße

Manuel

Hast du zufälllig vor kurzem auf Stretch upgedatet bzw. verwendest du Stretch? Dann könnte es daran liegen, dass Stretch nur Cifs SMB V3 erlaubt. Hatte dasselbe Problem. Du mußt dann die Konfigs entsprechend anpassen…

The latest update to the linux kernel defaults to SMB v3 instead of v1.
In fstab add two values to the options for any cifs mount:

vers=1.0, sec=ntlmssp

dann geht es wieder

Hallo zusammen,

möchte das Thema hier nochmal aufgreifen.

Backup-Erstellung hat soweit gut funktioniert.

Leider bekomme ich bei der Wiederherstellung bei dem Punkt
sudo mount -t cifs //<SERVERNAME>/<SHARE> $TARGETDIR -o user=<WIN_USER>,password=<WIN_PASSWORD>
die Rückmeldung

mount: can’t find //192.168… in /etc/fstab

Kann mir jemand helfen?

Hallo,
bitte prüfe mal die Doku zu Mount cifs:

https://wiki.ubuntuusers.de/Samba_Client_cifs/

evlt. hast Du irgendwie was falsch geschrieben.

am ende solltest du einen mountpoint haben, wo du das Share reinmounten kannst.

Ich habe $TARGETDIR durch /mnt/backup ersetzt…jetzt geht es.

Danke aber.

Mailing: Dazu müsst ihr auf dem Raspberry Mailversand einrichten:

sudo apt-get install mailutils ssmtp
sudo nano /etc/ssmtp/ssmtp.conf

Inhalt

# Config file for sSMTP sendmai
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=<MAILSERVER:PORT>

# Where will the mail seem to come from?
rewriteDomain=<MAILSERVERDOMAIN>

# The full hostname
hostname=<RASPBERRYNAME>
AuthUser=<MAILUSER>
AuthPass=<MAILPASSWORD>

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
UseSTARTTLS=YES

Getestet kann der mailversand mit:



echo "Hello world email body" | mail -s "Test Subject" <empfängeradresse>

Noch eine Idee am Rande:
Ich benutze ein TinkerBoard S mit ARMBIAN, das Skript funktioniert hier natürlich grundsätzlich auch, aber ich hatte problemem den cronjob einzurichten. Daher eine einfachere Idee, einfach über IPS ausführen. Dann kann man jederzeit über den Aufruf (manuell oder zyklisch) sichern.

<? 
exec("/root/backup_pi");
?>