Im Zuge der Installation meines neuen Servers vor einiger Zeit fiel bei mir auch die Entscheidung, die Time-Machine-Backups einiger Rechner im Hause an zentraler Stelle zusammenzuführen. Was lag also näher, diese Daten auf dem Server abzulegen? Mit der Version 2.2 unterstützt auch netatalk netzwerkgebundene Backups. Und gerade für Notebooks bietet sich das geradezu an: So kann man darauf verzichten, jedesmal einen speziellen Ort mit einer herumstehenden externen Festplatte aufzusuchen. Stattdessen findet die Sicherung völlig transparent und automatisch über das WLAN statt.

Konfiguration von netatalk
Auf der Serverseite muß nach der Installation von netatalk lediglich eine nutzerbasierte Freigabe für die Time Machine erstellt werden. Hierzu könnte eine Zeile ähnlich der folgenden in die AppleVolumes.default eingetragen werden:

/mnt/timemachine/$u "Time Machine von $u" options:tm,upriv,usedots dbpath:/mnt/timemachine/$u

Wichtig ist an dieser Stelle die Option tm, wodurch die Freigabe als Time-Machine-Laufwerk gekennzeichnet wird. Der Platzhalter $u wird durch den Namen des angemeldeten Benutzers ersetzt.

Konfiguration der Time Machine
Auf der Clientseite kann nun die Time Machine konfiguriert werden. Sollte die Freigabe nicht in der Liste der verfügbaren Laufwerke auftauchen, so muß dieses Feature zunächst am Terminal über die Eingabe des folgenden Befehls freigeschaltet werden:

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Danach sollte die Freigabe auftauchen und auch ausgewählt werden können.

Hintergrund
Was passiert nun? Die Time Machine wird mit dem ersten Backup ein sogenanntes Sparse Bundle anlegen, da das Dateisystem auf der Freigabe kein HFS mit Journaling ist. Mit jedem Backup wird zunächst das Image gemountet. Nach dem Backup wirden dieses auch wieder freigegeben. Dies geschieht vollautomatisch, der Anwender muß sich um nichts kümmern.
Sieht man sich nun das Sparse Bundle mal etwas genauer an, so wird man feststellen, daß es aus Bands der Größe 8 MB besteht:

ls -l jupiter.sparsebundle/bands/

total 377536844
-rw-------  1 artanis  users  8388608 Jan 20 23:48 0
-rw-------  1 artanis  users  8388608 Jan 20 23:48 1
-rw-------  1 artanis  users  8388608 Jan 18 23:14 10
-rw-------  1 artanis  users  8388608 Aug 28 13:06 1000
[...]

Nun kann man sich leicht vorstellen, was das bedeutet, wenn man genügend Daten für die Time Machine hat: Es werden tausende von Dateien in nur einem Verzeichnis abgelegt:

ls -l jupiter.sparsebundle/bands/ | wc -l
    45911

Das mag dem Otto Normalverbraucher zwar egal sein, aber auf der Serverseite bedeutet es für das Betriebssystem einen Heidenaufwand. Nicht zuletzt kann die Performance der Time Machine selbst darunter leiden.

Wer jedoch genug Zeit übrig hat, kann eine Konvertierung des Sparse Bundles in Betracht ziehen. So wird laut Manpage von hdiutil eine Band-Size von bis zu 128 MB unterstützt. Vor der Konvertierung sollten zwingend die Time Machine des betreffenden Nutzers abgeschaltet und die Freigabe mit dem Sparse Bundle gemountet werden. Mit der Eingabe des folgenden Befehls im Terminal von MacOS X kann die Konvertierung durchgeführt werden:

hdiutil convert jupiter.sparsebundle -format UDSB -tgtimagekey sparse-band-size=262144 -verbose -o _jupiter.sparsebundle

Die Dateinamen müssen natürlich entsprechend angepaßt werden, Snow Leopard benennt das Sparse Bundle gemäß des Rechnernamens, Leopard vergibt den Namen nach dem Muster rechnername_macadresse.sparsebundle. Im obigen Beispiel ist es jupiter.sparsebundle. Die Option format gibt das neue Format an, wir bleiben bei einem Sparse Bundle. Die Option tgtimagekey gefolgt vom Schlüssel sparse-band-size gibt die neue Band-Size an, der Wert berechnet sich aus der Anzahl von 512-Byte-Sektoren, die beim Wachsen hinzugefügt werden sollen (512 x 512 = 262144 Sektoren = 128 MB). Die Option o zu guter Letzt gibt den Namen des neuen Images an.
Diese Operation dauert je nach Größe des Images und verwendetem Betriebssystem mehrere Stunden.
Nach Abschluß der Konvertierung müssen die Images ggf. umbenannt werden, damit die Time Machine nach dem Einschalten auch auf das richtige Image zugreift.

In meinem Fall hat die Konvertierung eines 360 GB großen Sparse Bundles mit Lion ca. 20 Stunden gedauert, das entspricht einem Durchsatz von ca. 5 MB/s. Snow Leopard hätte vermutlich etwas um die 72 Stunden benötigt, der Versuch schlug jedoch fehl, weil sich das verwendete Notebook zum unpassendsten Zeitpunkt in den Ruhezustand verabschiedete. Meine Empfehlung daher: Einen Desktoprechner verwenden, am besten per LAN-Kabel verbunden, dann sollte das problemlos klappen.
Die Anzahl der Bands hat sich im Beispiel von über 45000 auf “nur noch” 2700 verringert, nebenbei wurden ca. 25% Speicher freigemacht. Hier die Ausgabe von hdiutil:

hdiutil: convert: processing "jupiter.sparsebundle"
[...]
Driver Descriptor Map (DDM : 0) lesen …
Apple (Apple_partition_map : 1) lesen …
disk image (Apple_HFSX : 2) lesen …
...............................................................................
Dauer: 19h 11m 21.468s
Geschwindigkeit: 4.9M Byte/s
Ersparnis: 73.0 %
DIDiskImageConvertWithDiskImage: converter returned 0
created: /Volumes/Time Machine von artanis/_jupiter.sparsebundle
hdiutil: convert: result: 0

Weitere Informationen:
hdiutil(1) Mac OS X Manual Page
10.5: Improve networked Time Machine performance – Mac OS X Hints