17Aug
Das rsync-Protokoll kann für normale Sicherungs- / Synchronisierungsjobs ziemlich einfach zu verwenden sein, aber einige der fortgeschritteneren Funktionen können Sie überraschen. In diesem Artikel zeigen wir, wie selbst die größten Data Hoarder und Backup-Enthusiasten rsync als eine einzige Lösung für all ihre Datenredundanzanforderungen einsetzen können.
Warnung: Fortgeschrittene Geeks nur
Wenn Sie da sitzen und denken "Was zum Teufel ist rsync?" Oder "Ich benutze nur rsync für wirklich einfache Aufgaben", können Sie unseren vorherigen Artikel zur Verwendung von rsync zum Sichern lesenIhre Daten zu Linux, die eine Einführung in rsync geben, führen Sie durch die Installation und stellen die grundlegenden Funktionen vor. Wenn Sie erst einmal wissen, wie man rsync verwendet( ehrlich gesagt, es ist nicht so komplex) und sich mit einem Linux-Terminal auskennt, sind Sie bereit, zu diesem erweiterten Handbuch überzugehen.
Ausführen von rsync unter Windows
Lassen Sie uns zunächst unsere Windows-Reader auf derselben Seite wie unsere Linux-Gurus anzeigen. Obwohl rsync so konzipiert ist, dass es auf Unix-ähnlichen Systemen läuft, gibt es keinen Grund, dass Sie es nicht so einfach unter Windows verwenden können. Cygwin produziert eine wunderbare Linux-API, mit der wir rsync ausführen können. Gehen Sie also auf ihre Website und laden Sie je nach Computer die 32-Bit- oder 64-Bit-Version herunter.
Installation ist einfach;Sie können alle Optionen auf ihren Standardwerten belassen, bis Sie zum Bildschirm "Pakete auswählen" gelangen.
Nun müssen Sie die gleichen Schritte für Vim und SSH ausführen, aber die Pakete werden ein bisschen anders aussehen, wenn Sie sie auswählen, also hier ein paar Screenshots:
Installation von Vim:
Installation von SSH:
Nachdem SieWählen Sie diese drei Pakete aus und klicken Sie weiter, bis Sie die Installation abgeschlossen haben. Dann können Sie Cygwin öffnen, indem Sie auf das Symbol klicken, das das Installationsprogramm auf Ihrem Desktop platziert hat.
rsync-Befehle: Einfach bis Erweitert
Jetzt, da sich die Windows-Benutzer auf derselben Seite befinden, werfen wir einen Blick auf einen einfachen rsync-Befehl und zeigen, wie die Verwendung einiger fortgeschrittener Switches ihn schnell komplex machen kann.
Nehmen wir an, Sie haben eine Reihe von Dateien, die gesichert werden müssen - wer weiß das nicht? Sie schließen Ihre tragbare Festplatte an, so dass Sie Ihre Computerdateien sichern können, und geben den folgenden Befehl aus:
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 anDieser Punkt gibt es wirklich keine Notwendigkeit, rsync zu verwenden, da Sie einfach die Dateien ziehen und ablegen können. Wenn Ihre andere Festplatte jedoch bereits über einige Dateien verfügt und nur die aktualisierten Versionen sowie die Dateien benötigt, die seit der letzten Synchronisierung erstellt wurden, ist dieser Befehl nützlich, da er die neuen Daten nur an die Festplatte sendet. Bei großen Dateien und insbesondere beim Übertragen von Dateien über das Internet ist das eine große Sache.
Wenn Sie Ihre Dateien auf einer externen Festplatte sichern und die Festplatte am gleichen Ort wie Ihren Computer aufbewahren, ist das eine sehr schlechte Idee. Sehen wir uns also an, was Sie benötigen, um Dateien über das Internet an einen anderen Computer zu senden(eine, die Sie gemietet haben, ein Familienmitglied, etc).
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. Es würde überflüssige Dateien vom Ziel löschen, die nicht mehr im Quellverzeichnis vorhanden sind, die übertragenen Dateinamen ausgeben, damit Sie eine Vorstellung davon haben, was vor sich geht, und rsync durch SSH auf Port 12345 tunneln.
Das -a -v -e --Delete-Switches gehören zu den grundlegendsten und am häufigsten verwendeten;Sie sollten bereits eine Menge über sie wissen, wenn Sie dieses Tutorial lesen. Lassen Sie uns über einige andere Schalter gehen, die manchmal ignoriert werden, aber unglaublich nützlich sind:
--progress - Mit diesem Schalter können wir den Übertragungsfortschritt jeder Datei sehen. Es ist besonders nützlich, wenn große Dateien über das Internet übertragen werden, kann aber eine sinnlose Menge an Informationen ausgeben, wenn nur kleine Dateien über ein schnelles Netzwerk übertragen werden.
Ein rsync-Befehl mit dem --progress-Schalter als Sicherung wird ausgeführt:
--partial - Dies ist ein weiterer Schalter, der besonders nützlich ist, wenn große Dateien über das Internet übertragen werden sollen. Wenn rsync aus irgendeinem Grund mitten in einer Dateiübertragung unterbrochen wird, wird die teilweise übertragene Datei im Zielverzeichnis aufbewahrt und die Übertragung wird dort fortgesetzt, wo sie nach dem erneuten Ausführen des rsync-Befehls unterbrochen wurde. Bei der Übertragung großer Dateien über das Internet( z. B. ein paar Gigabyte) gibt es nichts Schlimmeres als ein paar Sekunden Internet-Ausfall, Bluescreen oder menschliches Versagen Ihre Dateiübertragung stolpern und von vorne beginnen müssen.
-P - dieser Schalter kombiniert --progress und --partial, also benutze ihn stattdessen und es wird deinen rsync-Befehl etwas ordentlicher machen.
-z oder --compress - Dieser Schalter 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 ist weit davon entfernt, wesentlich zu sein, nur wirklich nützlich für Übertragungen zwischen langsamen Verbindungen, und tut nichts für die folgenden Dateitypen: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h oder --human-lesbar - Wenn Sie den --progress-Schalter verwenden, möchten Sie diesen auch unbedingt verwenden. Das heißt, es sei denn, Sie möchten Bytes im laufenden Betrieb in Megabyte konvertieren. Der Schalter -h konvertiert alle ausgegebenen Zahlen in ein für Menschen lesbares Format, so dass Sie tatsächlich die Menge der übertragenen Daten erkennen können.
-n oder --dry-run - Dieser Schalter ist wichtig, um zu wissen, wann Sie Ihr rsync-Skript zum ersten Mal schreiben und testen. Es führt einen Testlauf durch, führt jedoch keine Änderungen durch - die Änderungen werden weiterhin normal ausgegeben. Sie können also alles überlesen und sicherstellen, dass alles in Ordnung ist, bevor Sie Ihr Skript in Produktion nehmen.
-R oder --relative - Dieser Schalter muss verwendet werden, wenn das Zielverzeichnis noch nicht existiert. Wir werden diese Option später in diesem Handbuch verwenden, um Verzeichnisse auf dem Zielcomputer mit Zeitstempeln in den Ordnernamen zu erstellen.
--exclude-from - Dieser Schalter wird verwendet, um eine Verknüpfung zu einer Ausschlussliste herzustellen, die Verzeichnispfade enthält, die nicht gesichert werden sollen. Es benötigt nur eine einfache Textdatei mit einem Verzeichnis oder Dateipfad in jeder Zeile.
--include-from - Ähnlich wie --exclude-from, aber es verweist auf eine Datei, die Verzeichnisse und Dateipfade von Daten enthält, die gesichert werden sollen.
--stats - Nicht wirklich ein wichtiger Schalter, aber wenn Sie ein Systemadministrator sind, kann es nützlich sein, die detaillierten Statistiken jedes Backups zu kennen, nur so können Sie die Menge des Verkehrs überwachen, der über Ihr Netzwerk gesendet wird und so weiter.
--log-Datei - Damit können Sie die rsync-Ausgabe an eine Protokolldatei senden. Wir empfehlen dies auf jeden Fall für automatisierte Backups, bei denen Sie nicht selbst die Ausgabe durchlesen müssen. Geben Sie Log-Dateien in Ihrer Freizeit immer einmal an, um sicherzustellen, dass alles ordnungsgemäß funktioniert. Außerdem ist es ein entscheidender Schalter für einen Systemadministrator, damit Sie sich nicht wundern, wie Ihre Backups fehlgeschlagen sind, als Sie den zuständigen Praktikanten verlassen haben.
Werfen wir nun einen Blick auf unseren rsync-Befehl, jetzt, da wir noch ein paar weitere Switches hinzugefügt haben:
rsync -avzhP --delete --stats --log-datei = /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 ziemlich einfach, aber wir haben noch keine vernünftige Backup-Lösung erstellt. Obwohl sich unsere Dateien an zwei verschiedenen physischen Speicherorten befinden, schützt diese Sicherung uns nicht vor einer der Hauptursachen für Datenverlust: menschliche Fehler.
Snapshot Backups
Wenn Sie versehentlich eine Datei löschen, ein Virus Ihre Dateien beschädigt oder etwas anderes passiert, wodurch Ihre Dateien in unerwünschter Weise verändert werden, und Sie Ihr rsync Backup-Skript ausführen, werden Ihre gesicherten Daten mit den unerwünschten Änderungen überschrieben. Wenn so etwas passiert( nicht wenn, sondern wann), hat Ihre Backup-Lösung nichts unternommen, um Sie vor Datenverlust zu schützen.
Der Ersteller von rsync erkannte dies und fügte die Argumente --backup und --backup-dir hinzu, damit Benutzer differenzielle Sicherungen ausführen konnten. Das allererste Beispiel auf der rsync-Website zeigt ein Skript, bei 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 die Dateien sieben Mal wiederherstellen müssen, um sie wiederherzustellen. Darüber hinaus führen die meisten Geeks ihre Backups mehrmals am Tag aus, so dass Sie jederzeit mehr als 20 verschiedene Backup-Verzeichnisse haben können. Das Wiederherstellen Ihrer Dateien ist nicht nur mühsam, sondern auch das Durchsuchen Ihrer gesicherten Daten kann extrem zeitaufwendig sein - Sie müssen wissen, wann eine Datei zuletzt geändert wurde, um die neueste gesicherte Kopie zu finden. Darüber hinaus ist es ineffizient, inkrementelle Backups nur wöchentlich( oder sogar seltener) auszuführen.
Snapshot Backups zur Rettung! Snapshot-Backups sind nichts anderes als inkrementelle Backups, aber sie verwenden Hardlinks, um die Dateistruktur der ursprünglichen Quelle beizubehalten. Es mag schwierig sein, sich zuerst einmal darum zu kümmern, also schauen wir uns ein Beispiel an.
Stellen Sie sich vor, dass ein Backup-Skript ausgeführt wird, das unsere Daten alle zwei Stunden automatisch sichert. Wenn rsync dies tut, benennt es jedes Backup im folgenden Format: Backup-Monat-Tag-Jahr-Zeit.
Am Ende eines typischen Tages hätten wir also eine Liste von Ordnern in unserem Zielverzeichnis:
Beim Durchlaufen eines dieser Verzeichnisse würden Sie jede Datei aus dem Quellverzeichnis genau so sehen, wie sie zu dieser Zeit war. Es würde jedoch keine Duplikate über zwei Verzeichnisse geben.rsync erreicht dies durch die Verwendung von Hardlinking über das Argument --link-dest = DIR.
Natürlich, um diese schön und ordentlich datierten Verzeichnisnamen zu haben, müssen wir unser rsync-Skript etwas aufpeppen. Werfen wir einen Blick darauf, was es braucht, um eine solche Backup-Lösung zu realisieren, und dann erklären wir das Skript genauer:
#!/bin/ bash
#kopie alte time.txt zu time2.txt
ja |cp ~ /backup/ time.txt ~ /backup/ time2.txt
# alte time.txt-Datei mit neuer Zeit überschreiben
echo `datum +"% F-% I% p "` & gt;~ /backup/ time.txt
#make die Protokolldatei
echo "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log Befehl
#rsync
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-datei = ~ /backup/ rsync-date + "% F-% I% p" `.log --ausschluss-aus '~ / exclude.txt' --link-dest = /home/geek2/files/` cat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `Datum +"% F-% I% p "` /
# Vergessen Sie nicht, die Log-Datei zu scpacken und mit derbackup
scp -P 12345 ~ /backup/ rsync-`kat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/` cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
Daswäre ein typisches Snapshot-Rsync-Skript. Falls wir Sie irgendwo verloren haben, lassen Sie uns das Stück für Stück sezieren:
Die erste Zeile unseres Skripts kopiert den Inhalt von time.txt in time2.txt. Die Ja-Pipe soll bestätigen, dass wir die Datei überschreiben wollen. Als nächstes nehmen wir die aktuelle Zeit und setzen sie in time.txt. Diese Dateien werden später nützlich sein.
In der nächsten Zeile wird die rsync-Protokolldatei mit dem Namen rsync-date.log angegeben( wobei Datum das tatsächliche Datum und die tatsächliche Uhrzeit ist).
Der komplexe rsync-Befehl, über den wir Sie gewarnt haben:
-avzhPR, -e, --delete, --stats, --log-Datei, --exclude-from, --link-dest - Justdie Schalter, über die wir früher 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 unser Benutzer Dateien darauf schreiben kann.
Die Verwendung von date- und cat-Befehlen
Wir werden jede Verwendung der date- und cat-Befehle innerhalb des rsync-Befehls in der Reihenfolge ihres Auftretens behandeln. Hinweis: Uns ist bewusst, dass es andere Möglichkeiten gibt, diese Funktionalität zu erreichen, insbesondere bei der Verwendung deklarierender Variablen. Für den Zweck dieses Handbuchs haben wir uns jedoch entschieden, diese Methode zu verwenden.
Die Protokolldatei wird wie folgt angegeben:
~ /backup/ rsync-`date +"% F-% I% p "`. log
Alternativ könnten wir Folgendes angegeben haben:
~ /backup/ rsync-`cat ~ /backup/ time.txt`.log
In jedem Fall sollte der Befehl --log-file in der Lage sein, die zuvor erstellte datierte Protokolldatei zu finden und in sie zu schreiben.
Die Verbindungszieldatei wird wie folgt angegeben:
--link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`
Dies bedeutet, dass der Befehl --link-dest das Verzeichnis der vorherigen Sicherung erhält. Wenn wir alle zwei Stunden Backups ausführen und es zu dem Zeitpunkt, an dem dieses Skript ausgeführt wurde, 16:00 Uhr ist, sucht der Befehl --link-dest nach dem um 14:00 Uhr erstellten Verzeichnis und überträgt nur die Daten, die sich seitdem geändert haben( wenn überhaupt).
Um das zu wiederholen, wird time.txt am Anfang des Skripts in time2.txt kopiert, sodass der Befehl --link-dest später auf diese Zeit verweisen kann.
Das Zielverzeichnis wird wie folgt angegeben:
[email protected]: /home/geek2/files/ `Datum + '% F-% I% p'`
Dieser Befehl setzt die Quelldateien einfach in ein Verzeichnis mit dem Titel des aktuellen Datums und der aktuellen Uhrzeit.
Schließlich stellen wir sicher, dass eine Kopie der Protokolldatei in das Backup eingefügt wird.
scp -P 12345 ~ /backup/ rsync-`kat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/` Katze ~ /backup/ time.txt` / rsync-`Katze ~ /backup/ time.txt`.log
Wir verwendensichere Kopie an Port 12345, um das rsync-Protokoll zu übernehmen und in das richtige Verzeichnis zu stellen. Um die richtige Protokolldatei auszuwählen und sicherzustellen, dass sie an der richtigen Stelle angezeigt wird, muss die Datei "time.txt" über den Befehl "cat" referenziert werden. Wenn Sie sich fragen, warum wir uns dafür entschieden haben, time.txt zu cattern, anstatt nur den date-Befehl zu verwenden, liegt das daran, dass während der Ausführung des rsync-Befehls viel Zeit verstrichen sein könnte, um sicherzustellen, dass wir die richtige Zeit habendas Textdokument, das wir zuvor erstellt haben.
Automation
Verwenden Sie Cron unter Linux oder Taskplaner unter Windows, um Ihr rsync-Skript zu automatisieren. Eine Sache, auf die Sie achten müssen, ist sicherzustellen, dass Sie alle laufenden rsync-Prozesse beenden, bevor Sie eine neue ausführen. Task Scheduler scheint alle bereits laufenden Instanzen automatisch zu schließen, aber für Linux müssen Sie etwas kreativer sein.
Die meisten Linux-Distributionen können den Befehl pkill verwenden. Achten Sie also darauf, Folgendes am Anfang Ihres rsync-Skripts hinzuzufügen:
pkill -9 rsync
Verschlüsselung
Nein, wir sind noch nicht fertig. Endlich haben wir eine fantastische( und kostenlose!) Backup-Lösung, aber alle unsere Dateien sind weiterhin anfällig für Diebstahl. Hoffentlich sichern Sie Ihre Dateien an einem Ort, der Hunderte von Kilometern entfernt ist. Egal wie sicher dieser ferne Ort ist, Diebstahl und Hacking können immer Probleme sein.
In unseren Beispielen haben wir unseren gesamten rsync-Datenverkehr über SSH getunnelt, was bedeutet, dass alle unsere Dateien während der Übertragung an ihr Ziel verschlüsselt sind. Wir müssen jedoch sicherstellen, dass das Ziel genauso sicher ist. Denken Sie daran, dass rsync Ihre Daten nur während der Übertragung verschlüsselt, aber die Dateien sind weit geöffnet, sobald sie ihr Ziel erreicht haben.
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 nur eine geringfügige Änderung vornehmen, muss die gesamte Datei als Ergebnis der Verschlüsselung erneut übertragen werden, wobei nach einer Änderung alle Daten randomisiert werden.
Aus diesem Grund ist es am besten / am einfachsten, eine Art von 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, Dateien können jedoch mit rsync übertragen werden und Ihre Verschlüsselung wird ihre Leistung nicht beeinträchtigen. Es gibt andere Optionen, die ähnlich wie rsync funktionieren oder sogar eine Form davon implementieren, wie z. B. Duplicity, aber ihnen fehlen einige der Funktionen, die rsync zu bieten hat.
Nachdem Sie Ihre Snapshot-Backups an einem externen Ort eingerichtet und Ihre Quell- und Zielfestplatten verschlüsselt haben, geben Sie sich einen Klaps auf die Rückseite, um rsync zu meistern und die sicherste Datensicherungslösung zu implementieren.