In einem früheren Artikel mit dem Titel Sysadmin-Tools:Verwenden von rsync zum Verwalten von Sicherung, Wiederherstellung und Dateisynchronisierung habe ich cp
besprochen und sftp
, und befasste sich mit den Grundlagen von rsync
zum Verschieben von Dateien. Es gibt auch ein paar andere großartige Artikel hier zum Thema Sysadmin auf tar und SSH aktivieren, die Sie sich ansehen sollten. Das Kopieren von Dateien zu und von Remote-Systemen und eine einfache Möglichkeit, ein Backup von etwas zu erstellen, an dem Sie gerade arbeiten (oder von kritischen Unternehmensdaten), sind grundlegende, nützliche Tools in der Sysadmin-Toolbox, die ich immer wieder verwende. Manchmal möchten Sie jedoch etwas Anspruchsvolleres tun, z. B. Daten über eine weniger vertrauenswürdige oder langsamere Verbindung verschieben. Rsync
kann Verschlüsselung zum Schutz während der Übertragung, Komprimierung für einen besseren Datenfluss und Prüfsummen bereitstellen, um sicherzustellen, dass Sie das erhalten, was Sie erwartet haben.
[ Den Lesern gefiel auch: So kopieren Sie Dateien sicher zwischen Linux-Hosts mit SCP und SFTP ]
Betreuen einer Website
Ich habe zuerst angefangen, rsync
zu verwenden um eine lokale Version einer Website zu synchronisieren, die ich damals verwaltete, als CI/CD für ihren Vater nur ein Augenzwinkern war. Ich könnte eine lokale Kopie behalten, um daran zu arbeiten, und auch eine Sicherungskopie der neuesten Version der Site haben. Ich werde dieses Szenario als mein Beispiel verwenden. Sie können rsync
verwenden um jedes entfernte Dateisystem für Backups zu synchronisieren oder um schnell eine Test-to-Production-Pipeline zu erstellen. Ich habe es auch verwendet, um ein Verzeichnis zu synchronisieren und dann tar
verwendet um lokale Backups zu erstellen:
skipworthy ~ enable websync ls -al
total 8
drwxrwxr-x 2 skipworthy skipworthy 4096 Dec 16 13:57 .
drwxrwxr-x 5 skipworthy skipworthy 4096 Dec 16 14:01 ..
skipworthy ~ enable websync rsync -aruv 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
enable/
enable/bar
enable/foo
enable/index
sent 85 bytes received 229 bytes 209.33 bytes/sec
total size is 0 speedup is 0.00
skipworthy ~ enable websync ls -l
total 4
dr-xr-xr-x 2 skipworthy skipworthy 4096 Dec 16 13:49 enable
Wie zuvor mit dem lokalen rsync
, wir laufen im Archivmodus und sparen mtime und Dateiattribute, rekursiv in Unterverzeichnisse und nur aktualisierte Daten, die neu oder geändert sind.
Hinweis :-v
bedeutet fast immer ausführlich , Ausgabe an die Konsole senden.
Nehmen wir also an, ich wollte der Website eine Seite hinzufügen und sie hochladen:
skipworthy ~ enable websync rsync -aruv ./* 192.168.11.111:/usr/share/httpd/enable
sending incremental file list
pagetwo
rsync: recv_generator: mkdir "/usr/share/httpd/enable/enable" failed: Permission denied (13)
Dies ist ein guter Zeitpunkt, um darauf hinzuweisen, dass Sie einige Dinge beachten müssen, wenn Sie rsync
verwenden Dateien zu pushen. Rsync
benötigt die Berechtigung für den gesamten Verzeichnisbaum, nicht nur für das Zielverzeichnis. Es gibt mehrere Möglichkeiten, wie Sie dies erreichen können. Zum einen ist es möglich, die uid anzugeben und gid des rsync
Daemon in /etc/rsyncd.conf
. Eine andere Möglichkeit besteht darin, rsync
auszuführen als Benutzer mit den erforderlichen Berechtigungen. Beides kann in einer sicheren Umgebung problematisch sein, gehen Sie hier also vorsichtig vor.
Beachten Sie auch, dass dies standardmäßig der Fall ist, wenn Sie rsync
verwenden aus der Ferne verbinden Sie sich direkt mit rsync
Dienst auf Port 873 . Daran müssen Sie denken, wenn Sie Firewall-Regeln und -Berechtigungen einrichten. Darüber hinaus gibt es SELinux-Berechtigungen, die eine ganz andere Diskussion sind und nicht im Rahmen dieses Artikels liegen. Eine Lösung für das Problem mit Verzeichnisberechtigungen und Sicherheitsbedenken im Allgemeinen ist die Verwendung von SSH (das sollte Ihnen jetzt bekannt vorkommen). SSH richtet einen verschlüsselten Tunnel ein und kann so eingestellt werden, dass es jeden Port abhört, ganz zu schweigen davon, dass Sie einen SSH-Schlüssel angeben können, um die Verbindung weiter zu sichern und Remote-Verbindungen etwas automatisierungsfreundlicher zu gestalten.
Erweiterte Funktionen
Für dieses nächste Beispiel werde ich diese Änderungen als Root übertragen. Bitte sei nicht wie ich:
rsync -aruv -e ssh ./* [email protected]:/usr/share/httpd/enable
[email protected]'s password:
sending incremental file list
pagetwo
sent 246 bytes received 36 bytes 43.38 bytes/sec
total size is 31 speedup is 0.11
Beachten Sie erneut, dass die üblichen SSH-Optionen für Verbindungen verfügbar sind, einschließlich der Angabe des Ports und des Schlüsselorts. Rsync
erlaubt Ihnen auch, die Remote-Shell-Option auszuwählen, solange sie auf beiden Seiten installiert und in .ssh/config
konfiguriert ist .
Prüfsummen
Ich habe Prüfsummen bereits erwähnt, und hier gibt es zwei potenziell nützliche Dinge. Zuerst rsync
führt standardmäßig eine Prüfsumme aus und verifiziert sie dann auf dem Ziel, wodurch Sie gewarnt werden, dass Daten während des Flugs verloren gehen oder beschädigt werden.
Zweitens können Sie auch Prüfsummen verwenden, um zu bestimmen, welche Dateien übertragen werden sollen (d. h. welche Dateien tatsächlich anders sind zwischen Quelle und Ziel), was nützlich ist, wenn Sie nicht sicher sind, ob die mtime /eine Zeit stellt die tatsächliche Version der gewünschten Datei dar. Ich hatte Dateisysteme, die ich zu synchronisieren versuchte und die berührt wurden von einer anderen App, daher waren die Zeiten falsch.
skipworthy ~ enable websync rsync -aruv -e ssh --checksum 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
sent 26 bytes received 364 bytes 780.00 bytes/sec
Hinweis :Dies verursacht zusätzlichen Aufwand bei der Verarbeitung und bei der Übertragung, da für jede Datei auf jeder Seite eine Prüfsumme generiert und dann verglichen wird.
Komprimierung
Ein weiterer nützlicher Trick ist die Komprimierung. Das -z
Option komprimiert den Stream, --zc
legt den Komprimierungstyp fest und --zl
setzt den Pegel:
skipworthy ~ enable websync rsync -aruv -e ssh --zc=zlib --zl=6 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
sent 26 bytes received 248 bytes 548.00 bytes/sec
total size is 31 speedup is 0.11
Wenn Sie den Typ oder die Ebene nicht angeben, rsync
verwendet eine in der RSYNC_COMPRESS_LIST bereitgestellte Liste Umgebungsvariable zum Aushandeln eines gemeinsamen Komprimierungstyps und -niveaus.
[ Suchen Sie nach mehr Informationen zur Systemautomatisierung? Beginnen Sie mit The Automated Enterprise, einem kostenlosen Buch von Red Hat. ]
Abschluss
Da haben Sie es also:rsync
ist ein weiteres Werkzeug, das immer noch nützlich und relevant für die Administration von Linux-Systemen ist – ein Werkzeug, über das ich in meiner Karriere oft froh war, es zu haben. Es gibt viele, viele weitere Dinge, die Sie damit tun können, die wir hier nicht erkunden konnten – schauen Sie wie immer in den Manpages nach!