Das Handbuch für Anfänger zum Synchronisieren von Daten mit Rsync
Das rsync-Protokoll kann für gewöhnliche Sicherungs- / Synchronisationsaufträge ziemlich einfach zu verwenden sein, einige der erweiterten Funktionen können Sie jedoch überraschen. In diesem Artikel werden wir zeigen, wie selbst die größten Datenhorter und Backup-Enthusiasten Rsync als eine einzige Lösung für alle ihre Datenredundanzanforderungen einsetzen können.
Warnung: Nur für fortgeschrittene Geeks
Wenn Sie dort sitzen und denken, "Was zum Teufel ist Rsync?" Oder "Ich verwende Rsync nur für wirklich einfache Aufgaben", sollten Sie unseren vorherigen Artikel zur Verwendung von Rsync zum Sichern Ihrer Daten unter Linux lesen eine Einführung in rsync, führt Sie durch die Installation und zeigt die grundlegenden Funktionen. Wenn Sie ein genaues Verständnis für die Verwendung von rsync haben (ehrlich gesagt, es ist nicht so komplex) und mit einem Linux-Terminal vertraut ist, können Sie mit diesem fortgeschrittenen Handbuch fortfahren.
Rsync unter Windows ausführen
Lassen Sie uns zunächst unsere Windows-Leser auf dieselbe Seite bringen wie unsere Linux-Gurus. Obwohl rsync für Unix-ähnliche Systeme ausgelegt ist, sollten Sie es unter Windows nicht genauso einfach verwenden können. Cygwin stellt eine wunderbare Linux-API her, die wir zum Ausführen von rsync verwenden können. Gehen Sie also zu ihrer Website und laden Sie die 32-Bit- oder 64-Bit-Version herunter, je nach Computer.
Die Installation ist unkompliziert. Sie können alle Optionen auf ihren Standardwerten belassen, bis Sie zum Bildschirm „Select Packages“ gelangen.
Jetzt müssen Sie die gleichen Schritte für Vim und SSH ausführen, aber die Pakete werden ein wenig anders aussehen, wenn Sie sie auswählen. Hier sind einige Screenshots:
Vim installieren:
SSH installieren:
Nachdem Sie diese drei Pakete ausgewählt haben, klicken Sie weiter auf "Weiter", bis Sie die Installation abgeschlossen haben. Sie können Cygwin dann öffnen, indem Sie auf das Symbol klicken, das das Installationsprogramm auf Ihrem Desktop platziert hat.
rsync-Befehle: Einfach bis erweitert
Nun, da sich die Windows-Benutzer auf derselben Seite befinden, werfen wir einen Blick auf einen einfachen rsync-Befehl und zeigen, wie die Verwendung einiger fortschrittlicher Switches dies schnell komplex machen kann.
Nehmen wir an, Sie haben eine Reihe von Dateien, die gesichert werden müssen - wer tut es heutzutage nicht? Sie schließen Ihr tragbares Festplattenlaufwerk an, damit Sie die Dateien Ihres Computers sichern können, und geben Sie den folgenden Befehl ein:
rsync -a / home / geek / files / / mnt / usb / files /
Oder wie es auf einem Windows-Computer mit Cygwin aussehen würde:
rsync -a / cygdrive / c / files / / cygdrive / e / files /
Ziemlich einfach, und zu diesem Zeitpunkt ist es wirklich nicht nötig, rsync zu verwenden, da Sie die Dateien einfach ziehen und ablegen können. Wenn Ihre andere Festplatte jedoch bereits über einige der Dateien verfügt und nur die aktualisierten Versionen sowie die seit der letzten Synchronisierung erstellten Dateien benötigt, ist dieser Befehl praktisch, da er nur die neuen Daten auf die Festplatte überträgt. Bei großen Dateien und insbesondere beim Übertragen von Dateien über das Internet ist das eine große Sache.
Das Sichern Ihrer Dateien auf einer externen Festplatte und das Aufbewahren der Festplatte am selben Ort wie Ihr Computer ist eine sehr schlechte Idee. Schauen wir uns also an, was erforderlich ist, um Ihre Dateien über das Internet an einen anderen Computer zu senden ( eines, das Sie gemietet haben, ein Familienmitglied usw.).
rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
Der obige Befehl würde Ihre Dateien an einen anderen Computer mit der IP-Adresse 10.1.1.1 senden. Dadurch werden nicht mehr vorhandene Dateien aus dem Ziel gelöscht, die nicht mehr im Quellverzeichnis vorhanden sind, die übertragenen Dateinamen werden ausgegeben, sodass Sie eine Vorstellung davon haben, was vor sich geht, und Sie können rsync über SSH auf Port 12345 tunneln.
Das -eine -v -e -delete
Schalter sind einige der grundlegendsten und am häufigsten verwendeten; Sie sollten bereits viel darüber wissen, wenn Sie dieses Tutorial lesen. Sehen wir uns einige andere Schalter an, die manchmal ignoriert werden, aber unglaublich nützlich sind:
--Fortschritt
- Mit diesem Schalter können wir den Übertragungsfortschritt jeder Datei sehen. Dies ist besonders nützlich, wenn große Dateien über das Internet übertragen werden. Bei der Übertragung kleiner Dateien über ein schnelles Netzwerk können jedoch sinnlose Informationen ausgegeben werden.
Ein Rsync-Befehl mit der --Fortschritt
wechseln, da eine Sicherung läuft:
--teilweise
- Dies ist ein weiterer Schalter, der besonders nützlich ist, wenn große Dateien über das Internet übertragen werden. Wenn rsync während eines Dateitransfers aus irgendeinem Grund unterbrochen wird, wird die teilweise übertragene Datei im Zielverzeichnis gespeichert, und die Übertragung wird an der Stelle fortgesetzt, an der sie unterbrochen wurde, sobald der Befehl rsync erneut ausgeführt wird. Wenn Sie große Dateien über das Internet übertragen (z. B. einige Gigabyte), gibt es nichts Schlimmeres als ein paar Sekunden Internetausfall, Bluescreen oder ein menschlicher Fehler, der Ihre Dateiübertragung stört, und Sie müssen von vorne beginnen.
-P
- Dieser Schalter kombiniert --Fortschritt
und --teilweise
, Verwenden Sie es stattdessen, und Ihr rsync-Befehl wird dadurch ein wenig aufgeräumt.
-z
oder --komprimieren
- Diese Option bewirkt, dass rsync Dateidaten während der Übertragung komprimiert, wodurch die Datenmenge reduziert wird, die an das Ziel gesendet werden muss. Es ist eigentlich ein ziemlich gewöhnlicher Schalter, aber bei weitem nicht zwingend erforderlich. Er ist nur für Übertragungen zwischen langsamen Verbindungen von Nutzen und wirkt sich nicht auf die folgenden Dateitypen aus: mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h
oder --für Menschen lesbar
- Wenn Sie das verwenden --Fortschritt
Wechseln Sie auf jeden Fall auch diesen. Das heißt, es sei denn, Sie möchten Byte schnell in Megabyte konvertieren. Das -h
Mit switch werden alle ausgegebenen Zahlen in ein vom Menschen lesbares Format konvertiert, sodass Sie tatsächlich die Menge der übertragenen Daten verstehen können.
-n
oder --Probelauf
- Diese Option ist wichtig, wenn Sie das rsync-Skript zum ersten Mal schreiben und testen. Es führt einen Testlauf durch, nimmt jedoch keine Änderungen vor - die beabsichtigten Änderungen werden immer noch normal ausgegeben. Sie können also alles durchlesen und sich vergewissern, dass alles in Ordnung ist, bevor Sie Ihr Skript in die Produktion rollen.
-R
oder --relativ
- Diese Option muss verwendet werden, wenn das Zielverzeichnis noch nicht vorhanden ist. Wir werden diese Option später in diesem Handbuch verwenden, um Verzeichnisse mit Zeitstempeln in den Ordnernamen auf dem Zielcomputer zu erstellen.
--ausgeschlossen von
- Diese Option wird verwendet, um auf eine Ausschlussliste zu verweisen, die Verzeichnispfade enthält, die nicht gesichert werden sollen. Es wird lediglich eine Textdatei mit einem Verzeichnis oder Dateipfad in jeder Zeile benötigt.
--Include-from
- Ähnlich zu --ausgeschlossen von
, Es wird jedoch eine Verknüpfung zu einer Datei hergestellt, die Verzeichnisse und Dateipfade der zu sichernden Daten enthält.
--Statistiken
- Nicht wirklich ein wichtiger Schalter, aber wenn Sie ein Systemadministrator sind, kann es praktisch sein, die detaillierten Statistiken jedes Backups zu kennen, nur damit Sie die Menge des über Ihr Netzwerk gesendeten Datenverkehrs überwachen können.
--Logdatei
- Dadurch können Sie die rsync-Ausgabe an eine Protokolldatei senden. Wir empfehlen dies auf jeden Fall für automatisierte Backups, bei denen Sie die Ausgabe nicht selbst durchlesen. Geben Sie die Protokolldateien in Ihrer Freizeit immer wieder an, um sicherzustellen, dass alles ordnungsgemäß funktioniert. Es ist auch ein entscheidender Schalter, den ein Sysadmin verwenden kann. Sie fragen sich nicht, wie Ihre Backups fehlgeschlagen sind, während Sie den Praktikanten verlassen haben.
Werfen wir einen Blick auf unseren rsync-Befehl, nachdem wir nun einige weitere Schalter hinzugefügt haben:
rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
Der Befehl ist immer noch recht einfach, aber wir haben noch keine anständige Sicherungslösung entwickelt. Obwohl sich unsere Dateien jetzt an zwei verschiedenen physischen Standorten befinden, schützt uns dieses Backup nicht vor einer der Hauptursachen für Datenverlust: menschliches Versagen.
Momentaufnahmesicherungen
Wenn Sie versehentlich eine Datei löschen, ein Virus eine Ihrer Dateien beschädigt oder etwas anderes passiert, wodurch Ihre Dateien unerwünschterweise geändert werden und Sie dann Ihr rsync-Sicherungsskript ausführen, werden Ihre gesicherten Daten mit den unerwünschten Änderungen überschrieben. Wenn so etwas passiert (nicht wenn, aber wann), hat Ihre Backup-Lösung Sie nicht vor Ihrem Datenverlust geschützt.
Der Schöpfer von rsync erkannte dies und fügte das hinzu --Backup
und --Backup-Verzeichnis
Argumente, damit Benutzer differenzielle Sicherungen ausführen können. Das erste Beispiel auf der Website von rsync zeigt ein Skript, in dem alle sieben Tage eine vollständige Sicherung ausgeführt wird. Anschließend werden die Änderungen an diesen Dateien täglich in separaten Verzeichnissen gesichert. Das Problem bei dieser Methode besteht darin, dass Sie zum Wiederherstellen Ihrer Dateien sieben verschiedene Male effektiv wiederherstellen müssen. Darüber hinaus führen die meisten Geeks ihre Sicherungen mehrmals am Tag aus, sodass Sie jederzeit über 20 verschiedene Sicherungsverzeichnisse haben können. Das Wiederherstellen Ihrer Dateien ist jetzt nicht nur schmerzhaft, auch das Durchsehen Ihrer gesicherten Daten kann sehr zeitaufwändig sein - Sie müssen wissen, wann eine Datei zuletzt geändert wurde, um die zuletzt gesicherte Kopie zu finden. Darüber hinaus ist es ineffizient, nur wöchentliche (oder in manchen Fällen sogar seltenere) Sicherungen auszuführen.
Schnappschuss-Backups zur Rettung! Snapshot-Sicherungen sind nichts anderes als inkrementelle Sicherungen, aber sie verwenden Hardlinks, um die Dateistruktur der ursprünglichen Quelle beizubehalten. Es mag schwierig sein, den Kopf zuerst zu umwickeln. Sehen wir uns also ein Beispiel an.
Stellen Sie sich vor, wir haben ein Backup-Skript, das alle zwei Stunden automatisch eine Sicherungskopie unserer Daten erstellt. Wenn dies von rsync ausgeführt wird, werden die einzelnen Sicherungen im folgenden Format benannt: Backup-Monat-Tag-Jahr-Zeit.
Am Ende eines typischen Tages haben wir also eine Liste von Ordnern in unserem Zielverzeichnis wie folgt:
Beim Durchlaufen eines dieser Verzeichnisse würden Sie jede Datei aus dem Quellverzeichnis genau so sehen, wie sie zu dieser Zeit war. Es gibt jedoch keine Duplikate in zwei Verzeichnissen. rsync erreicht dies durch die Verwendung von Hardlinking durch die --link-dest = DIR
Streit.
Natürlich müssen wir unser rsync-Skript ein wenig aufpeppen, um diese ordentlich und ordentlich datierten Verzeichnisnamen zu erhalten. Lassen Sie uns einen Blick darauf werfen, was es braucht, um eine Sicherungslösung wie diese auszuführen, und dann werden wir das Skript ausführlicher erklären:
#! / bin / bash
#copy old time.txt nach time2.txt
ja | cp ~ / backup / time.txt ~ / backup / time2.txt
#overwrite alte time.txt-Datei mit neuer Uhrzeit
echo 'date + "% F-% I% p"'> ~ / backup / time.txt
#make die Logdatei
echo ""> ~ / backup / rsync-'date + "% F-% I% p" '. log
#rsync-Befehl
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ / backup / rsync-'date + "% F-% I% p ''. log --exclude-from '~ / exclude.txt' --link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files / 'date + "% F-% I% p"' /
# Vergessen Sie nicht, die Protokolldatei zu scpen und mit der Sicherung zu speichern
scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / backup / time.txt'.log
Das wäre ein typisches Snapshot-Rsync-Skript. Falls wir dich irgendwo verloren haben, lass es uns Stück für Stück zerlegen:
Die erste Zeile unseres Skripts kopiert den Inhalt von time.txt in time2.txt. Die Yes-Pipe soll bestätigen, dass wir die Datei überschreiben möchten. Als nächstes nehmen wir die aktuelle Zeit und legen sie in time.txt fest. Diese Dateien werden später nützlich sein.
In der nächsten Zeile wird die rsync-Protokolldatei mit dem Namen rsync-date.log erstellt (wobei date das aktuelle Datum und die aktuelle Uhrzeit ist)..
Nun, der komplexe Befehl rsync, vor dem wir Sie gewarnt haben:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest
- Nur die Schalter, über die wir zuvor gesprochen haben; Scrollen Sie nach oben, wenn Sie eine Auffrischung benötigen.
--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r
- Dies sind die Berechtigungen für das Zielverzeichnis. Da wir dieses Verzeichnis in der Mitte unseres Rsync-Skripts erstellen, müssen wir die Berechtigungen angeben, damit der Benutzer Dateien darauf schreiben kann.
Die Verwendung von Datums- und Katzenbefehlen
Wir werden jede Verwendung der Befehle date und cat innerhalb des Befehls rsync in der Reihenfolge durchgehen, in der sie auftreten. Hinweis: Es ist uns bewusst, dass es andere Möglichkeiten gibt, diese Funktionalität zu erreichen, insbesondere bei der Verwendung von deklarierenden Variablen. Für die Zwecke dieses Handbuchs haben wir uns jedoch für diese Methode entschieden.
Die Protokolldatei wird angegeben als:
~ / backup / rsync-'date + "% F-% I% p". log
Alternativ hätten wir es auch angeben können:
~ / backup / rsync-'cat ~ / backup / time.txt'.log
So oder so --Logdatei
Der Befehl sollte in der Lage sein, die zuvor erstellte datierte Protokolldatei zu finden und in diese zu schreiben.
Die Link-Zieldatei wird angegeben als:
--link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt'
Dies bedeutet, dass die --Link-Ziel
Befehl erhält das Verzeichnis der vorherigen Sicherung. Wenn wir alle zwei Stunden Backups ausführen und es um 16:00 Uhr ist, als wir dieses Skript ausführten, dann --Link-Ziel
Befehl sucht nach dem Verzeichnis, das um 14:00 Uhr erstellt wurde, und überträgt nur die Daten, die sich seitdem geändert haben (falls vorhanden).
Zur Wiederholung wird deshalb time.txt am Anfang des Skripts in time2.txt kopiert, also die --Link-Ziel
Der Befehl kann später auf diese Zeit verweisen.
Das Zielverzeichnis wird angegeben als:
[email protected]: / home / geek2 / files / 'date + "% F-% I% p"'
Dieser Befehl legt die Quelldateien einfach in ein Verzeichnis ab, das einen Titel mit dem aktuellen Datum und der aktuellen Uhrzeit enthält.
Schließlich stellen wir sicher, dass eine Kopie der Protokolldatei in die Sicherung eingefügt wird.
scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / backup / time.txt'.log
Wir verwenden eine sichere Kopie an Port 12345, um das rsync-Protokoll in das richtige Verzeichnis zu kopieren. Um die richtige Protokolldatei auszuwählen und sicherzustellen, dass sie an der richtigen Stelle endet, muss die Datei time.txt mit dem Befehl cat referenziert werden. Wenn Sie sich fragen, warum wir uns entschieden haben, time.txt zu verwenden, anstatt nur den date-Befehl zu verwenden, liegt dies daran, dass während der Ausführung des Befehls rsync viel Zeit vergangen sein könnte. Um sicherzustellen, dass wir die richtige Zeit haben, sind wir einfach kat das Textdokument, das wir zuvor erstellt haben.
Automatisierung
Verwenden Sie Cron unter Linux oder Task Scheduler unter Windows, um Ihr Rsync-Skript zu automatisieren. Sie sollten aufpassen, dass Sie alle laufenden rsync-Prozesse beenden, bevor Sie mit einem neuen fortfahren. Der Taskplaner scheint alle bereits laufenden Instanzen automatisch zu schließen. Für Linux müssen Sie jedoch etwas kreativer sein.
Die meisten Linux-Distributionen können den Befehl pkill verwenden. Fügen Sie daher am Anfang Ihres rsync-Skripts Folgendes hinzu:
pkill -9 rsync
Verschlüsselung
Nein, wir sind noch nicht fertig. Wir haben endlich eine fantastische (und kostenlose!) Backup-Lösung im Einsatz, aber alle unsere Dateien sind immer noch anfällig für Diebstahl. Hoffentlich sichern Sie Ihre Dateien an einem Ort, der hunderte von Kilometern entfernt ist. Egal wie sicher dieser weit entfernte Ort ist, Diebstahl und Hacking können immer Probleme bereiten.
In unseren Beispielen haben wir den gesamten rsync-Verkehr über SSH getunnelt. Das bedeutet, dass alle unsere Dateien verschlüsselt werden, während sie zu ihrem Ziel übertragen werden. Wir müssen jedoch sicherstellen, dass das Ziel genauso sicher ist. Beachten Sie, dass rsync Ihre Daten bei der Übertragung nur verschlüsselt. Die Dateien sind jedoch weit geöffnet, sobald sie ihr Ziel erreichen.
Eine der besten Funktionen von rsync ist, dass nur die Änderungen in jeder Datei übertragen werden. Wenn Sie alle Ihre Dateien verschlüsselt haben und eine geringfügige Änderung vornehmen, muss die gesamte Datei erneut übertragen werden, da die Verschlüsselung nach einer Änderung vollständig randomisiert wird.
Aus diesem Grund ist es am besten / einfachsten, eine bestimmte Festplattenverschlüsselung zu verwenden, z. B. BitLocker für Windows oder dm-crypt für Linux. Auf diese Weise sind Ihre Daten im Falle eines Diebstahls geschützt, aber Dateien können mit rsync übertragen werden, und Ihre Verschlüsselung beeinträchtigt nicht die Leistung. Es gibt andere Optionen, die ähnlich wie rsync funktionieren oder sogar eine Form davon implementieren, wie z. B. Duplicity, aber es fehlen einige der Funktionen, die rsync zu bieten hat.
Nachdem Sie Ihre Momentaufnahmesicherungen an einem externen Standort eingerichtet und Ihre Quell- und Zielfestplatten verschlüsselt haben, geben Sie sich selbst ein Bild, um Rsync zu beherrschen und eine möglichst narrensichere Datensicherungslösung zu implementieren.