Die Uplink-Bandbreite herkömmlicher DSL-Anschlüsse ist oft ein Flaschenhals, wenn es darum geht grosse Datenmengen z.B. auf einen neuen Webserver umzuziehen oder zu sichern. So gehen bei der Migration einer sehr grossen PrestaShop-, WordPress- oder Joomla-Site schnell einige Tage oder Wochen an Download und Upload-Zeiten ins Land. Von einer zeitnahen Synchronisation der geänderten Dateien ganz abgesehen.

Bietet der neue Server jedoch SSH-Zugriff, hat man die Möglichkeit direkt von Server zu Server zu synchronisieren und nutzt so die uneingeschränkte Bandbreite der Provider.

Grosse Datenmengen per LFTP von Server zu Server synchronisieren

Das Werkzeug der Wahl heisst LFTP. Es ist unter Linux, Mac OSX und Windows (unter CygWin) verfügbar. LFTP bietet folgende Vorteile, wenn es um die Synchronisation per FTP geht:

  • Beschleunigung durch mehrere parallele Verbindungen.
  • Synchronisation der seit der letzten FTP Sitzung geänderten Dateien.
  • Übernahme der Zugriffsrechte von Ordnern und Dateien.
  • Ausschliessen beliebiger Ordner (z.B. Datei-Cache etc.)

Das folgende Script synchronisiert alle geänderten Daten in nur eine Richtung, von Server1 auf Server2. Das Script kann sowohl zur täglichen Datensicherung als auch für einen Server-Umzug benutzt werden. Wird auf dem Quellserver eine Datei gelöscht, verschwindet sie auch auf dem Zielserver.

Es setzt folgendes Szenario voraus:

  • Wir sind auf Server2 (unserem Umzugs-Ziel) per SSH eingelogged.
  • Server1 ist per FTP erreichbar. Benutzername ist „username“, Passwort ist „password“
  • Die Verzeichnisse „DISABLED“ und „logs“ sollen nicht übertragen werden.
  • Daten werden nur von Server1 nach Server2 synchronisiert, nicht umgekehrt.
  • Quellordner auf Server 1 ist „/“, Zielordner auf Server2 ist „domain.com“

Die verwendeten Parameter haben folgende Bedeutung:

  • set ftp:ssl-allow no : LFTP versucht eine unverschlüsselte Verbindung aufzubauen. Vorteile sind eine ca. 30% schnellere Datenübertragung und Vermeiden des Fehlers „mirror: Fatal error: Certificate verification“, falls das SSL-Zertifikat nicht zum Namen des FTP-Servers passt. Nachteil: Die Datenvebindung ist anfällig für Man-in-the-Middle Angriffe.
  • set ftp:list-options -a : LFTP kopiert versteckte Dateien, wie z.B. .htaccess, auch wenn diese vom FTP-Server nicht standardmässig mit aufgelistet werden.
  • mirror : Spiegle den Quell-Ordner auf den Ziel-Ordner.
  • –use-pget-n=5 : Transferiere grosse Dateien in bis zu 5 Verbindungen gleichzeitig.
  • –parallel=12 : Nutze bis zu 12 Verbindungen gleichzeitig.
  • –use-cache : Benutze einen Cache-Speicher für Verzeichnisse.
  • –verbose : Ausgabe aller Aktionen in Klartext.
  • –only-newer : Kopiere nur Dateien, die nicht existieren oder neuer sind.
  • –delete : Lösche Dateien auf dem Zielserver, wenn diese auf dem Quellserver nicht mehr existieren.
  • –exclude : Schliesse dieses Verzeichnis vom Transfer aus.

Die letzte Zeile im Script sendet eine Mail wenn der Sync-Vorgang beendet wurde.

LFTP kopiert nur Dateien aber keine Verzeichnisse ?

Dieses Verhalten ist sever-spezifisch. In diesem Fall muss der LFTP-Befehl vor ‚mirror‘ um den Parameter ‚glob -d‘ ergänzt werden:

LFTP anders herum:  Mit „–reverse“ Daten auf den Zielserver pushen

Manchmal ist es nur möglich LFTP wohl auf dem alten, aber nicht auf dem neuen Server zu installieren. Für diesen Fall gibt es die Möglichkeit die Daten auf den Zielserver zu „pushen“. Die Option hierfür heisst „–reverse“.  Zusätzlich müssen hier Ziel und Quellordner vertauscht werden. In unserem o.g. Beispiel sieht der Aufruf von LFTP dann wie folgt aus:

Hierbei gilt:

  • Wir sind auf Server1 (unser Umzugs-Quelle) per SSH eingelogged.
  • Server2 ist per FTP erreichbar.
  • Der FTP-Account endet genau im Zielverzeichnis.

 

Weiterführende Links:

LFTP Home
LFTP für Mac OSX
LFTP für Windows