Bis vor kurzem sah meine Backupsituation noch so aus: Wichtige Daten werden im privaten Netz gespiegelt, projektbezogene Dateien manuell auf DVD ausgelagert. Alles lief über Unison. Ein historisch gewachsenes Chaos.
Bei der Konzeption und Planung des Backups und der Auswahl von geeigneter Software, wurde mir schnell bewusst, dass es mehr sein musste, als eine Skriptlösung. Mein Bestreben eine übersichtliche Methode zu haben, ein Netzwerk von PCs mit unterschiedlichen Betriebssystemen (Linux, MacOS X, Windows) zu sichern, führte mich schließlich zu BackupPC.
- Ansprechende Oberfläche zur Datenwiederherstellung,
- problemlosen Umgang mit Umlauten und Leerzeichen in Pfad- und
Dateinamen,
- Benutzer haben Zugriff auf ihre Backups,
- Behandlung von mobilen Rechnern,
- ausführliche Dokumentation,
- Pooling, d.h. identische Dateien werden nur einmal abgespeichert.
Die folgenden Notizen mögen dem Einsteiger an der einen oder anderen Stelle helfen. Sie ersetzen auf keinen Fall die gute Dokumentation der Software und andere hilfreiche Anleitungen, auf die ich unten verlinke. Konkrete Pfadangaben beziehen sich auf Gentoo Linux, sollten sich auf anderen Systemen jedoch auch verorten lassen.
BackupPC läuft ohne, doch empfiehlt sich der Übersichtlichkeit halber das Webfrontend (Screenshots). Dafür muss ein Webserver laufen. (z.B. Apache)
Apache
Geschrieben ist BackupPC in Perl. Die empfohlene Konfiguration setzt auf das mod_perl Modul.
Aktivierung über /etc/conf.d/apache2:
APACHE2_OPTS="-D PERL"
http://localhost/perl-status zeigt ob und wie mod_perl installiert ist.
Da Apache in meinem Szenario auch der Webentwicklung dient, läuft er mit Unterstützung für Namensbasierte Virtuelle Hosts (vhosts). Der Server liefert also mehrere lokale Adressen/Domains aus. Der Backup Server soll auf localhost als Default VHost erreichbar sein.
/etc/apache2/vhosts.d/backuppc.include mit folgendem Inhalt erstellen
<Directory /var/www/localhost/cgi-bin>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI +Indexes
AllowOverride AuthConfig
Order deny,allow
Deny from all
Allow from 192.168.2 127.0.0.1
AuthName "backuppc"
AuthType Basic
AuthUserFile /usr/local/etc/apache2/.htpasswd
Require valid-user
</Directory>
/etc/apache2/vhosts.d/00_default_vhost.conf: Nach dem Eintrag
default_vhost.include
wird die neue Datei eingebunden:
Include /etc/apache2/vhosts.d/backuppc.include
Anlegen von Benutzern für das Webfrontend:
htpasswd /usr/local/etc/apache2/.htpasswd backuppc
htpasswd /usr/local/etc/apache2/.htpasswd userA
htpasswd /usr/local/etc/apache2/.htpasswd userB
Für BackupPC muss Apache als Benutzer backuppc laufen.
httpd.conf:
User backuppc
Group backuppc
/etc/BackupPC/hosts:
localhost 0 backuppc userA
rechnerB 0 userA
rechnerC 0 userB
Da Apache als BackupPC Benutzer läuft, können Schwierigkeiten mit existierenden Webseiten aufgrund fehlender Dateirechte auftreten. Ich habe den Benutzer backuppc der Gruppe apache zugewiesen
usermod -aG apache backuppc
und die Gruppenrechte der betroffenen Pfade entsprechend angepasst. Sauberere Lösung wären es einen zweiten Webserver aufzusetzen (lighttpd), zwei unterschiedliche Instanzen von Apache
laufen zu lassen, einen der Server in einer virtuellen Maschine laufen zu lassen oder ihn physisch zu trennen.
BackupPC
Damit der Backupprozess als root mit vollen Zugriffsrechten auch auf Systemdateien ablaufen kann, werden die Berechtigungen des Benutzers backuppc mit dem Kommando visudo erweitert. Im Beispiel darf backuppc ohne Eingabe eines Passwortes den rsync Befehl zur Sicherung der Daten ausführen. Dateisysteme (z.B. /boot) dürfen ein- und ausgehängt
werden.
backuppc ALL=(ALL) NOPASSWD: /usr/bin/rsync *,/bin/mount *,/bin/umount *
Der Übersichtlichkeit halber bekommt jeder PC seine eigene Konfigurationsdatei:
/etc/BackupPC/pc/hostname.pl
Anpassen des Backup Kommandos für localhost:
$Conf{RsyncClientCmd} = '/usr/bin/sudo $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '/usr/bin/sudo $rsyncPath $argList+';
Den root Zugang mittels sudo freizugeben findet auch bei der Sicherung von Daten auf entfernten Unix und MacOSX Rechnern Anwendung, muss dort also ebenso konfiguriert werden.
Einbinden von zu sichernden Verzeichnisbäumen. Wenn Datenbanken gesichert werden sollen, hier ist der Platz für den Datenbanksicherungsbefehl.
$Conf{DumpPreUserCmd} = '/usr/bin/sudo mount /boot';
$Conf{DumpPostUserCmd} = '/usr/bin/sudo umount /boot';
$Conf{RestorePreUserCmd} = '/usr/bin/sudo mount /boot';
$Conf{RestorePostUserCmd} = '/usr/bin/sudo umount /boot';
Die Variablen
$Conf{RsyncShareName}, $Conf{BackupFilesExclude}
definieren die zu sichernden Daten,
$Conf{BlackoutPeriods}
spezifiziert Tageszeiten, zu denen kein Backup erfolgen soll.
SSH Tunnel
Unix basierte Rechner im Netzwerk werden über ssh gesichert. Dafür muss dem Benutzer backuppc das Recht eingeräumt werden, sich auf dem entfernten Rechner ohne Angabe eine Passwortes anzumelden. Vorgehen: Als userA auf dem Client und als Benutzer backuppc auf dem Server mit
ssh-keygen -t rsa
ohne Angabe eines Passworts Schlüsselpaare erzeugen. Der öffentliche Schlüssel id_rsa.pub vom Benutzer backuppc wird in die Datei ~/.ssh/authorized_keys von userA geschrieben
cat backuppc_id_rsa.pub >> ~/.ssh/authorized_keys
Beispiel der ~/.ssh/authorized_keys mit zusätzlicher Beschränkung auf die Server IP
from="192.168.foo.foo" ssh-rsa c2EAAAABIwAAA(...)Qb69lo== backuppc@server-hostname
auf dem Server wird der Schlüssel von userA hinzugefügt
cat userA_id_rsa.pub >> ~/.ssh/known_hosts
Die Bekanntmachung des Hosts geschieht einfacher über die Verbindungsaufnahme auf der Kommandozeile - siehe Testkommando. Zur Überprüfung des Fingerabdrucks des Rechners mit dem eine Verbindung aufgebaut werden soll:
ssh-keygen -l
An der Eingabeaufforderung:
/etc/ssh/ssh_host_rsa_key.pub
Beispiel known_hosts
rechnerA,192.168.foo.foo ssh-rsa IwAAAQEAq2PwH9(...)qDmlogB==
Das Heimatverzeichnis von backuppc sollte existieren.
Verbindungstest: Eingeloggt als Benutzer backuppc wird mittels
ssh userA@rechnerB
versucht eine Verbindung aufzubauen. Funktioniert das, wird BackupPC angewiesen es genauso zu machen:
$Conf{RsyncClientCmd} = '$sshPath -q -x -l userA $host /usr/bin/sudo $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l userA $host /usr/bin/sudo $rsyncPath $argList+';
WOL (wake on lan) aktivieren
Rechner, die bei Nichtbenutzung in den Bereitschaftsmodus wechseln, weckt
Conf{PingCmd} = '/etc/BackupPC/pc/wakeup.sh 00:16:cb:a3:39:64 1 $host';
wobei /etc/BackupPC/pc/wakeup.sh folgendermaßen aussieht:
#!/bin/bash
# Jeglicher Output auf die Standardausgabe muss vermieden werden
wakeonlan $1 &>/dev/null
# Zeit in Minuten zum Aufwachen
sleep ${2}m
# ist der Rechner erreichbar?
/bin/ping -c 1 -w 3 $3
Mac OSX Rechner: Systemeinstellungen - Energie sparen - "Bei administrativen Netzwerkzugriffen aufwachen" aktivieren. Mac Laptops mit Snow Leopard (>2009) wachen auch über WLAN auf, wenn das Netzteil angeschlossen und der Deckel aufgeklappt ist.
Bei Windows findet sich diese Einstellung im Eigenschaftsdialog der Netzwerkkarte. Wo genau hängt von der verwendeten Hardware ab.
Beispiel für SiS 900-basierte PCI-Fast Ethernet-Adapter: Gerätemanager -> Netzwerkadapter -> Energieverwaltung -> Aktivieren von "Gerät kann den Computer aus dem Standbymodus
aktivieren" UND "Nur Verwaltungsstationen können Standbycomputer aktivieren".
Links: