Raspberry Pi als TimeCapsule

Wer schon immer mit TimeMaschine Backups via Apple TimeCapsule geliebäugelt wollte, sich jedoch von dem saftigen Preis hat abschrecken lassen, kann nun mit Hilfe eines Raspberry Pi und einer (alten) externen Festplatte sehr günstig in den Genuss von drahtlosen stündlichen Backups kommen.

Was wird benötigt:

Die Konfiguration dauert ca. 30 Minuten und läuft danach stabil von allein.

Bevor ich mich an das Projekt gesetzt habe, wollte ich erstmal in Erfahrungen bringen, ob sich die ganze Arbeit denn auch lohnt, sprich: Funktioniert die Konfiguration stabil? Wie schnell sind die Backups? Also für alle, die sich bereits mit dem Thema auseinandergesetzt haben und aktuell abwägen, möchte ich euch in ein 2 Sätzen meine Eindrücke vermitteln, die ich nun nach einem Monat Benutzung sammeln konnte:

Bildschirmfoto 2014-02-18 um 19.30.45

Das erste Backup ist vergleichsweise zäh, was einfach mit der Masse an Daten zusammenhängt. Ich habe für das vollständige Backup von knapp 350 GB 1,5 Tage gebraucht. Für das erste Backup würde ich den Raspberry auch direkt an das MacBook hängen um das Netzwerk nicht für 2 Tage komplett auszulasten. Grundsätzlich laufen die Backups aber souverän und die Synchronisation merkt man praktisch nicht. Alles in allem kann ich die „TimeCapsule Pi“ also definitiv empfehlen.

Nun zur Anleitung:

1. Wir müssen die Festplatte in HFS+ formatieren. Dafür benutzen wir am besten das Festplattendienstprogramm und formatieren unsere Festplatte in Journaled. Gibt der Festplatte am besten einen Namen, mit dem ihr sie direkt erkennen könnte. TimeCapsule bietet sich hier natürlich an. Danach können wir die Platte an den Raspberry hängen (beachtet hier ggf. die Stromversorgung, falls ihr eine 2,5 Zoll Platte verwendet) und loggen uns via SSH auf dem Raspberry ein.

2. Nun installieren wir die HFS+ Unterstützung auf dem Raspberry:

sudo apt-get install hfsplus hfsutils hfsprogs

3. Wir brauchen den Namen der Festplatte am Raspberry. Diesen finden wir mit folgendem Befehl heraus:

sudo blkid

4. Nun erstellen wir einen Ordner (in diesem Falle im Ordner Media), in dem wir die Festplatte dann per Skript automatisch mounten können:

sudo mkdir /media/TimeCapsule

5. Das Skript zum automatischen mounten können wir so erstellen:

sudo nano /etc/init.d/TimeCapsule

Folgendes muss in das Skript gespeichert werden:

#!/bin/bash
DNAME="TimeCapsule"
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
case "$1" in
start)
service netatalk stop
service avahi-daemon stop
umount -l /media/TimeCapsule
sudo fsck.hfsplus -f `blkid -L $DNAME`
mount -t hfsplus -o force `blkid -L $DNAME` /media/TimeCapsule/
service netatalk start
service avahi-daemon start
;;
stop)
service netatalk stop
service avahi-daemon stop
umount -l /media/TimeCapsule
;;
*)
echo "Usage: /etc/init.d/TimeCapsule {start|stop}"
exit 1
;;
esac
exit 0

6.  Nun machen wir das Skript noch ausführbar und starten unseren Raspberry neu:

sudo chmod +x /etc/init.d/TimeCapsule
sudo update-rc.d TimeCapsule defaults
sudo reboot

7. Nachdem der Raspberry wieder per SSH ansprechbar ist, vergeben wir nochmals provisorisch die Rechte für den Ordner neu:

sudo chown pi:pi /media/TimeCapsule
sudo chmod 777 /media/TimeCapsule

8. Nun müssen wir noch den TimeCapsule Server aufsetzen und dann sind wir schon fertig. Wir benötigen also Avahi und die dazugehörigen Bibliotheken über den Paketmanager. Dafür verwenden wir folgende Befehle:

sudo apt-get install avahi-daemon libavahi-client-dev libdb5.3-dev db-util db5.3-util libgcrypt11 libgcrypt11-dev

9. Nun brauchen wir noch Netatalk, welches wir auch noch für unseren Raspberry kompilieren müssen. Aktuelle Version lautet 3.0.7, eventuelle Updates könnt ihr hier nachsehen:

wget http://downloads.sourceforge.net/project/netatalk/netatalk/3.0.7/netatalk-3.0.7.tar.bz2
tar -xvf netatalk-3.0.7.tar.bz2
rm netatalk-3.0.7.tar.bz2
cd netatalk-3.0.7/
./configure --with-init-style=debian --with-zeroconf
make
sudo make install

10. Nun müssen noch zwei Dateien editiert werden und danach sind wir schon fertig. Als erstes editieren wir:

sudo nano /usr/local/etc/afp.conf

und schreiben folgendes hinein (bitte alles ersetzen):

[Global]
; Global server settings
hostname = TimeCapsule Pi
mimic model = TimeCapsule
log file = /var/log/netatalk.log
log level = default:info

[Data]
; Our Time Machine volume
path = /media/TimeCapsule
cnid scheme = dbd
file perm = 0660
directory perm = 0770
time machine = yes

11. Nun editieren wir noch folgende Datei:

sudo nano /etc/avahi/services/timecapsule_afpd.service

Falls etwas in der Datei steht, ersetzen wir alles mit:

version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
</service-group>

12. Wir sind fertig und starten den Server mit:

sudo /etc/init.d/TimeCapsule start


Viel Spaß mit eurer TimeCapsule Pi! Was ich euch noch mit auf dem Weg geben wollte ist folgender Hinweis: Das Ganze ist wahrscheinlich nicht so robust wie eine TimeCapsule von Apple, dementsprechend gilt folgende Regel! Die USB Festplatte ist bereits vor Systemstart anzuschließen und  immer korrekt zu entfernen (Raspberry Pi mit dem shutdown Befehl beenden), da es sonst zu Fehler auf der Platte kommen kann. Habe aus diesem Grund die Festplatte einmal formatieren müssen.

TimeMaschine

3 thoughts on “Raspberry Pi als TimeCapsule

  • Danke für diese Anleitung! Schaltet der Raspberry Pi die angeschlossene Festplatte nach einer bestimmten Idle-Zeit zuverlässig aus?

    • Hey Chris,
      sorry, dass ich dir erst so spät antworte, irgendwie ist dein Kommentar untergegangen und ich habe ihn nicht gesehen ..
      Mein Netzteil vom Raspberry ist letztens abgeschmiert, sodass ich dir gerade keine vernünftige Antwort darauf geben kann, die ich selber ausprobiert habe, allerdings gibt es für den Pi ja das hd-idle tool. Damit müsste man es eigentlich hinbekommen 🙂
      hd-idle bekommst du hier:
      wget http://sourceforge.net/projects/hd-idle/files/latest/download?source=files

Schreibe einen Kommentar

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