Raspberry Pi als TimeCapsule
Besitzer von Mac OSX-Rechnern kennen natürlich Apples geniale TimeCapsule, eine Festplatte, die man irgendwo hinstellen kann und das Betriebssystem macht regelmäßig automatische Datensicherungen übers WLAN, ohne dass man sich um irgendwas kümmern muss.
Mit einem Raspberry Pi, einer externen Festplatte und etwas Software erhält man die gleiche Lösung. Sieht zwar nicht so gut aus, ist dafür aber etwas günstiger :-)
Mittlerweile setze ich diese Lösung aus folgenden Gründen nicht mehr ein:
- Die Datenübertragungsrate ist unerträglich langsam.
- Von Zeit zu Zeit meint TimeMachine, dass das Backup beschädigt sei und nun ein komplett neues erstellt werden müsse. Dabei verliert man natürlich die komplette Backup-Historie.
- Ein vollständiges Backup ist aufgrund der Datenübertragungsrate nicht praktikabel durchführbar. Bei meinem MacBook Pro mit etwa 300 GB Plattenplatzbelegung würde das etwa 3 Tage dauern (!).
In der folgenden Anleitung wird davon ausgegangen, dass der Raspberry Pi in der Grundkonfiguration fertig eingerichtet und ins Netzwerk eingebunden ist. Anleitungen dazu gibt es zuhauf auf den entsprechenden Seiten. Außerdem empfehle ich, den Raspberry Pi direkt per LAN-Kabel an den Router anzuschließen und nicht per WLAN.
Auch zur Einrichtung des Raspberry Pi als TimeCapsule gibt es mehrere Anleitungen im Netz, ich habe viele davon gelesen und probiert (z.B. hier und hier). Keine davon hat auf Anhieb bei mir funktioniert, es gab immer irgendwelche Probleme. Daher habe ich mich entschlossen, meine Vorgehensweise und Erfahrungen hier zu veröffentlichen.
Festplatte vorbereiten
Es empfiehlt sich, eine externe Festplatte mit separatem Netzteil zu verwenden. Viele Probleme entstehen dadurch, dass die USB-Anschlüsse des Raspberry Pi nicht genügend Strom liefern können.
Die Festplatte muss am Mac mit dem Festplattendienstprogramm partitioniert werden und mit dem MacOS Extended (journaled) Dateisystem formatiert werden. Anschließend die Platte an den Raspberry Pi anschließen und per ssh
auf dem Raspberry Pi einloggen.
HFS+ Unterstützung installieren:
sudo apt-get install hfsplus hfsutils hfsprogs
Mountpoint /media/TimeCapsule
erstellen und mit den entsprechenden Rechten versehen:
sudo mkdir /media/TimeCapsule sudo chown pi:pi /media/TimeCapsule sudo chmod 777 /media/TimeCapsule
Jetzt müssen wir herausfinden, mit welchem Device die Platte ins System eingebunden ist:
sudo blkid
Dies liefert eine Liste aller aktuell angeschlossenen Platten. Wichtig ist der Eintrag mit TYPE="hfsplus"
. Bei mir sieht das z.B. so aus:
pi@raspberrypi ~ $ sudo blkid /dev/mmcblk0p1: SEC_TYPE="msdos" UUID="C522-EA52" TYPE="vfat" /dev/mmcblk0p2: UUID="62ba9ec9-47d9-4421-aaee-71dd6c0f3707" TYPE="ext4" /dev/sda1: LABEL="EFI" UUID="67E3-17ED" TYPE="vfat" /dev/sda2: UUID="5d70a32f-9437-3e79-90e5-b094bde9c67c" LABEL="TimeMachine" TYPE="hfsplus"
Hier erkennt man, dass die Backup-Partition als /dev/sda2
eingebunden ist. Jetzt kann die Platte zunächst mal manuell gemountet werden:
sudo mount -t hfsplus -o force /dev/sda2 /media/TimeCapsule/
Ein ls -l /media/TimeCapsule
sollte jetzt einige Dateien und Verzeichnisse auflisten.
Bei meinen Versuchen hatte ich keine Schreibrechte vom Mac, die Lösung brachte ein nochmaliges Setzen der Rechte bei gemounteter Platte:
sudo chmod 777 /media/TimeCapsule
TimeCapsule Server im Netzwerk
Um den Raspberry Pi mit der Festplatte als TimeCapsule Server sichtbar zu machen, muss noch etwas Software installiert werden.
Avahi
sudo apt-get install avahi-daemon libavahi-client-dev libdb5.3-dev db-util db5.3-util libgcrypt11 libgcrypt11-dev
Netatalk
Netatalk ist die freie, Open Source Lösung des AFP (Apple File Protocol). Diese steht nicht als Package für apt-get
zur Verfügung, es müssen daher die Sourcen manuell heruntergeladen, konfiguriert und compiliert werden. Die folgenden Schritte beziehen sich auf die Version 3.0.4, am besten auf der Sourceforge-Seite nachsehen, welche Version aktuell ist und die Dateinamen entsprechend anpassen:
cd /home/pi wget http://downloads.sourceforge.net/project/netatalk/netatalk/3.0.4/netatalk-3.0.4.tar.bz2 tar -xvf netatalk-3.0.4.tar.bz2 cd netatalk-3.0.4/ ./configure --with-init-style=debian --with-zeroconf make sudo make install
Das Compilieren (Aufruf von make
) dauert auf dem Raspberry Pi gute 20 Minuten. Wenn alles erfolgreich durchgelaufen ist, können die Sourcen wieder gelöscht werden:
cd /home/pi rm -rf netatalk-3.0.4 netatalk-3.0.4.tar.bz2
Anschließend muss die Konfigurationsdatei /usr/local/etc/afp.conf
angepasst werden:
sudo nano /usr/local/etc/afp.conf
Die Datei so editieren, dass sie folgenden Inhalt hat:
[Global] hostname = TimeCapsule Pi log file = /var/log/netatalk.log log level = default:info uam list = uams_guest.so zeroconf = yes save password = no mimic model = TimeCapsule [Homes] basedir regex = /home [TimeMachine] path = /media/TimeCapsule time machine = yes
Die Zeile hostname = TimeCapsule Pi
legt fest, unter welchem Namen der Server später auf dem Mac unter Freigaben auftauchen wird. Der Eintrag in eckigen Klammern [TimeMachine]
ist der Name, unter dem das Backup-Volume in den Systemeinstellungen von TimeMachine aufgelistet wird. Wer hier noch weitere Optionen oder Anpassungen vornehmen will, kann in der Dokumentation zu netatalk nachlesen.
Die Datei /etc/avahi/services/timecapsule_afpd.service
so editieren...:
sudo nano /etc/avahi/services/timecapsule_afpd.service
...dass sie folgenden Inhalt hat:
<?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> </service-group>
Startscript
Damit die Services nach einem Neustart des Raspberry Pi automatisch gestartet werden, fehlt jetzt noch ein Startscript, das wir mit
sudo nano /etc/init.d/TimeCapsule
anlegen. Das Script mit folgendem Inhalt füllen:
#!/bin/bash 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 mount -t hfsplus -o force /dev/sda2 /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
Wichtig: Das device /dev/sda2
muss durch das passende device, das zuvor oben mit sudo blkid
ermittelt wurde, ersetzt werden.
Jetzt das Script ausführbar machen, in die automatischen Startscripte einpflegen und anschließend einmal manuell starten:
sudo chmod 755 /etc/init.d/TimeCapsule sudo update-rc.d TimeCapsule defaults sudo /etc/init.d/TimeCapsule start
Damit sind wir auf dem Raspberry Pi fertig. Das Backup-Volume sollte jetzt unter dem Namen TimeCapsule Pi auf dem Mac unter Freigaben auftauchen:
TimeMachine auf dem Mac konfigurieren
Auf dem Mac wählen wir jetzt in den Systemeinstellungen für TimeMachine den Raspberry Pi als Backup Volume aus. Bei der Frage nach den Anmeldeinformationen wählen wir als Gast anmelden. Anschließend kann das Backup gestartet werden.
Fortan macht der Mac stündliche Backups von den geänderten Dateien.