rsync Tutorial

Wie synchronisiere ich meinen Server mit rsync?

rsync ist ein super-praktisches, kleines Tool für die Datensynchronisation unter Linux. Wenn du rsync noch nicht kennst, solltest du dir dieses vielseitige Tool definitiv einmal anschauen, es ist nämlich schon ein richtiger Klassiker in der Linux-Welt.

Mit rsync kannst du Daten via SSH Protocol zwischen zwei Servern über das Netzwerk synchronisieren. Es eignet sich perfekt als Tool für geplante Backups, Mirroring oder einfach um Daten zwischen zwei Servern zu übertragen. Wir zeigen dir in diesem Tutorial die Basics im Umgang mit rsync. Du lernst unter anderem, wie man sicher Daten via SSH zwischen zwei Servern mit rsync kopiert und synchronisiert. Zudem zeigen wir dir später im Artikel, wie du einen rsync-Deamon einrichtest – der Deamon benutzt ein eigenes Protokoll und läuft auf einem spezifischen Port. Mithilfe des Deamon kannst du Verzeichnisse auf deinem Server für andere oder dich selbst zum Download und Upload verfügbar machen.

Vorbereitungen

Als Voraussetzung, um dem kompletten Tutorial folgen zu können, benötigst du zwei Linux Server, auf denen rsync installiert ist. Ich habe für das Tutorial in wenigen Klicks zwei Ubuntu Server in meinem gridscale-Panel erstellt. Zudem musst du für einen sicheren Datentransport sicherstellen, dass deine zwei Hosts sich via SSH Key-Based Authentication verbinden können.

Den lokalen Beispielen in diesem Tutorial kannst du auch mit nur einem Linux Host folgen (s. rsync als cp Alternative).

Installation

Unter Ubuntu ist rsync standardmäßig installiert. Sollte es bei dir aus irgendeinem Grund fehlen, kannst du es mit folgendem Befehl installieren:

apt-get install rsync

Auf RHEL / CentOS / Fedora:

yum install rsync

rsync als cp Alternative

Obwohl rsync eigentlich dafür gedacht ist, Dateien zwischen zwei Hosts zu übertragen, kannst du es auch lokal als erweiterte Alternative des cp Kommandos einsetzen. Hier eignet es sich besonders für das Kopieren von größeren Dateien.

Die Syntax zum kopieren von Dateien auf lokaler Ebene mit rsync sieht folgendermaßen aus:

rsync -P [quelle] [Zielpfad]

Bspw. um eine Bilddatei in ein anderes Verzeichnis zu kopieren:

rsync -P /opt/flowy/new.jpg /home/data/

Mit dem Flag -P oder wahlweise –progress werden die Details zu deinem Kopiervorgang angezeigt. Das kann sinnvoll sein, wenn du besonders große Dateien kopierst und du den Vorgang generell überwachen möchtest.

Ganze Verzeichnisse kopieren

Mit der –recursive oder kurz -r Option kannst du ein ganzes Verzeichnis inklusive Dateien und Unterverzeichnissen kopieren.

rsync --recursive [quelle] [Zielpfad]

Weitere rsync Beispiele

Du kannst deine Copy Optionen auch weiter spezifizieren. Hier ein Beispiel, wie du ausschließlich Dateien aus einem Ordner kopierst, die maximal 2 Kilobytes groß sind:

rsync -r --max-size=2k [quelle] [Zielpfad]

Ein weiteres Beispiel mit einer min Angabe der Dateigröße:

rsync -r --min-size=100mb [quelle] [Zielpfad]

Mit diesem Befehl kopierst du nur Dateien, die mindestens 100MB groß sind in dein Zielverzeichnis.

Du kannst auch Dateien mit einer bestimmten Endung von deinem Kopiervorgang ausschließen, bspw. alle Dateien, die mit .jpg enden.

Mit diesem Befehl kopierst du den kompletten Inhalt des Quellverzeichnisses in dein Zielverzeichnis, jedoch werden alle jpg-Files im Quellverzeichnis von diesem Vorgang ausgeschlossen.

rsync -r --exclude="*.jpg" [quelle] [Zielpfad]

Dateien zwischen zwei Servern übertragen

Mit rsync kannst du auf zwei verschiedene Arten Daten zwischen zwei Hosts übertragen bzw. synchronisieren. Zum einen via Pull und zum anderen via Push. Die Syntax der beiden Befehle ist leicht unterschiedlich – welchen Befehl du anwenden musst, um deine Daten zu transportieren, entscheidet sich je nachdem, auf welchem der beiden Hosts du dich befindest.

Wenn du deine Quelle zuerst definierst, wird ein Push initiiert.

rsync [optionen] [Quelle] user@x.x.x.x:[Zielpfad]

Definierst du deinen Remote-Host zuerst, also “user@x.x.x.x” gefolgt von der Quelle auf dem Remote-Host und dem Zielpfad des anderen Hosts, imitierst du einen Pull.

rsync [optionen] user@x.x.x.x:[Quelle] [Zielpfad]

Bei user@ gibst du den User an, mit dem sich rsync auf deinem Remote-Host anmeldet, angeführt von einem @-Zeichen spezifizierst du danach die IP-Adresse des Remote-Hosts.

Hier siehst du, wie das ganze bei mir als vollständiger Befehl aussieht.

Beispiel für einen Push zwischen zwei Hosts:

rsync -r /home/data/ root@199.201.144.110:/home/data-backup

Beispiel für einen Pull zwischen zwei Hosts:

rsync -r root@199.201.144.111:/home/data-backup/extras /home/data

Weitere nützliche Optionen innerhalb von rsync:

-d kopiert nur den Ordner aber nicht den Inhalt

-t Mit der -t Option wird die Zeit und das Datum, an dem die Datei zuletzt geändert wurde, mit kopiert. Die Option -t funktioniert bei Pull und Push und ist eine gute Methode z.B. bei kritischen Backups oder immer dann, wenn du präzise Angaben darüber benötigst, wann deine Dateien zuletzt geändert wurden.

Aber rsync kann noch viel mehr, ich will dir an dieser Stelle nur die vielseitigen Möglichkeiten dieses kleinen Programms aufzeigen. Für eine ausführliche Beschreibung aller Funktionen lohnt sich ein Blick in die man-Page von rsync

man rsync

Dateien mit rsync synchronisieren

Einen regelmäßigen Sync-Job kannst du mit den richtigen Optionen genauso einfach mittels eines einzigen rsync-Befehls durchführen. Dafür musst du den Befehl nur noch in Skript bzw. Crontab packen.

rsync -rtul --delete [QUELLE] root@x.x.x.x:/[ZIELPFAD]

In dem obigen Beispiel mit den Optionen -rtu und –delete wird ein rekursives Backup -r mit Timestamp -t angelegt. Die Option -u bezweckt, dass rsync mittels seines Algorithmus nur Differenzen synchronisiert, also nur hinzugefügte oder veränderte Dateien. –delete löscht alle Dateien aus dem Zielpfad, die in der Quelle möglicherweise nicht mehr vorhanden sind und -l kopiert alle Symlinks. Mit den zahlreichen rsync-Options kannst du dir also ein Backup Kommando ganz nach deinen Ansprüchen zusammenstellen.

Bist du bereit zu starten?

Oder hast du noch Fragen? Lasse dir jetzt dein Konto erstellen oder dich in einem persönlichen Gespräch beraten.

rsync-Deamon

Du kannst rsync auch als Server-Instanz auf einem bestimmten Port laufen lassen. Dazu muss der rsync-Deamon konfiguriert und gestartet werden, standardmäßig lauscht der Deamon auf Port 873. Diese Methode ist nicht empfehlenswert für Datentransfers über ungesicherte Netzwerke wie das Internet, da das rsyncd-Protokoll keine Verschlüsselung bietet. Stattdessen bietet sich die Methode für die Synchronisation von Daten und Backups in nicht öffentlichen Netzwerken an. Darüber hinaus kannst du mit dem rsync-Deamon ganze Shared-Verzeichnisse für andere oder auch nur für dich selbst zum Download und Upload einrichten.

rsyncd.conf

Um den rsync-Deamon zu starten, sind einige Konfigurationen notwendig. Es existiert eine eigene man-Page für das rsync-Deamon Config-File, da dieses umfangreiche Konfigurationsmöglichkeiten bietet. Obwohl ich dir nachfolgend einen Überblick geben werde, rate ich dir in jedem Fall die man-Page genau durchzulesen!!

man rsyncd.conf

Hier findest du Beispiele und Anweisungen zu allen globalen und lokalen Parametern.

rsyncd.conf

Damit du den Deamon überhaupt starten kannst, muss zunächst das Config-File unter /etc/rsyncd.conf angelegt werden.

Nachfolgend siehst du eine Basic rsyncd.conf Einstellung:


motd file = /etc/rsyncd.motd
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

[my_path]
   path = /opt/flowy
   comment = My Rsync Server
   read only = no
   list = yes
   secrets file = /etc/rsyncd.secret

Die rsyncd-Konfigurationsdatei besteht aus zwei Blöcken für die Einstellungen mit unterschiedlichen Scopes. Im ersten Block werden die globalen Parameter festgelegt und im zweiten die Modul-Parameter.

Globale Parameter

modt file: Die erste Zeile definiert eine Message of the Day Datei, wie du es vielleicht bei einem FTP-Server kennst. Der Inhalt der Datei wird jedesmal dann angezeigt, wenn ein Client sich zu der rsync-Deamon Maschine verbindet. Du kannst deine Message individuell für dich anpassen und als Welcome-, Warning- oder Identifikations-Message nutzen.

log file: Die Datei in der zweiten Zeile spezifiziert eine simples log-File, zu welcher normale rum-time Messages und Diagnostics gesendet werden.

pid file: Das pid file beinhaltet die “process ID” also PID Nummer des aktiven rsync-Deamon.

lock file: Mit dem Deamon Lock File werden Mehrfachbearbeitungen von Dateien verhindert, die Datei sorgt dafür, dass alles glatt läuft beim Syncen.

Module Parameter

Bei dem Block der darauf folgt, handelt es sich um die lokalen Optionen deines rsync Deamons. In der ersten Zeile des zweiten Blocks in den eckigen Klammern trägst du den “Path Name” ein. Die rsync Syntax ist an dieser Stelle leicht verwirrend, da du hier nicht den direkten Pfad zu deinem Verzeichnis einträgst, sondern lediglich eine art Nickname bzw. den Modulnamen für dieses Verzeichnis. Du kannst hier einen kurzen Namen einfachen Typs angeben, der dein Verzeichnis beschreibt. Den eigentlichen Pfadnamen für dein rsync Verzeichnis gibst du unter dem path Parameter an.

Hier eine kleine Übersicht zu den grundlegendsten Optionen für einen rsync-Deamon, diese würdest du an erster Stelle festlegen. Die Optionen werden pro Zeile spezifiziert und als “Name = Value” Paar eingetragen.

path: Hier gibst du deinen eigentlichen Pfadnamen an, der zu syncen ist.

comment: Ein kurze knappe Beschreibung, auf was und wohin dein Pfadname verweist.

auth user: In der default Einstellung befindet sich der rsync-Deamon in dem Zustand “anonymous rsync”, was bedeutet, das sich alle User ohne ein Passwort connecten können. Du solltest hier auf jeden Fall den Zugang beschränken und Usernamen angeben, welchen gestattet ist, sich mit dem jeweiligen Modul verbinden zu können. Die Usernamen werden getrennt von Komma oder Leerzeichen angeben und müssen keine validen Systembenutzer sein. An dieser Stelle sind auch komplexere Authentifikationen möglich, wie bspw. Gruppenzuordnungen. Die Username/Passwort Kombinationen werden in der Datei gespeichert, die unter dem Parameter “secret file” angegeben ist.
secret file – Hier wird der Pfad zu der Datei angegeben, in der du die Username:Passwort oder @Groupname:Passwort Kombinationen hinterlegst (wie z.B. /etc/rsyncd.secrets). Die Datei ist zeilenbasiert, das heißt du gibst eine Kombination pro Zeile an.

Dateien über den rsync-Deamon übertragen

Starte deinen rsync-Deamon mit:

rsync --daemon

Wenn du dich vergewissern willst, ob dein rsync-Deamon gerade aktiv ist, dann nutze folgenden Befehl:

 ps x | grep rsync

rsync-Deamon Connection testen

Anschließend testen wir unsere neue Connection, indem wir uns vom Client-Host mit dem Server verbinden, auf dem wir den Deamon aktiviert haben.

Die Syntax dafür sieht wie folgt aus:

Wie du sehen kannst, wird dir nach dem Connecten dein Modulname (Der “Path Name”, der in den eckigen Klammern im config-File definiert wurde) für das Verzeichnis und das comment Parameter zurückgegeben.

Um dir den Inhalt des Verzeichnisses anzeigen zu lassen, hängst du den Modulnamen an den vorherigen Befehl:

Auf die Angabe des Ports könnte in unserem Fall genauso gut verzichtet werden, da wir für unser Beispiel nicht vom Default rsyncd-Port abgewichen sind.

Die Basic Syntax für Pull und Push über den Deamon sieht wie folgt aus:

Pull:

rsync [optionen] rsync://user@x.x.x.x[:PORT][QUELLE] [ZIELPFAD]

Push:

rsync [optionen] [QUELLE] rsync://user@x.x.x.x[:PORT][ZIELPFAD]

Fazit

Du hast gelernt, was in diesem “kleinen” vielseitigen Tool rsync steckt und kannst es nun für einfache Copy-Jobs, aufwändigere Backups zwischen zwei Servern und Mirroring Tasks einsetzen. In vielerlei Hinsicht wird rsync auf diesen Gebieten deine beste Wahl sein, einmal aufgesetzt arbeitet rsync sehr zuverlässig.