Filesystem Backup

Um ein Backup des Server Filesystems zu bekommen kann man die Files mit der lokalen Festplatte synchronisieren. Dieses Verfahren hat den Charme, dass Änderungen an Dateien zuerst lokal gemacht und evtl. getestet werden können. Bei einer anschliessenden Synchronisation können die Änderungen auf den Server übertragen werden.

Es ist jedoch sehr mühsam die geänderten Dateien „von Hand“ per FTP zu kopieren. Zudem werden von manchen Anwendungen Daten in Files abgelegt und diese könnten dabei versehentlich durch eine alte Version überschrieben werden.

Kurzum: Ein Tool zur intelligenten Synchronisation muss her.

Die Synchronisation von Dateien ist leider nicht immer ganz so einfach. Tools gibt es dafür jede Menge, dennoch gibt es oft Probleme. 

Ich persönlich bevorzuge Unison File Synchronizer, dieses freie Programm funktioniert unter Linux und Windows. Somit ist auch die Synchronisation zwischen Linux und Windows Systemen möglich. Zudem gibt es auf beiden Systemen eine Konsolen-Variante und eine GUI-Variante.

Die Synchronisation ist auch über eine langsame Internetverbindung relativ schnell, da Unison mit dem rsync Algorithmus arbeitet und lediglich Prüfsummen überträgt. Bei der ersten Synchronisation wird eine Art Datenbank mit einer Prüfsumme für jedes File angelegt.(Das erste mal dauert‘s länger.) Anschlissend kann somit erkannt werden auf welchem Spiegel eine Datei verändert wurde oder ob beide verändert wurden.

Weitere freie alternativen sind z.B. Fullsync und Capivara.

 

File-Synchronisation per FTP und Ihre Tücken

Oft sollen die Dateien per FTP-Zugriff (oder FTP über SSL/TLS) ausgetauscht und synchronisiert werden. Dies ist nicht mit SFTP zu verwechseln. Leider besitzt das FTP-Protokoll so einige Tücken, die eine Synchronisation nicht gerade erleichtern, um nicht zu sagen fast nicht vernünftig realisierbar machen.

  • Problem 1:
    Es können keine Prüfsummen unabhängig auf dem Server berechnet werden, um durch den Austausch der Prüfsummen Unterschiede festzustellen. Die einzige Möglichkeit besteht darin jede einzelne Datei vom Server herunter zu laden und anschliessend z.B. eine MD5 Prüfsumme zu berechnen und zu vergleichen. Nachteil: Bei größeren Datenmengen oder vielen kleinen Dateien wird diese Methode bald sehr langsam und eigentlich unbrauchbar.
  • Problem 2:
    Eine andere, schnellere Vergleichsmöglichkeit wäre der Vergleich der Zeitstempel einer jeden Datei. Nun ja im Prinzip schon, aber leider bekommt eine Datei, die vom Client auf den Server kopiert wird automatisch beim hochladen einen neuen Zeitstempel. Das ursprüngliche Erstellungsdatum der Datei bleibt nicht erhalten, sondern ist unmittelbar nach dem Hochladen bereits „neuer“ als die lokale Kopie und müsste eigentlich nach dem Hochladen sofort wieder herunter geladen werden.

Das einzige Tool das ich kenne, welches dieses Dilemma halbwegs in den Griff bekommt ist der Total Commander. Das Tool vergleicht die Zeitstempel, ist jedoch so intelligent, und setzt den lokalen Zeitstempel einer Datei unmittelbar nach dem Hochladen auf den Zeitstempel des Servers. Zu diesem Thema ist es sehr interessant mal einen Blick in die „Hilfe“ des Total Commanders zu werfen.

Man kann nur hoffen, dass ein SSH-Zugang existiert, dann kann Unison eingesetzt werden, andernfalls rate ich Euch Back your Space up zu benutzen und von einer echten Syncronisation abzusehen.

 

Synchronisation mit Unison

Unison Logo

Unison kann zwei lokale Verzeichnisse sychronisieren, dabei kann dies auch ein „eingehängtes“ Netzlaufwerk (SMB, NFS) sein. Weiterhin kann über einen SSH Zugang synchronisiert werden, wenn dort im Loginverzeichnis eine ausführbare Unison Version liegt. Ebenso kann man Unison als Server starten und dann über einen bestimmten TCP/IP-Port den Server ansprechen.

Die Config-Files (.prf) legt Unison im Verzeichnis „C:\Dokumente und Einstellungen\UserName\.unison“ bzw. /home/user/.unison ab. Es ist sehr einfach die Profile mit einem Texteditor je nach Bedarf anzupassen. Hier ein Beispiel:

Simples Config-File (sync12.prf):

Code

# include general config file include common.prf #configure the two path for syncing root = C:\sync1\ root = H:\sync2\

 

Das Common-Config-File, welches oben eingebunden wird (common.prf):

Code

# Helps out a lot on Windows fastcheck = true # place new files at the top of the list sortnewfirst = true # turn on ssh compression rshargs = -C # ignore temporary files ignore = Name Thumbs.db ignore = Name *~ ignore = Name *.tmp # ignore SubVersion files ignore = Regex .*/*\.svn.*

 

 

Back your Space up

BackyourSpaceup.gifIst die Syncronisation nicht möglich oder nicht gewünscht kann ich das PHP-Script Back your Space up empfehlen. Mit BySu ist es möglich angegebene Pfade auf dem Server in ein einziges zip-File zu packen und anschliessend herunter zu laden. Dieses vorgehen ist um ein vielfaches schneller, wie tausende von kleinen Dateien per FTP herunter zu laden.

Zudem können die Backups inkrementell durchgeführt werden und eine Automatisierung per CRON-Job ist auch möglich.

Die Veröffentlichung der letzten Version ist zwar schon eine weile her (2007), aber das Script bietet alles was man braucht um ein Backup zu erstellen.

Ein kleiner Wermutstropfen ist, dass BySu leider keine Zip-Files entpacken und ein Backup zurückspielen kann, hier kann jedoch der PHP Unzipper abhelfen.

 

PHP Unzipper

Der PHP Unzipper ist ein sehr spartanisches PHP script, welches Zip-files auf dem Server entpacken kann. Ein kleines aber sehr nützliches Tool, falls ein Backup wieder eingespielt werden muss.

 

phpFileManager

Zur Abrundung der Toolkette empfehle ich den phpFileManager. Mit diesem PHP-Script können die entpackten Dateien kopiert oder verschoben werden. Zugriffsrechte von Files können direkt auf dem Server geändert werden und mehr ..