Backup

Ein wichtiger Punkt ist immer ein Backup. Was ist, wenn der Raspberry Pi auf einmal ausfällt? Ein Hardwaredefekt oder die SD-Karte erzeugt Fehler? Für diesen Fall sollte man ein Backup anlegen. Am besten regelmäßig.

In diesem kleinen Tutorial möchte ich also das Backup eines Raspberry Pi auf einen angeschlossenen USB-Stick beschreiben.

Vorbereitung: USB-Stick einhängen

Ich gehe davon aus, dass der Raspberry Pi angeschalten ist. Stecke also auch den USB-Stick an (eine externe Festplatte - vorzüglich mit eigenem Netzteil - sollte ebenso funktionieren).

Mit

sudo fdisk -l

erhältst du eine Übersicht der angeschlossenen Laufwerke, die ähnlich meiner Ausgabe aussehen sollte.

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes
4 heads, 16 sectors/track, 486192 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b5098

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    31116287    15496704   83  Linux

Disk /dev/sda: 32.0 GB, 32015679488 bytes
62 heads, 32 sectors/track, 31517 cylinders, total 62530624 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    62530623    31264288   83  Linux

Daran sehen wir, dass dem USB-Stick das Laufwerk /dev/sda1 zugewiesen wurde. Weiter oben steht auch, dass das Gerät /dev/sda eine Kapazität von 32 GB hat, was es eindeutig als meinen USB-Stick identifiziert.

Um sicher zu gehen, dass der Stick nicht im Dateisystem eingehangen ist, hängen wir ihn aus.

sudo umount /dev/sda1

Als nächsten wird das Dateisystem ext4 auf dem Stick angelegt und ihm die Bezeichnung "Backups" gegeben.

sudo mkfs.ext4 /dev/sda1 -L Backups

Um den Stick in das Dateisystem wieder einhängen zu können, müssen wir erstmal einen Einhängepunkt erstellen. Ich habe ihn bei mir unter /mnt/backups angelegt:

sudo mkdir /mnt/backups

Danach wird der Stick tatsächlich eingehangen.

sudo mount -t ext4 /dev/sda1 /mnt/backups

Zur Sicherheit können wir das noch mit

df -h

überprüfen und eine ähnliche Ausgabe wie bei mir erhalten:

Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
rootfs           15G    2,7G   12G   20% /
/dev/root        15G    2,7G   12G   20% /
devtmpfs        239M       0  239M    0% /dev
tmpfs            49M    228K   49M    1% /run
tmpfs           5,0M       0  5,0M    0% /run/lock
tmpfs            97M       0   97M    0% /run/shm
/dev/mmcblk0p1   56M    9,7M   47M   18% /boot
/dev/sda1        30G    114M   28G    1% /mnt/backups

Damit der USB-Stick bei jedem eventuellen Neustart automatisch eingehangen wird, benötigen wir noch dessen UUID. Der Befehl

sudo ls -laF /dev/disk/by-uuid/

erzeugt eine ähnliche Ausgabe wie bei mir:

insgesamt 0
drwxr-xr-x 2 root root 100 Jan  1  1970 ./
drwxr-xr-x 6 root root 120 Jan  1  1970 ../
lrwxrwxrwx 1 root root  15 Aug 22 08:03 5d18be51-3217-4679-9c72-a54e0fc53d6b -> ../../mmcblk0p2
lrwxrwxrwx 1 root root  15 Jan  1  1970 7D5C-A285 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root  10 Jan  1  1970 d03067fb-be7a-402f-b137-024a226bf5c1 -> ../../sda1

In meinem Fall wäre die UUID meines Sticks also "d03067fb-be7a-402f-b137-024a226bf5c1".

Öffne die Datei /etc/fstab mit

sudo nano /etc/fstab

und füge dort als neue letzte Zeile ein:

UUID=d03067fb-be7a-402f-b137-024a226bf5c1 /mnt/backups ext4 rw,defaults 0 0

Passe bitte die UUID und eventuell den Einhängepunkt (bei mir /mnt/backups) auf deine zutreffenden Daten an.

Jetzt wird der Stick bei jedem Neustart auch automatisch ins Dateisystem eingehangen.

Das Backup einrichten

Es gibt viele Wege ein Backup zu erstellen. Zuerst habe ich dieses Skript ausprobiert, das auch wunderbar funktioniert, wenn man auf ein Netzlaufwerk sichert, aber mit lokal angeschlossenen Geräten scheint es nicht klar zu kommen, zumindest hat sich mehrfach mein Raspberry Pi daran aufgehangen. Also habe ich nach Alternativen gesucht und bin auf rsnapshot im Zusammenhang mit diesem Artikel gestoßen.

Die Installation ist einfach mit

sudo apt-get install rsnapshot

Danach muss einfach eine Konfigurationsdatei angelegt oder die bestehende bearbeitet werden:

sudo nano /etc/rsnapshot.conf.my_backup

Meine hat dann diesen Inhalt:

#################################################
# rsnapshot.conf - rsnapshot configuration file #
#################################################
# #
# PLEASE BE AWARE OF THE FOLLOWING RULES: #
# #
# This file requires tabs between elements #
# #
# Directories require a trailing slash: #
# right: /home/ #
# wrong: /home #
# #
#################################################

#######################
# CONFIG FILE VERSION #
#######################

config_version  1.2

###########################
# SNAPSHOT ROOT DIRECTORY #
###########################

# All snapshots will be stored under this root directory.
snapshot_root   /mnt/backups/

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
no_create_root  1

cmd_cp                  /bin/cp
cmd_rm                  /bin/rm
cmd_rsync               /usr/bin/rsync
cmd_ssh                 /usr/bin/ssh
cmd_logger              /usr/bin/logger
cmd_du                  /usr/bin/du

interval        daily   7
interval        weekly  4
interval        monthly 12
interval        yearly  2

verbose                 2
loglevel                3
logfile                 /var/log/rsnapshot
lockfile                /var/run/rsnapshot.pid
ssh_args                -o BatchMode=yes

backup  /home/pi/

Zu beachten ist dabei, dass die einzelnen Parameter nicht mit Leerzeichen, sondern mit Tabulatoren von einandern getrennt sind!

Testen kannst du die Korrektheit des Backups mit

sudo /usr/bin/rsnapshot -c /etc/rsnapshot.conf.my_backup daily

Nachdem das Backup beendet ist, sollte im Verzeichnis /mnt/backups eine ähnliche Struktur wie diese vorliegen:

pi@ghostpi /mnt/backups $ tree -dL 4
.
├── daily.0
│   └── home
│       └── pi
│           ├── blog
│           ├── Desktop
│           ├── isso
│           ├── isso-comments
│           ├── piglow
│           └── python_games
└── lost+found [error opening dir]

Regelmäßiges Backup

Damit das Backup auch regelmäßig ausgeführt wird, empfiehlt es sich einen Cronjob dafür anzulegen:

sudo crontab -e

Füge einfach dann die folgenden Zeilen ein:

45 22 * * * /usr/bin/rsnapshot -c /etc/rsnapshot.conf.my_backup daily
30 22 * * 0 /usr/bin/rsnapshot -c /etc/rsnapshot.conf.my_backup weekly
15 22 1 * * /usr/bin/rsnapshot -c /etc/rsnapshot.conf.my_backup monthly
0 22 1 12 * /usr/bin/rsnapshot -c /etc/rsnapshot.conf.my_backup yearly

Damit werden folgende Backups ausgeführt:

  • täglich um 22:45 Uhr
  • jeden Sonntag um 22:30 Uhr
  • am 1. jedes Monats um 22:15 Uhr
  • am 1. Dezember um 22:00 Uhr

Optimal wäre natürlich auch noch ein Backup auf verschiedenen (von einander unabhängigen) Lokationen.