Table of contents
Bacula ist eine Netzwerk-Backup-Software, die für mich das Mittel der Wahl ist um alle wichtigen Rechner zu sichern. Die wichtigen Funktionen für mich ist die Fähigkeit, Linux-, Mac OS X- und Windows-Rechner zu sichern, die gut konfigurierbaren FileSets, inkrementelle Backups, Benachrichtigung via Mail und gzip-Kompression.
Zur Sicherung und vor allem zur Bare-Metal-Recovery (das Wiederherstellen des Backups auf eine komplett leere Festplatte) auf Mac OS X spricht sich die Bacula-Dokumentation leider nicht so sehr aus, sodass ich diesen Artikel schrieb.
Ich gehe davon aus, dass die Prinzipien, Begriffe und Konfiguration von Bacula bekannt ist und dass der Server einwandfrei läuft.
Konfiguration
Beteiligte Rechner
Der Director und Storage Daemon läuft bei mir auf einem Linux-Server, der zu sichernde Mac ist ein MacBook.
Konfiguration
Da das Prinzip der Bacula-Konfiguration auf anderen Websites schon zur
Genüge erklärt ist, beziehe ich mich hier nur auf die Einzelheiten,
die für Mac OS X wichtig sind (hfsplussuport
, FileVault und
die Liste der auszuschließenden Dateien).
FileSet { Name = "macbook-set" Include { Options { signature = MD5 compression = gzip hfsplussupport = yes } File = / # Da FileVault als anderes Dateisystem gilt, muessen wir den Pfad explizit angeben File = /Users/michael } Exclude { @/etc/bacula/std_mac_exclude.files # Das FileVault-Image hingegen lassen wir aus, da wir ja die Dateien sichern File = /Users/.michael/michael.sparseimage } }
Damit man die Liste der auszuschließenden Dateien nicht bei jedem Mac, den man
sichert, wiederholen muss, habe ich sie in die Datei
std_mac_exclude.files
ausgelagert. Ausgeschlossen werden alle
Mountpoints (für FTP/SMB-Server, USB-Geräte, etc…), die temporären Dateien,
eingelegte CD-ROMs und das automatisch durchsuchte Netzwerk.
/etc/bacula/std_mac_exclude.files:
File = /Volumes
File = /tmp
File = /private/tmp
File = /cdrom
File = /automount
File = /Network
File = /.vol
FileVault
Wenn man FileVault benutzt, hat man drei Möglichkeiten:
-
Man gibt keine speziellen Einstellungen an und lässt somit Bacula das
FileVault-Image sichern.
Der Nachteil hierbei ist, dass man keine einzelnen Dateien wiederherstellen kann. Der Vorteil ist, dass man seine Wiederherstellung 1:1 durchführen kann. -
Man konfiguriert Bacula wie oben gezeigt und sicher somit den Inhalt
des FileVault-Images, nicht aber das Image selbst.
Der Vorteil hierbei ist das Wiederherstellen einzelner Dateien, der Nachteil ist, dass man nach einer Bare-Metal-Recovery FileVault erst wieder aktivieren muss (oder es manuell währenddessen aktiviert, da weiß ich aber nicht, ob das überhaupt funktioniert). -
Man sichert sowohl den Inhalt, als auch das Image.
Der Vorteil ist, dass man sowohl einzelne Dateien wiederherstellen, als auch einfach eine Bare-Metal-Recovery durchführen kann. Der Nachteil ist, dass man doppelt so viel Speicherplatz für das Backup braucht.
Bare-Metal-Recovery
Voraussetzungen:- Mac OS X Installation Disc (10.4)
- Eine vorher kompilierte, statische Version vom Bacula-Client (
bacula-fd
) - Die Konfigurationsdatei (
bacula-fd.conf
) des Clients -
Einen USB-Stick oder eine externe Festplatte, um die beiden Dateien
(
bacula-fd
undbacula-fd.conf
) auf die leere Platte zu spielen sowie um das Scriptrd.sh
auszuführen um die RAM-Disk zu erstellen
Statische Version des Bacula-Clients
Auf der Mac OS X Installation Disc sind alle benötigten Libraries vorhanden, daher brauchen wir keine statische Version (das Kompilieren einer statischen Version auf Mac OS X funktioniert ohnehin nicht).
./configure --enable-client-only make
Anschließend kopieren wir src/filed/bacula-fd
und die
Konfigurationsdatei, die wir zuvor schon verwende haben
(bacula-fd.conf
) auf den USB-Stick.
RAM-Disk
Das Script, um eine RAM-Disk unter Mac OS X zu erstellen, habe ich auf explanatorygap.net gefunden. Es muss auf dem USB-Stick (oder -Festplatte) gespeichert werden.
rd.sh:
echo "Creating RAM Disk for $1"
dev=`hdik -drivekey system-image=yes -nomount ram://2048 `
if [ $? -eq 0 ] ; then
newfs $dev
mount -o union $dev $1
fi
Die eigentliche Rettung
Ich gehe davon aus, dass eine leere Festplatte (oder eine, deren Daten nicht mehr benötigt werden) am Computer angeschlossen ist (ob via Firewire, USB, oder direkt eingebaut spielt keine Rolle).
Der erste Schritt besteht nun darin, von der Mac OS X Installation Disc zu starten, wozu man beim Einschalten des Systems C gedrückt halten muss, bis das Apfel-Logo erscheint.
Nach der Sprachauswahl geht es an das Einrichten einer Partition, auf die später die Daten wiederhergestellt werden. Diese muss natürlich mindestens genauso groß sein, kann aber auch größer sein. Über Dienstprogramme, Festplattendienstprogramm beziehungsweise Utilities, Disk Utility (je nach Sprache) lässt sich das Programm dazu aufrufen.
Die neu erstellte Partition wird dann automatisch gemountet, was man auch mit
mount
nachsehen kann. Wir wechseln nun ins Terminal, das sich auch
bei Dienstprogramme finden lässt. In diesem Beispiel habe ich die neue
Partition „MacHD” genannt. Wir wechseln nun in das Verzeichnis und kopieren die
beiden vorbereiteten Dateien vom USB-Stick (der auch automatisch eingebunden
wird, sobald er angeschlossen wird):
cd /Volumes/MacHD cp /Volumes/USB/bacula-fd /Volumes/USB/bacula-fd.conf .
Wichtig hierbei ist, dass diese beiden Dateien direkt im Root-Verzeichnis liegen. Im Backup dürfen diese beiden Dateien nicht existieren, sonst bricht Bacula bei der Wiederherstellung ab!
Wir erstellen nun eine RAM-Disk, die wir über /var
legen, sodass
Bacula in /var/bacula/working
schreiben kann (auf der Mac OS X
Installation Disc wird /var
natürlich nicht schreibbar gemountet).
Man könnte auch ein Verzeichnis auf der neu angelegten Partition erstellen, das
von Bacula als Working-Directory genutzt wird, aber die 1 MB große RAM-Disk
langt aus und wir müssen hinterher weniger aufräumen.
/Volumes/USB/rd.sh /var mkdir -p /var/bacula/working
Außerdem müssen wir die Netzwerkschnittstelle konfigurieren, damit wir eine Verbindung zum Director/Storage Daemon bekommen:
ifconfig en0 192.168.1.5
Je nach Installation von Bacula muss hier noch ein Standardgateway gesetzt werden (damit eine Verbindung ins Internet klappt):
route add default gw 192.168.1.1
Nun starten wir den File Daemon:
./bacula-fd
Und dann geht’s am anderen Rechner weiter. Nach dem Start von
bconsole
zeigen wir uns mit list jobs
die letzten
Backups an und wählen die ID des letzten Backups für den zu wiederherstellenden
Rechner.
Dann starten wir das Wiederherstellen (beziehungsweise die Dateiauswahl dafür) mit folgendem Befehl (die JobID muss natürlich ausgetauscht werden):
restore jobid=123 all
Da wir keine Dateien aus- oder abwählen möchten, beenden wir mit
done
die Auswahl und werden nun gefragt, ob Bacula anfangen soll.
Da wir nicht nach /tmp/bacula-restores
wiederherstellen wollen,
verändern wir mithilfe von mod
den Parameter 9)
Where
. Hier geben wir den Pfad zu unserer Partition ein, also in diesem
Beispiel /Volumes/MacHD
und bestätigen dann mit yes
.
Je nach Netzverbindung dauert das Wiederherstellen eine Weile (bei mir ca 20 Minuten für 30 GB über ein Gigabit-LAN).
Anschließend muss unbedingt noch das von uns im Backup ausgelassene Verzeichnis
/dev
angelegt werden, sonst wird Mac OS X beim nächsten Neustart
nicht hochfahren:
mkdir dev
So, das war’s. Nun schließen wir das Terminal und wählen bei Dienstprogramme das Programm Startvolume, wo wir „Mac OS X auf MacHD” wählen und auf „Neustarten” klicken.
I run a blog since 2005, spreading knowledge and experience for almost 20 years! :)
If you want to support my work, you can buy me a coffee.
Thank you for your support! ❤️