Backup des Rasperry

Absolut notwendig für ein Raspberry (und jedes andere System) welches produktiv eingesetzt wird sind Backups. Ich erkläre euch wie man ein Systemabbild (Image) erstellt und wieder einspielt.

Das Backup beim Pi kann sich in ein oder zwei Schritte aufteilen. Zum einen muss immer die SD-Karte gesichert werden (Betriebssystem). Solltet Ihr auch ein USB-Speichergerät verwenden muss dieses ebenfalls gesichert werden.
Da ich es so handhabe das die SD-Karte ausschließlich Systemdateien enthält empfehle ich dieses als Image zu sichern. Für die USB-Platte reicht mir einfaches komprimieren.

Dieser Artikel ist Bestandteil der Artikelserie "Home Server mit dem Raspberry Pi". Zum Inhaltsverzeichnis gelangt ihr hier.

Backup von der SD-Karte erstellen

Steckt die SD-Karte vom Raspberry ab und in euren PC ein. Dort startet Ihr das Programm Win32DiskImager (sourceforge.net/projects/win32diskimager).

Wählt mit dem blauen Ordnericon den Pfad wo das Image gespeichert werden soll. Bei Device bitte den Laufwerksbuchstaben der SD-Karte selektieren. Mit Read wird das Backup erstellt.

sdformatter_read

Anschließen solltet ihr die .img Datei komprimieren z.b. mit 7zip. Es empfiehlt sich beim Dateinamen die Größe der SD-Karte festzuhalten solltet Ihr das Image mal auf einem Medium mit anderer Größe wiederherstellen müssen (ungefähr so: 2016-12-30_piSD_8GB).

Backup der SD-Karte wiederherstellen

Mit dem Programm SD Card Formatter muss die SD-Karte formatiert werden (www.sdcard.org/downloads/formatter_4/index.html).

1. Formatieren

Wählt den korrekten Laufwerksbuchstaben der SD-Karte (in dem Bild unten ist es F:) und öffnet die Optionen. Aktiviert nun Format Size Adjustment. Mit dem Button Format beginnt das Programm.

sdformatter

2. Image einspielen

Zuerst entpackt ihr das Image falls es komprimiert ist.
Danach startet ihr das Programm Win32DiskImager. Wählt dort mit dem blauen Ordnericon das Image aus. Rechts daneben bei Device bitte den Laufwerksbuchstaben der SD-Karte wählen. Anschließend wird mit Write das Backup wiederhergestellt.

win32diskimager

Backup von der USB-Disk erstellen

Die externe Festplatte könnt Ihr auf diverse Arten sichern. Bei Bedarf kann man mit der obigen Anleitung auch ein Image erstellen. Ich habe mich allerdings dafür entschieden alle Daten der Disk lediglich zu komprimieren (gzip). Nun möchte ich zwei Lösungen dafür Vorschlagen.

Archivieren vom Pi aus

Stoppt alle Dienste welche während des Backups auf die Festplatte zugreifen könnten, wechselt zum User root und navigiert anschließend in das Verzeichnis von dem ein Backup erstellt werden soll:

# stop all programs which access the usb drive.
sudo su -
cd /media/pidisk1

Nun könnt ihr das Komprimieren der Festplatte anstoßen:

tar -zcvf pidisk1.tar.gz *

Sichert die Datei pidisk1.tar.gz und startet danach wieder alle Dienste.
Wenn benötigt könnt Ihr unter Windows das Archiv mit 7zip öffnen.

Optional: Archivieren von Windows aus

Achtung! Die obige Variante ist besser und sollte bevorzugt verwendet werden. Wenn Ihr derzeit keine Möglichkeit habt mit Linux zu arbeiten kann alternativ auch von Windows aus das Backup gestartet werden. Eventuell gehen (je nach verwendetem Tool) Meta-Daten verloren.

Steckt die Festplatte an euren Windows PC. Sollte diese als NTFS formatiert sein ist das Backup mehr als einfach da Ihr nun die Dateien/Ordner wählen könnt welche Ihr sichern möchtet. Kopiert die Dateien und komprimiert Sie mit z.B. 7zip.

Ist die Platte als ext4 formatiert wird es etwas aufwändiger. Windows kann, ohne Hilfe von Drittanbietern, kein Linux-Format lesen.

Mit dem Programm Ext2Read könnt Ihr Lesezugriff auf die Festplatte erhalten (sourceforge.net/projects/ext2read).
Mit diesem Programm könnt Ihr allerdings das Backup nicht wiederherstellen. Zum sichern reicht es allerdings aus.

Besser ist die Lösung Ext2File (sourceforge.net/projects/ext2fsd/) oder von Paragon (www.paragon-software.com/de/home/extfs-windows-pro/download.html).
Diese binden das Laufwerk ganz normal in den Windows Explorer ein. Der Zugriff erfolgt dann wie gewohnt (ich habe allerdings den Eindruck das zeit der Installation der Startvorgang vom WinExplorer träger wurde).

Backup der USB-Disk wiederherstellen

Achtet darauf das die Festplatte das gewünschte Format hat (ext4 oder NTFS). Die Festplatte muss außerdem gemountet sein. Lest hier wie das geht: blog.rollnut.com/mount-disk-festplatte-in-linux-einbinden/.

Nun benötigt Ihr das Backup (die Datei mit der Endung .tar.gz). Diese sollte sich in dem Ordner befinden welcher das Ziel der wiederherstellung ist. Dann stoßt man einfach das entpacken an:

sudo tar -zxvf pidisk1.tar.gz

Zu meiner Überraschung habe ich festgestellt das sogar Owner, Gruppe und Rechte von Dateien wiederhergestellt wurden. Aber Achtung: Einstellungen die mit ACL vorgenommen wurden (also mit dem Befehl setfacl) konnten nicht erstellt werden. Diese sollten nach dem dekomprimieren manuell wieder gesetzt werden.

Jetzt ist die Festplatte wiederhergestellt. Vor dem Betrieb empfiehlt es sich einen Neustart zu machen.

sudo shutdown -r now

Achtung: Das Wiederherstellen des Backups sollte nur von Linux aus erfolgen. In meinem Test habe ich die Daten über Windows (mit Paragon) auf die Festplatte gespielt. Das Ergebnis war das Metadaten von Dateien nicht korrekt waren (beim Owner von jeder Datei war Unknown hinterlegt).

Tipps & Tricks

Beim erstellen oder wiederherstellen vom Backup waren folgende Kommandos für meine Umgebung hilfreich:

ID's von Benutzern und Gruppen

Sollte es vorkommen sollte das eure SD-Karte kaputt geht und ihr nur noch ein sehr altes Backup wiederherstellen könnt kann es vorkommen das auf der Festplatte Benutzerrechte existieren für Benutzer die nicht im Betriebssystem hinterlegt sind. In dem Fall sollte es ausreichen wenn Ihr die Benutzer und Gruppen auf dem OS anlegt. Sehr wichtig ist aber das diese die korrekten ID's haben (UID und GID).

# Read User- and GroupID
id -u [username]
getent group [groupname]

# Change User- and GroupID
usermod -u [id] [username]
groupmod -g [id] [groupname]

Alle Services beenden

  • Samba
  • SeaFile
  • mySQL
# !/bin/bash

# seafile
echo !Stopping Seafile

/home/seafile/seafile-server-latest/seahub.sh stop
/home/seafile/seafile-server-latest/seafile.sh stop

# Samba
echo !Stopping Samba

sudo service smbd stop

# mySQL
echo !Stopping mySQL

sudo service mysql stop

Starten

# !/bin/bash

# mySQL
echo !Starting mySQL

sudo service mysql start

# Samba
echo !Starting Samba

sudo service nmbd restart
sudo service smbd restart

# Seafile
echo !Startin Seafile

sudo su seafile /home/seafile/seafile-server-latest/seafile.sh start
sudo su seafile /home/seafile/seafile-server-latest/seahub.sh start