TimeMachine Backups auf Netzlaufwerke mit OS X SnowLeopard

 
Time Machine ist eine wirklich tolle Sache, um seinen Mac zu sichern und jederzeit Zugriff auf die Backups zu haben. Leider lässt sich damit von Haus aus nur auf eine zweite Platte, eine Time Capsule oder externes Gerät via USB oder Firewire sichern. Um aber auf einem entfernten Host, z.B. einer NAS via SMB-Freigabe, zu sichern, bedarf es einiger Kniffe. Diese will ich hier kurz anhand von Snow Leopard erklären.
Zuerst einmal muss man in der Konsole die Funktion aktivieren, auf "nicht unterstützten Volumes" zu sichern. Das geht mit diesem Befehl:
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
Anschließend kann man in Time-Machine auch Netzlaufwerke für die Sicherung auswählen. Nomalerweise wäre man jetzt direkt fertig, doch so leicht macht es Apple uns leider nicht. Versucht man jetzt nämlich, ein Backup zu starten, bricht es nach einer Weile mit Fehlern ab. Wir müssen also die Vorbereitungen von Hand treffen, bzw. uns von einem Script dabei helfen lassen. Mit dem Bash-Script MakeImage.sh (http://www.admin-blog.com/uploads/div/MakeImage.sh  - habe ich in einem Forum gefunden) ist es kinderleicht. Man führt dazu einfach folgenden Befehl aus (vorher chmod +x MakeImage.sh): ./MakeImage.sh 200 /Volumes/shared_folder Die maximale Größe des Backups wird in GByte angegeben, in dem Beispiel wird das Backup also maximal 200 GBytes groß werden, bevor alte Files gelöscht werden. Anschließend gibt man den Pfad zum Netzlaufwerk an, das sollte i.d.R. unter /Volumes eingehangen sein. Im Beispiel heisst die Feigabe "shared_folder".
 
Es wird nun zuerst lokal das 200 GB große Sparsebundle des Backups erzeugt (also der Platz reserviert). Anschließend wird es dann auf das Netzlaufwerk kopiert. Dabei wird der Name des Mac im Dateinamen verwendet (kann unter Systemeinstellungen->Freigaben->Gerätenamen anpassen).Man sollte also, falls man mehrere Macs sichern will, unbedingt auf verschiedene Gerätenamen achten. Der Output des Scriptes sollte dann in etwa so aussehen
Generating disk image NAME_EURES_MACs.sparsebundle with size 200GB ... done!
Generating property list file with uuid 3BE3748D-46DC-54F9-9F01-B82AA5A3B7DF ... done!
Copying NAME_EURES_MACs.sparsebundle to /Volumes/shared_folder ... done
Finished! Happy backups!

Damit haben wir den Großteil der Vorbereitungen getroffen, um dann mit Time Machine auf eine Netzlaufwerk zu sichern. In Time Machine selbst sollte nun auch via "Volumes auswählen" die Netzwerkfreigabe zu sehen sein. Nach Auswahl kann dann direkt das erste Backup auf den entfernten Host starten.
 
 

#!/bin/bash
# A bash script to create a time machine disk image suitable for
# backups with OS X 10.6 (Snow Leopard)
# This script probably only works for me, so try it at your own peril!
# Use, distribute, and modify as you see fit but leave this header intact.
# (R) sunkid - September 5, 2009 

usage ()
{
echo ${errmsg}"\n"
echo "makeImage.sh"
echo " usage: makeImage.sh size [directory]"
echo " Create a disk image with a max storage size of <size> and copy it"
echo " to your backup volume (if specified)"
}

# test if we have two arguments on the command line
if [ $# -lt 1 ]
then
usage
exit
fi

# see if there are two arguments and we can write to the directory
if [ $# == 2 ]
then
if [ ! -d $2 ]
then
errmsg=${2}": No such directory"
usage
exit
fi
if [ ! -w $2 ]
then
errmsg="Cannot write to "${2}
usage
exit
fi
fi

SIZE=$1
DIR=$2
NAME=`scutil --get ComputerName`;
UUID=`system_profiler | grep 'Hardware UUID' | awk '{print $3}'`

# get busy
echo -n "Generating disk image ${NAME}.sparsebundle with size ${SIZE}GB ... "
hdiutil create -size ${SIZE}G -fs HFS+J -type SPARSEBUNDLE \
-volname 'Time Machine Backups' "${NAME}.sparsebundle" >> /dev/null 2>&1

echo "done!"

echo -n "Generating property list file with uuid $UUID ... "

PLIST=$(cat <<EOFPLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.backupd.HostUUID</key>
<string>$UUID</string>
</dict>
</plist>
EOFPLIST)

echo $PLIST > "${NAME}.sparsebundle"/com.apple.TimeMachine.MachineID.plist
echo "done!"

if [ $# == 2 ]
then
echo -n "Copying ${NAME}.sparsebundle to $DIR ... "
cp -pfr "${NAME}.sparsebundle" $DIR/"${NAME}.sparsebundle"
echo "done"
fi

echo "Finished! Happy backups!"