Sichern von Linux und Windows Systemen mit BackupPC

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man Linux und Windows Systeme mit BackupPC sichert. BackupPC fungiert als Server und ist auf einem Linux System installiert. Von da aus kann es sich zu allen Linux und Windows Systemen in Deinem lokalen Netzwerk verbinden um sie zu sichern und wiederherzustellen ohne das Werk des Benutzers auf diesem System zu stören. Auf dem clients wird minimale oder gar keine Konfiguation benötigt. BackupPC unterstützt die ganze und schrittweise Sicherung und hat eine eingängige Benutzeroberfläche für sowohl Adminstratoren als auch normale Benutzer, sodass Sicherungen und Wiederherstellungen durch einen Web Browser gemanaget werden können. An dieser Stelle sollte angemerkt werden, dass BackupPC Datei-basierte Sicherungen vornimmt, keine bit-weisen Sicherungen wie zum Beispiel Ghost4Linux. Es ist also nicht dafür geeignet Images ganzer Festplatten oder Partitionen zu erstellen.

BackupPC speichert Dateien sehr ressourcenschonend. Identische Dateien von mehreren Backups oder verschiedenen PCs werden nur einmal gespeichert. Dies führt zu großen Einsparungen an Diskspeicherplatz und Bandbreite.

Dies ist nicht der einzige Weg ein solches System einzurichten. Es gibt viele verschiedene Wege um ans Ziel zu kommen, dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktionieren wird!

1 Vorbemerkung

In dieser Anleitung richte ich BackupPC auf einem Debian Etch Server mit der statischen IP Adresse 192.168.0.100 und dem Hostnamen server1.example.com ein. Diese Prozedur sollte auf Debian Sarge und Ubuntu die gleiche sein.

BackupPC speichert die Sicherungskopien in /var/lib/backuppc, also habe ich eine extra Partition von ungefähr 90 GB auf dem BackupPC Server angelegt. Diese Partition ist immer noch sehr klein, vor allem wenn man eine Vielzahl von Maschinen sichern möchte, also: je größer desto besser. Weiterhin solltest Du in Betracht ziehen LVM für die /var/lib/backuppc Partition zu verwenden, damit Du sie vergrößern kannst, wenn Du musst. Mehr über LVM erfährst Du in dieser Anleitung: http://www.howtoforge.com/linux_lvm
Ich werde zeigen, wie man ein Ubuntu Edgy Eft Desktop System mit dem Hostnamen /NetBIOS-Namen falko-desktop und einen Windows XP Laptop mit dem NetBIOS-Namen notebook sichert und wiederherstellt. Beide Systeme beziehen ihre Netzwerkeinstellungen durch DHCP.

BackupPC unterstützt drei Transfermethoden smb, rsync/rsyncd, und tar. rsync ist die empfohlene Methode für Linux Systeme, daher werde ich diese für den Ubuntu Desktop verwenden. smb ist die bevorzugte Methode für Windows Systeme, also werde ich diese für den Windows Laptop verwenden.

2 Installation von BackupPC

Auf server1.example.com lassen wir diesen Befehl als root laufen um BackupPC zu installieren:

server1.example.com:

apt-get install backuppc rsync libfile-rsyncp-perl par2 smbfs

Ein paar Fragen werden Dir gestellt:

Workgroup/Domain Name: <-- WORKGROUP (eigentlich ist es egal, was Du hier eingibst)
Modify smb.conf to use WINS settings from DHCP? <-- No

Dann wirst Du folgende Nachricht sehen:

Web administration default user created

BackupPC kann über sein Web Interface verwaltet werden:
http://server1.example.com/backuppc/
Zu diesem Zweck ist ein Web Benutzer namens 'backuppc' mit 'dAamcQIH' als Passwort ertellt worden. Dieses Passwort kannst Du ändern indem Du Folgendes laufen lässt 'htpasswd /etc/backuppc/htpasswd backuppc'. <-- Ok

Bitte vermerke das Benutzerflächen-Passwort (in diesem Fall dAamcQIH) für den Benutzer von BackupPC. Wenn Du das Passwort nicht magst, kannst Du es wie folgt ändern

server1.example.com:

htpasswd /etc/backuppc/htpasswd backuppc

Öffne dann einen Browser und gib ein http://192.168.0.100/backuppc/ (oder http://server1.example.com/backuppc/ wenn Du einen geeigneten DNS Eintrag in Deinem Netzwerd für server1.example.com hast). Wenn Du eine Anmeldeaufforderung bekommst, ist alles OK, wenn nicht (wie bei meiner Installation), lass diesen Befehl laufen:

server1.example.com:

dpkg-reconfigure backuppc

Diese Frage wird erscheinen:

Add aliases for /backuppc/ to your apache config files ? <-- Yes

Gehe danach erneut zu http://192.168.0.100/backuppc/ und logge Dich mit dem Nutzernamen backuppc und backuppc's Passwort ein:

3 Die BackupPC Web Benutzeroberfläche

Da Du nun auf der BackupPC's Web Benutzeroberfläche angemeldet bist, solltest Du das Menü durchstöbern um Dich damit vertraut zu machen. Die Eintragseite ist die Standardseite:


Mit den Admin Options kannst Du die Server Konfigurationen neu laden:


Das Host Summary zeigt Dir eine Zusammenfassung von allen konfigurierten clients und ihren Sicherungsstatus. Zur Zeit ist nur localhost als client für Sicherheitskopien konfiguriert. Wir werden localhost später entfernen, da wir es nicht sichern möchten.


Unter LOG file findest Du die neusten Log-Einträge:


Die Opiton Old LOGs zeigt Dir, welche Log-Dateien verfügbar sind. BackupPC hat einen eingebauten Log Rotationsmechanismus, also wird es mehr eine Log-Datei mit der Zeit. Eine maximale Anzahl von Log-Dateien kann hier festgelegt werden /etc/backuppc/config.pl.


Die Option Email summary zeigt Dir eine Liste von Sicherungsberichten, die per Email gesendet wurden. Zur Zeit ist der Ordner noch leer:



Die Option Config file zeigt Dir die Inhalte der BackupPC Hauptkonfigurationsdatei /etc/backuppc/config.pl:


Die Option Hosts file zeigt Dir die Inhalte von /etc/backuppc/hosts (die Datei, in de die Backup Clients festgelegt sind):


Die Current Queues zeigen Anfragen, die derzeit nicht bearbeitet werden:


Die Option Documentation beinhaltet die ganze BackupPC Dokumentation. Du solltest in Betracht ziehen, dies später zu studieren:


FAQ und SourceForge sind externe Links zu BackupPC FAQ und BackupPC's SourceForge Projektseite.

Im drop-down Menü findest Du unter Hosts alle Backup Clients, die derzeit konfiguriert werden. localhost ist standardmaäßig darin aufgeführt, aber wie bereits erwähnt, werden wir ihn entfernen.


4 Die BackupPC Konfigurationsdateien

BackupPC's Konfigurationsdateien sind in dem Verzeichnis /etc/backuppc. Die wichitgsten sind /etc/backuppc/config.pl und /etc/backuppc/hosts. Du solltest sie nun öffnen um Dich mit den Konfigurationsoptionen vertraut zu machen. Beide Dateien sind stark kommentiert, Du solltest also gut verstehen, was sie tun, wenn Du sie liest. Zum Beispiel kannst Du in /etc/backuppc/config.pl bestimmen, wann und wie oft BackupPC "aufwachen" soll um Clients zu sichern, wann oder wie oft BackupPC ganz oder schrittweise sichern soll, wieviele Log-Dateien es behalten soll etc.

server1.example.com:

vi /etc/backuppc/config.pl

vi /etc/backuppc/hosts

Bearbeite sie nicht jetzt - die meisten Standardwerte sind für den Anfang in Ordnung.

5 Füge den Ubuntu System falko-desktop Als einen Backup Client hinzu

Um einen Client BackupPC hinzuzufügen, müssen wir ihn dem Verzeichnis add it to /etc/backuppc/hosts beifügen. Diese Datei hat das folgende Format:

host dhcp user moreUsers
hostname1 0 user1 anotheruser,athirduser
hostname1 1 user2 stillanotheruser

Die erste Spalte enthält den Hostnamen/NetBIOS-Namen des Client (z.B. falko-desktop), die zweite Spalte gibt an, ob der Client von DHCP konfiguriert wurde, die dritte Spalte beinhaltet einen Benutzer, dem es erlaubt ist, sich auf der BackupPC Web Benutzeroberfläche anzumelden um diesen Backup Client zu managen und die vierte Spalte (optional) beinhaltet weitere Benutzer, die das gleiche tun können.

Obwohl der falko-desktop von DHCP konfiguriert worden ist, sollte dhcp nur auf 1 eingestellt sein, wenn der folgende Test fehlschlägt:

server1.example.com:

nmblookup falko-desktop

Ist der Test erfolgreich, sollte falko-desktop's derzeitige IP Adresse angezeigt werden:

querying falko-desktop on 192.168.0.255
192.168.0.213 falko-desktop<00>

Da Du nun falko-desktop's derzeitige IP Adresse kennst, lass den gleichen Test in die andere Richtung laufen:

server1.example.com:

nmblookup -A 192.168.0.213

Wenn es erfolgreich war, sollte die Ausgabe wie folgt aussehen:

Looking up status of 192.168.0.213
FALKO-DESKTOP <00> - B <ACTIVE>
FALKO-DESKTOP <03> - B <ACTIVE>
FALKO-DESKTOP <20> - B <ACTIVE>
..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>
MSHOME <00> - <GROUP> B <ACTIVE>
MSHOME <1d> - B <ACTIVE>
MSHOME <1e> - <GROUP> B <ACTIVE>

MAC Address = 00-00-00-00-00-00

Beide Tests waren erfolgreich, also können wir dhcp auf 0 setzen und falko-desktop auf 0 in der Datei falko into /etc/backuppc/hosts und kommentieren die localhost Zeile aus:

server1.example.com:

vi /etc/backuppc/hosts


[...]
falko-desktop 0 falko #localhost 0 backuppc
Wenn die Tests nicht erfolgreich verliefen, müssten wir falko-desktop auf 1 in der Datei falko into /etc/backuppc/hosts setzen. Und außerdem hätten wir die Variable $Conf{DHCPAddressRanges} in /etc/backuppc/config.pl ändern müssen.

Wir haben den Benutzer falko der Host-Datei beigefügt. Das ist der Systembenutzer, dem BackupPC Berichte via Email schicken wird, in Verbindung zum falko-desktop, also sollten wir diesen Benutzer nun auf dem BackupPC Server einrichten:

server1.example.com:

useradd -m falko
passwd falko


Weiterhin müssen wir ein Passwort für falko für die BackupPC Web Benutzeroberfläche erstellen:

server1.example.com:

htpasswd /etc/backuppc/htpasswd falko

(Wenn Du magst kannst Du nun einen zweiten Browser öffnen und Dich als falko auf http://192.168.0.100/backuppc/einloggen.)

Nun müssen wir /etc/backuppc/config.pl bearbeiten. Die Sicherungsmethode für falko-desktop wird rsync sein, also setzen wir $Conf{XferMethod} = 'rsync';.
falko-desktop hat nur eine große Partition (/), also setzen wir $Conf{RsyncShareName} = '/';. Wenn Du mehrere Partitionen zu sichern hast, würdest Du etwas wie $Conf{RsyncShareName} = ['/', '/var', '/data', '/boot']; festlegen.

rsync wird durch SSH (port 22) durchgeleitet. SSH muss den Hostnamen oder die IP Adresse des Client wissen. Wenn Du keinen DNS Server hast, der falko-desktop zu der IP Adresse auflöst, wird SSH nicht in der Lage sein, den Namen falko-desktop aufzulösen. Daher ersetzen wir $host with $hostIP in $Conf{RsyncClientCmd} und $Conf{RsyncClientRestoreCmd}.

server1.example.com:

vi /etc/backuppc/config.pl


[...]
$Conf{XferMethod} = 'rsync'; $Conf{RsyncClientPath} = '/usr/bin/rsync'; $Conf{RsyncClientCmd} = '$sshPath -q -x -l root $hostIP $rsyncPath $argList+'; $Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l root $hostIP $rsyncPath $argList+'; $Conf{RsyncShareName} = '/'; #$Conf{RsyncShareName} = ['/', '/var', '/data', '/boot']; [...]
(Du fragst Dich jetzt vielleicht wie wir Optionen für mehrere Clients festlegen können, da die Optionen für Notebook sich von denen für falko-desktop unterscheiden. Es funtioniert so: Die Optionen in /etc/backuppc/config.pl sind globale Werte, die für alle Clients gütlig sind, wenn sie nicht ihre eigene Konfigurationsdatei in /etc/backuppc haben, die nach ihrem Hostnamen benannt ist. Für Notebook werden wir also /etc/backuppc/notebook.pl erstellen. Es wird nur die Werte beinhalten, die sich von den Werten in /etc/backuppc/config.pl unterscheiden. Eigentlich hätten wir /etc/backuppc/falko-desktop.pl für falko-desktop erstellen können anstallt /etc/backuppc/config.pl zu bearbeiten.)

Als Nächstes starte BackupPC neu:

server1.example.com:

/etc/init.d/backuppc restart


5.1 Konfiguriere den SSH Tunnel

Die rsync Sicherung wird durch SSH geleitet. Die Sicherung läuft als Benutzer backuppc, daher muss dieser Benutzer in der Lage sein, sich auf falko-desktop als root einzuloggen ohne nach einem Passwort gefragt worden zu sein. Daher müssen wir Public keys austauschen um Passwort-less Logins für backuppc zuzulassen.

Zuerst müssen wir uns bei falko-desktop in der Kommandozeile einloggen und ein root login erstellen (wenn Du Ubuntu nicht verwendest, müsstest Du wahrscheinlich schon eins haben):

falko-desktop:

sudo passwd root
sudo su

Da Du nun als root eingeloggt bist, installiere OpenSSH und rsync:

falko-desktop:

apt-get install rsync ssh openssh-server

Erstelle dann ein private/public key Paar:

falko-desktop:

ssh-keygen -t rsa


Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <-- <ENTER>
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <-- <ENTER>
Enter same passphrase again: <-- <ENTER>
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0f:95:00:4b:fd:c3:cc:0b:1f:2b:00:c9:29:bf:ca:4e root@falko-desktop

Wenn Du keinen DNS Eintrag für server1.example.com hast, solltest Du jetzt server1.example.com zu /etc/hosts hinzufügen:

falko-desktop:

vi /etc/hosts


[...]
192.168.0.100 server1.example.com server1 [...]
Als Nächstes erstellen wir ein private/public key Paar auf server1.example.com. Wir müssen dies als Benutzer backuppc ausführen!

server1.example.com:

su backuppc
ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/backuppc/.ssh/id_rsa): <-- <ENTER>
Created directory '/var/lib/backuppc/.ssh'.
Enter passphrase (empty for no passphrase): <-- <ENTER>
Enter same passphrase again: <-- <ENTER>
Your identification has been saved in /var/lib/backuppc/.ssh/id_rsa.
Your public key has been saved in /var/lib/backuppc/.ssh/id_rsa.pub.
The key fingerprint is:
74:20:65:73:47:1c:cb:ba:5d:9b:5d:56:cf:91:1a:1a backuppc@server1.example.com

Dann kopieren wir den public key auf falko-desktop. Pass auf, dass Du falko-desktop's derzeitige IP Adresse in dem scp Befehl verwendest:

server1.example.com:

cp ~/.ssh/id_rsa.pub ~/.ssh/BackupPC_id_rsa.pub
scp ~/.ssh/BackupPC_id_rsa.pub root@192.168.0.213:/root/.ssh/

The authenticity of host '192.168.0.213 (192.168.0.213)' can't be established.
RSA key fingerprint is 9b:66:3e:ce:b4:8d:63:00:ba:87:14:b2:94:03:cb:a8.
Are you sure you want to continue connecting (yes/no)? <-- yes
Warning: Permanently added '192.168.0.213' (RSA) to the list of known hosts.
root@192.168.0.213's password: <-- root password for falko-desktop
BackupPC_id_rsa.pub 100% 410 0.4KB/s 00:00

Als Nächstes hängen wir backuppc's public key an ~/.ssh/authorized_keys2 auf falko-desktop an (wir tun dies als root Benutzer):

falko-desktop:

cat ~/.ssh/BackupPC_id_rsa.pub >> ~/.ssh/authorized_keys2

Wenn Du einen entsprechenden DNS Eintrag für server1.example.com hast oder ihn der Datei falko-desktop's /etc/hosts beigefügt hast, nun kannst Du die Datei ~/.ssh/authorized_keys2 öffnen und die Zeile from="server1.example.com" am Anfang der Datei beifügen. Demnach kann nur server1.example.com kann Passwort-less logins genießen. (Wenn server1.example.com nicht zu falko-desktop aufgelöst werden kann, dann füge nicht die Zeile from="server1.example.com" hinzu)

falko-desktop:

vi ~/.ssh/authorized_keys2


from="server1.example.com" ssh-rsa AAAAB3[...]FMZpdAj8Hs9107tZ97Rq2oO/Zw== backuppc@server1.example.com
Kopiere dann root@falko-desktop's public key zu server1.example.com (pass auf, dass Du die richtige IP Adresse verwendest):

falko-desktop:

scp ~/.ssh/id_rsa.pub root@192.168.0.100:/var/lib/backuppc/.ssh/client_id_rsa.pub


The authenticity of host '192.168.0.100 (192.168.0.100)' can't be established.
RSA key fingerprint is 29:40:1c:c0:40:f8:e1:4c:68:47:36:b3:f3:53:b1:38.
Are you sure you want to continue connecting (yes/no)? <-- yes
Warning: Permanently added '192.168.0.100' (RSA) to the list of known hosts.
root@192.168.0.100's password: <-- root password for server1.example.com
id_rsa.pub 100% 400 0.4KB/s 00:00

Sichere auf server1.example.com, wir fügen root@falko-desktop's public key zu ~/.ssh/known_hosts hinzu. Vergewissere Dich, dass Du immer noch als Benutzer backuppc eingeloggt bist!

server1.example.com:

cat ~/.ssh/client_id_rsa.pub >> ~/.ssh/known_hosts

Dann wechseln wir zurück zum root Benutzer und löschen /var/lib/backuppc/.ssh/client_id_rsa.pub:

server1.example.com:

su
rm -f /var/lib/backuppc/.ssh/client_id_rsa.pub

Werde dann wieder backuppc und ändere die Zulassung des ~/.ssh Verzeichnisses:

server1.example.com:

su backuppc
chmod -R go-rwx ~/.ssh

Führe das gleiche bei falko-desktop aus (als root Benutzer):

falko-desktop:

chmod -R go-rwx ~/.ssh

Gehe dann zurücl zu server1.example.com und vergewissere Dich, dass Du immer noch als backuppc eingeloggt bist. Lass folgenden Testbefehl laufen, um zu sehen, ob falko-desktop Dich nach einem Passwort auffordert. Wenn Du alles richtig gemacht hast, sollte dies nicht passieren. (Vergewissere Dich, dass Du falko-desktop's derzeitige IP Adresse verwendest!)

server1.example.com:

ssh -l root 192.168.0.213 whoami

Die Ausgabe sollte einfach nur diese sein

root

6 Unsere erste Sicherung

Da nun unser SSH Tunnel funktioniert, können wir die BackupPC Web Benutzeroberfläche auf http://192.168.0.100/backuppc/ neu laden. Nun solltest Du falko-desktop in der Liste der Hosts sehen, localhost sollte verschwunden sein:


Du kannst warten bis BackupPC seine erste Sicherung von falko-desktop startet (in der Standardkonfiguration tut es das in der ersten vollen Stunde), oder Du startest es manueall von der Web Benutzeroberfläche aus.

Während die Sicherung voranschreitet, sieht die Host Summary Seite wie folgt aus:



Wenn die Sicherung abgeschlossen ist, sieht dies wie folgt aus:

7 Unsere erste Wiederherstellung

Zu Testzwecken können wir nun unsere Wiederherstellung von Dateien vornehmen. Gehe zu falko-desktop Home und klicke auf die Zahl des backup-Feldes unter Backup Summary (in diesem Fall 0):


Auf der nächsten Seite siehst Du ein Baummenü von falko-desktop. Durchsuche es und wähle die Dateien/Verzeichnisse, die Du wiederherstellen möchtest, klicke dann auf "Restore selected files":


Die nächste Seite zeigt Dir drei verschiedene Methoden wie man die Dateien/Verzeichnisse wieder herstellt. In diesem Fall wähle ich die erste (Direct Restore) und klicke auf "Start Restore":


Bestätige dies indem Du auf "Restore" klickst:


Die Wiederherstellung beginnt:



8 Füge das Windows System notebook Als Backup Client hinzu

Um sicherzustellen, dass Sicherungen von Windows Systemen smb verwenden, müssen wir den Ordner freibegen, den wir sichern möchten. In diesem Fall möchte ich das gesamte C: Laufwerk sichern, also klicke mit der rechten Mouse-Taste im Windows Explorer darauf und gehe zur Freigabe. Als Freigabenamen gebe ich C ein.


Auf server1.example.com füge ich die Zeile notebook in der Datei /etc/backuppc/hosts (als root Benutzer) hinzu. In diesem Fall nutze ich falko wieder als Nutzer. Wenn Du einen anderen Nutzernamen als zuvor verwendest, vergewissere Dich, dass Du ihn auf dem System und für die BackupPC Web Benutzeroberfläche einrichtest, wie in Kapitel 5 gezeigt.

server1.example.com:

vi /etc/backuppc/hosts


[...]
falko-desktop 0 falko notebook 0 falko #localhost 0 backuppc
Erstelle dann die Datei /etc/backuppc/notebook.pl und füge alle Optionen hinzu, die sich von denen in der Datei /etc/backuppc/config.pl unterscheiden. In diesem Fall fügen wir $Conf{XferMethod} = 'smb'; hinzu. Unser Freigabename ist C, also setzen wir $Conf{SmbShareName} = 'C'; hinein genauso wie den Benutzernamen und das Passwort für die Windows Freigabe:

server1.example.com:

vi /etc/backuppc/notebook.pl


$Conf{SmbShareName} = 'C';
$Conf{SmbShareUserName} = 'username'; $Conf{SmbSharePasswd} = 'password'; $Conf{XferMethod} = 'smb';
Starte dann BackupPC neu:

server1.example.com:

/etc/init.d/backuppc restart

Lade dann die BackupPC Web Benutzeroberfläche wieder. Nun solltest Du notebook in der Liste der Clients finden:


Du kannst Die erste Sicherung des notebooks manuell starten oder warten bis BackupPC sie startet:


Das war's schon für den Windows Client.

Viel Spaß beim Sichern! ;-)

9 Links