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.