original in en Brian Hone
en to de J�rgen Pohl
Brian Hone ist Systemadministrator und Softwareentwickler bei E-Ink Corp. In seiner Freizeit surft er in eiskaltem Wasser oder er h�ngt an Felsw�nden.
Ich k�nnte hier eine lange Liste der Gr�nde auff�hren, warum Datensicherung der Alptraum des Systemadministrators ist - falls Sie ein Administrator sind, ist das aber wahrscheinlich �berfl�ssig. Einige der Gr�nde sind: teure Hardware (die meistens nicht funktioniert), teure Software - ein Alptraum f�r das Management - und viele verschwendete Stunden, um Mehrfachversionen von Dateien zu restaurieren. Der H�hepunkt ist die meistens fehlende Priorit�t der Gesch�ftsleitung f�r Sicherheitskopien, bis zum unausweichlichen Moment, wenn diese dringend gebraucht werden. Falls Sie Datensicherung/Wiederherstellungen durchgef�hrt haben, hatten Sie bestimmt ein �hnliches Gespr�ch:
User:"Ich habe eine Datei verloren, ich brauche die
unbedingt zur�ck." "
SysAdmin:"Ok, was ist der Name?"
User:Weiss ich nicht, ich glaube es war ein 'e' im
Namen."
SysAdmin:"Ok, in welchem Verzeichnis war sie?"
User:Keine Ahnung, es k�nnte eines von diesen
dreien sein.
SysAdmin: "*Seufz*. K�nnen Sie sich erinnern, wann
Sie die Datei zuletzt gebraucht haben?"
User:"Ach...ich glaube, es war an einem Donnerstag im
Februar oder im April. Was ist das Problem? Ich dachte ihr
Leute habt eine Datensicherung f�r diese Art von
Problem."
Rsync ist eine sehr wirksame Implementation eines h�bschen kleinen Algorithmus. Seine Hauptwirkung liegt in der F�higkeit, ein Dateisystem wirkungsvoll zu spiegeln. Mittels Rsync ist es einfach, ein System einzurichten, das eine aktuelle Kopie eines Dateisystems mittels einer flexiblen Anordnung von Netzwerkprotokollen (wie nfs, smb oder ssh) erzeugt. Au�erdem kann ein auf Rsync basierendes Datensicherungssystem, alte Kopien von ge�nderten oder entfernten Dateien. Rsync hat zu viele Eigenschaften, um sie alle in diesem Artikel aufzuf�hren. Ich empfehle w�rmstens, an dieser Stelle nachzulesen rsync.samba.org.
Kurz gesagt: unser System besteht aus einer billigen
Linuxbox mit einigen preiswerten Festplatten und einem
kleinen Shellscript, das rsync aufruft. [Fig 1] Wenn wir eine
Datensicherung durchf�hren, befehlen wir rsync ein
Verzeichnis namens 'YY-DD-MM' als Speicher f�r
inkrementelle �nderungen einzurichten. Als n�chstes
durchsucht rsync die Server - von denen Sicherheitskopien
hergestellt werden sollen - auf Datei�nderungen. Ist eine
Datei ge�ndert worden, wird die alte Version in das
Inkrementellverzeichnis kopiert und dann die Datei im
Hauptdatensicherungsverzeichnis �berschrieben. [Fig
2]
Im Allgemeinen betr�gt das Volumen der �nderungen des Tages nur einen kleinen Prozentsatz des gesamten Dateisystems. Bei mir betr�gt die typische durchschnittliche Gr�sse zwischen 0,5 % bis 1%. Mit einigen Backup-Festplatten mit der doppelten Speicherkapazit�t unserer Server k�nnen wir schrittweise Sicherungskopien f�r 50 - 100 Tage unterbringen. Wenn die Festplatten voll sind, tauschen wir sie mit neuen aus und lagern die alten an einem sicheren Ort. In der Praxis ist es m�glich, inkrementelle Backups von �ber sechs Monaten auf Festplatten zu speichern. Falls Platz auf einem anderen Server vorhanden ist, k�nnen Sie die inkrementellen Backups dort speichern, bevor Sie die Festplatten wechseln, auf diese Weise k�nnen Sie die Anzahl der inkrementellen Backups beliebig gro� ansetzen.
Zur�ck zu unserer imagin�ren Unterhaltung. Anstelle eines umst�ndlichen Bandspeichersystems warten die inkrementellen Backups der letzten sechs Monate friedlich in unserer Linuxbox. Mit unser bevorzugten Kombination aus locate/find/grep finden wir alle Dateien unseres imaginaren Users, die ein 'e' enthalten und welche die Zeitmarkierung eines Donnerstags im Februar oder im April enthalten. Diese Dateien laden wir in des Users Homeverzeichnis. Das Problem, herauszufinden, welche Version die richtige ist, ist damit zu meiner bevorzugten Art von Problemen geworden: das von einem anderen.
Als n�chstes unser Lieblingsszenario - Totalverlust. Nehmen wir an, wir verlieren einen gr�sseren nfs/samba-Server. Von unserer gesicherten Sambakonfiguration k�nnen wir unseren Backupserver als Read-Only-Ersatz innerhalb von Minuten einsetzen. Probieren wir das mal mit dem Magnetband.
Magnetband-Backup | Rsync | |
---|---|---|
Kosten | Sehr hoch | Niederig |
Volle Datensicherung | Schnell | Schnell |
Teilweise Datensicherung | Schnell | Schnell |
Volles Wiederherstellen | Sehr langsam, evtl. von mehreren B�ndern | Schnell - es ist alles auf der Festplatte |
Datei wiederherstellen | Langsam, evtl. von mehreren B�ndern, richtige Version oft schwer zu finden. | Sehr schnell - es ist alles auf der Festplatte und wir haben die volle Wirkung der UN*X Suchwerkzeuge wie, grep und locate |
Totalverlust | Die einzige Option ist die vollst�ndige Wiederherstellung | Kann schnellstens in einen Dateiserver umgestellt werden. |
Es gibt viele M�glichkeiten, es aufzusetzen. Alle Werkzeuge sind Open-Source, sie sind in den meisten Distributionen enthalten und sie sind sehr flexibel. Nachfolgend beschreiben wir eine m�gliche Einrichtung - es gibt aber noch viele andere Wege.
Die Grundform dieses Skripts kam von der Rsync-Webseite. Er besteht eigentlich nur aus einem Befehl:
rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av
Die Hauptoptionen hier sind:
Das folgende Skript kann man jeden Abend mit cron unter Linux ausf�hren. Um das Skript jeden Abend um 11 Uhr zu starten, benutzen wir das Kommando "crontab -e" und dann geben wir das folgende ein:
0 23 * * * /path/to/your/script
Hier ist mein Shellskript, um das alles zusammenzufassen. Dabei gibt es wieder viele M�glichkeiten. Das folgende Script ist nur eine Implementation.
#!/bin/sh ######################################################### # Script to do incremental rsync backups # Adapted from script found on the rsync.samba.org # Brian Hone 3/24/2002 # This script is freely distributed under the GPL ######################################################### ################################## # Configure These Options ################################## ################################### # mail address for status updates # - This is used to email you a status report ################################### MAILADDR=your_mail_address_here ################################### # HOSTNAME # - This is also used for reporting ################################### HOSTNAME=your_hostname_here ################################### # directory to backup # - This is the path to the directory you want to archive ################################### BACKUPDIR=directory_you_want_to_backup ################################### # excludes file - contains one wildcard pattern per line of files to exclude # - This is a rsync exclude file. See the rsync man page and/or the # example_exclude_file ################################### EXCLUDES=example_exclude_file ################################### # root directory to for backup stuff ################################### ARCHIVEROOT=directory_to_backup_to ######################################### # From here on out, you probably don't # # want to change anything unless you # # know what you're doing. # ######################################### # directory which holds our current datastore CURRENT=main # directory which we save incremental changes to INCREMENTDIR=`date +%Y-%m-%d` # options to pass to rsync OPTIONS="--force --ignore-errors --delete --delete-excluded \ --exclude-from=$EXCLUDES --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR -av" export PATH=$PATH:/bin:/usr/bin:/usr/local/bin # make sure our backup tree exists install -d $ARCHIVEROOT/$CURRENT # our actual rsyncing function do_rsync() { rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT } # our post rsync accounting function do_accounting() { echo "Backup Accounting for Day $INCREMENTDIR on $HOSTNAME:">/tmp/rsync_script_tmpfile echo >> /tmp/rsync_script_tmpfile echo "################################################">>/tmp/rsync_script_tmpfile du -s $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile echo "Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile" Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile echo "rm /tmp/rsync_script_tmpfile" rm /tmp/rsync_script_tmpfile } # some error handling and/or run our backup and accounting if [ -f $EXCLUDES ]; then if [ -d $BACKUPDIR ]; then # now the actual transfer do_rsync && do_accounting else echo "cant find $BACKUPDIR"; exit fi else echo "cant find $EXCLUDES"; exit fi