In unserem heterogenen Netzwerk mit Windows-, MacOS- und Linux-Clients werden alle Nutzer-Daten letztendlich auf einem Linux-Server gespeichert. Dies geschieht teilweise direkt, teilweise über periodisch laufende Sync-Prozesse. Vielleicht erstelle ich mal eine Beschreibung, wie das bei uns realisiert wird, dies ist aber Stand heute nicht geplant.
Auf dem Linux-Server finden sich die Daten dann im Home-Verzeichnis der angelegten User. Diese wollte ich einem regelmäßigen Backup unterziehen. Jetzt kann man natürlich sagen, dass einfach nur diese Home-Verzeichnisse kopiert werden müssen und fertig. Stimmt natürlich erstmal, aber ich wollte noch ein paar Dinge mehr:
apt-get install afio parallel gzip perlinstallieren, wenn nicht schon geschehen.
Parallele Instanzen:
### # Wieviele parallele Instanzen? # # Zu beachten bei magnetische Platten: # Hier sind die Festplatten selbst und deren Anschluss der limitierende # Faktor. Wenn 3, 4 oder mehr Instanzen gleichzeitig Daten auf einer # magnetischen Platte suchen und auch schreiben wollen stören sich die # Instanzen bei den Zugriffen gegenseitig. # # Zu beachten bei SSDs: # Sind lediglich SSDs beteiligt kann man durchaus die Instanzen hoch- # setzen und die Verarbeitungsraten vergleichen, um die schnellste Einstellung # zu ermitteln. Ich konnte dies allerdings nicht ausprobieren da auf # unserem Server die Daten auf magnetischen Platten liegen. INSTANZEN=2Wer nur SSDs in Betrieb hat kann hier mal mit mehr Instanzen rumspielen. Bei magn. Platten stören sich parallele Prozesse, sowohl beim Lesen als auch beim Schreiben. Siehe auch weiter unten Benchmarks - und einige Überlegungen.
Wo liegen die Home-Verzeichnisse der User?
Dies ist das Verzeichnis, dass gebackuped wird.# wo liegen die home-Directories der User? Für gewöhnlich ist das "/home". HOMEDIR="/home"
Zielverzeichnis für das Backup:
### # wo soll das Backup hin? (bei uns ist unter /mnt/backup eine separate Platte gemountet). Das # Backup-Verzeichnis sollte auf jeden Fall auf einer anderen Platte als die Daten liegen. # Liegt alles auf einer sind bei einem Ausfall sowohl die Daten als auch das Backup futsch. BUPDIR="/mnt/backup"Ich erwähne es hier nochmal, da es wirklich wichtig ist: Legt
Vorheriges Backup festhalten?
Dies ermöglicht es, 3 Datenbestände vorzuhalten:### # altes Backup in Unterverzeichnis "old/" sichern? # KEEPOLD=<true|false> KEEPOLD="true"
Backup komprimieren?
### # Komprimierung # COMPRESS=<true|false> #COMPRESS="true"Unser Server hat zuwenig Performance um hier wirklich loszurasen - und da wir genügend Platz haben lasse ich die Backups unkomprimiert erstellen. Erst wenn die Backups von Zeit zu Zeit auf eine externe USB-Platte gespielt werden wird komprimiert. Das macht bei uns dann aber ein anderer, schnellerer Rechner.
Grösse eines Backup-Files:
### # Grösse eines Backup-Files #BACKUPSIZE=$((2**31-2**23)) # 2 GByte - 10 MByte Buffer BACKUPSIZE=$((2**32-2**23)) # 4 GByte - 10 MByte BufferGanz am Anfang - das Skript hat seinen Ursprung in 2004 - war geplant, das Backup von Zeit zu Zeit auf optische Datenträger zu sichern: Anfangs CDs, dann DVDs. Deshalb findet sich in einem Backup auch immer noch das Skript
CDs und später auch DVDs wurden aber schnell zu klein. Auch sind optische Datenträger inzwischen nicht mehr zeitgemäß, weswegen es
egal ist, wie groß eine Backup-Datei ist. Ich habe die Erstellung von backuptodvd.sh
einfach nie aus dem Backup-Skript herausgenommen.
Angaben für backuptodvd.sh
:
### # Angaben für "backuptodvd.sh" (sind für das eigentliche Backup nicht notwendig, # sondern wenn man später die BUP-Files auf DVDs schreiben möchte) BURNDEVICE="/dev/cdrom" DVDCHANGENOTIFY="true" ROOTUSER="root" # bekommt eine Mail mit der Aufforderung, einen neuen Rohling einzulegenWie oben schon geschrieben: Ich habe
# Benchmarks ################################################################### # # # Instanzen Kompri- Ver.-Rate Laufzeit Umfang # # mierung? # # # # 1 nein 27,1 MByte/s 7:40:29 748 GByte # # 1 nein 26,7 MByte/s 7:41:49 740 GByte # # 2 nein 26,6 MByte/s 7:44:29 742 GByte # # 3 nein 26,5 MByte/s 7:57:29 759 GByte # # 2 nein 26,0 MByte/s 8:05:12 756 GByte # # 3 nein 26,0 MByte/s 8:06:04 758 GByte # # 3 nein 25,8 MByte/s 8:08:34 740 GByte # # 4 nein 25,5 MByte/s 8:15:51 759 GByte # # 4 nein 25,4 MByte/s 8:09:02 748 GByte # # 4 ja 10,7 MByte/s 19:14:10 758 GByte # # # ###################################################################Es zeigt sich, dass es zumindest auf unserem Server keinen Sinn macht, das Backup mit vielen parallelen Tasks laufen zu lassen. Die Hardware ist etliche Jahre alt (CPU mit 4 Kernen ohne Hyperthreading, 8 GByte RAM, eine relative alte Debian-Installation, und nur SATA-Magnetplatten), entsprechend ist die Performance. Ich hatte mir trotzdem mehr erhofft.
Meine Vermutung ist, dass sich die unterschiedlichen Tasks bei den Festplattenzugriffen gegenseitig stören. Mit steigender Task-Anzahl sinkt die Verarbeitungsrate. Klar: Wenn der Kamm mit den Lese- und Schreibköpfen permanent zwischen den Stellen hin und her wechseln muss, an denen die verschiedenen Tasks sowohl Daten lesen als auch schreiben - auch wenn dies auf einer anderen Platte ist - startet bei jedem Wechsel der Such- und Positioniervorgang des Kamms erneut (Stichworte: Spurwechsel- & Latenzzeiten). Dadurch sinkt in Summe die Verarbeitungsrate.
Auch mit eingeschalteter Komprimierung zeigen sich auf der alten Hardware keinerlei Geschwindigkeitsvorteile. Ich lasse sie bei uns ausgeschaltet.
Interessant wäre das Backup-Skript mal auf einem wirklich performanten Server mit vielen Kernen, großzügigem Speicherausbau und SSDs laufen zu lassen. Da dürfte die parallele Abarbeitung voll zum Tragen kommen. Hier muss aber jeder mit seiner eigenen Hardware eigene Benchmarks durchführen.
Bei uns läuft das Backup immer in der Nacht von Freitag auf Samstag um 0:35 Uhr. Der entsprechende Eintrag in /etc/crontab
ist:
35 0 * * 6 root <Pfad woWenn das Skript durchgelaufen ist wird eine Mail mit einigen Statistik-Daten des Backup-Laufes anbackup_home.sh
liegt>/backup_home.sh > /dev/null 2>&1
Bei jedem Backup-Lauf wird für jeden User ein Restore-Skript erzeugt:
restore_$USER.shDieses Skript findet sich in dem jeweiligen Backup-Verzeichis. Es sollte auch immer beim Backup belassen werden. Zum Restore einfach dieses Skript starten, der Inhalt des Backups wird dann in ein Unterverzeichnis entpackt.
Und hier das Skript:
Wer Lust hat: Bitte schön, auch ich trinke gerne mal ein Bier! :-)
Danke!