Derzeit kann die Aufrechterhaltung einer Infrastruktur beliebiger Größe ohne Backup als verrückt angesehen werden, ein Datenträger kann jederzeit ausfallen und Sie könnten wertvolle Informationen wie die Buchhaltung des Unternehmens verlieren. In diesem Beitrag werden wir uns mit Rsync befassen, einem der besten Tools für Backups auf * nix-Systemen.
Wir werden von den grundlegendsten bis hin zu fortgeschrittenen Beispielen mit Skripten und Beispielen, die Sie in Ihrer Arbeitsumgebung anwenden können, sehen.
Die Notwendigkeit, die gleichen Informationen an verschiedenen Orten zu haben, gewinnt zunehmend an Bedeutung. Dies liegt daran, dass unser Arbeitsbereich variabel ist und wir unsere Werkzeuge immer oder sogar als Sicherungsmaßnahme bei uns haben möchten.
Unter den verschiedenen Verwendungsmöglichkeiten, die rsync bietet, sind die folgenden:
- Automatisierte Backups auf Festplatten oder Remote-Servern.
- Synchronisation von Dateien und entfernten Verzeichnissen.
- Gemeinsame Übertragung von Dateien.
2. Es wurde für Remote-Backups entwickelt.
3. Es unterstützt die Kopie aller Berechtigungen der Dateien, z. B. Eigentümer, Softgroups und Hardlink.
4. Bei Verwendung der Komprimierung während des Sendens von Dateien wird weniger Bandbreite benötigt.
Lernen Sie, Rsync zu verwenden
Wir gehen vollständig auf die Verwaltung des Befehls und die nützlichsten Optionen ein.
Es besteht aus dem Befehl rsync am Anfang, den zu verwendenden Optionen, der Quelldatei und dem Ziel der Sicherung.
# rsync options source destination
Dies sind einige der nützlichsten Optionen, die mit Rsync verwendet werden können. Um alle Ihre Optionen anzuzeigen, besuchen Sie bitte die Manpage —> man rsync
-v: verbose ---> Zeigt weitere Informationen zur Operation an. -r: rekursiv ---> Unterordner werden bei der Operation verwendet. -a: archive ---> Kopiere es so wie es ist, wobei die Berechtigungen, symbolischen Links, Benutzer und Gruppen erhalten bleiben und die Änderungszeiten beibehalten werden. -z: compress ---> Komprimierung während der Übertragung aktivieren. -h: lesbar ----> Einheiten werden zum einfachen Lesen in MB GB gespeichert.
Es ist in fast allen Distributionen installiert, aber Sie können es vom Repo aus installieren.
#Roter Hut / Centos yum installiere rsync # Debian / Ubuntu / Linux Mint apt-get install rsync
Wir wenden uns seiner Verwendung zu.
Verwenden von Rsync für lokale Sicherungen
Manchmal müssen wir bestimmte Informationen unterstützen, bevor wir Änderungen vornehmen können, und im Falle eines Fehlers bei der Wiederherstellung des Backups beginnen wir mit einem Labor, das Backups von einem Ordner in einen anderen erstellt.
Zunächst haben wir überprüft, ob rsync installiert ist.
[user @ Joncak6 ~] $ welches rsync / usr / bin / rsync
Wir erstellen 2 Ordner für den Ursprung und das Ziel der Dateien.
mkdir {backup1, backup2}
In diesem Fall erstellen wir unabhängig von der Größe der Dateien mehrere Dateien im Ordner backup1.
[user @ Joncak6 ~] $ touch backup1 / file {1..75}
Das Verzeichnis sollte 75 Dateien haben.
[user @ Joncak6 ~] $ ls backup1 / Datei1 Datei14 Datei19 Datei23 Datei28 Datei32 Datei37 Datei41 Datei46 Datei50 Datei55 Datei6 Datei64 Datei69 Datei70 Datei10 Datei15 Datei2 Datei24 Datei29 Datei33 Datei38 Datei42 Datei47 Datei51 Datei56 Datei60 Datei65 Datei7 Datei7 Datei11 Datei16 Datei16 Datei25 Datei3 Datei34 Datei39 Datei43 Datei48 Datei55 Datei55 Datei66 Datei70 Datei70 Datei70 Datei12 Datei17 Datei21 Datei26 Datei30 Datei35 Datei4 Datei44 Datei49 Datei53 Datei58 Datei62 Datei67 Datei71 Datei8 Datei13 Datei18 Datei22 Datei27 Datei31 Datei36 Datei40 Datei45 Datei5 Datei54 Datei59 Datei63 Datei68 Datei72 Datei9
Wir machen Backup.
Um die Dateien auf dem Backup2 zu sichern, verwenden wir:
rsync -r backup1 / backup2
Der Ursprung muss in / enden, andernfalls würde er seinen Ordner und nicht den Inhalt kopieren.
Wenn wir backup2 eingeben, können wir die 75 Dateien sehen und mit diff überprüfen, ob es sich um 2 identische Verzeichnisse handelt.
[user @ Joncak6 ~] $ diff support1 backup2
Wenn Sie einen Softlink aus einer Datei in Verzeichnis 1 erstellen
ln -s Datei30 Datei100
Bei Verwendung von rsync mit -r wird der Softlink in diesem Fall nicht synchronisiert. Wir verwenden:
rsync -a backup1 / backup2
Wenn wir diesmal schauen, haben wir den synchronisierten Softlink.
Verwenden des Testlaufs in Rsync
Wenn wir uns nicht sicher sind, was wir unterstützen werden, können wir eine Simulation mit -und in Verbindung mit -v sehr nützlich sein.
[user @ Joncak6 ~] $ rsync -anv backup1 / backup2 Senden einer inkrementellen Dateiliste gesendet 606 Bytes empfangen 12 Bytes 1236.00 Bytes / Sek Gesamtgröße ist 6 Beschleunigung ist 0,01 (DRY RUN)
Kopieren Sie Dateien auf einen Remote-Server
Es ist möglich, Backups auf externen Servern zu erstellen. In diesem Fall müssen wir über SSH auf den Zielserver zugreifen. Denken Sie daran, die Komprimierung zu aktivieren, um die Übertragung zu beschleunigen. Wir müssen die Zugriffsadresse verwenden, gefolgt von dem Verzeichnis, in dem die Sicherung gespeichert wird.
[user @ Joncak6 ~] $ rsync -avz backup1 / [email protected]: / home / user / Die Authentizität von Host '172.31.17.163 (172.31.17.163)' kann nicht festgestellt werden. Der Fingerabdruck des ECDSA-Schlüssels lautet 0d: 0c: b1: 1d: e1: cf: 6d: 9f: 51: bf: 0f: dc: 60: 82: a1: 73. Möchten Sie die Verbindung wirklich fortsetzen (Ja / Nein)? ja Warnung: '172.31.17.163' (ECDSA) dauerhaft zur Liste der bekannten Hosts hinzugefügt. Passwort von [email protected]: Senden einer inkrementellen Dateiliste ./ file1 file10 Datei100 -> Datei30 file11 file12 file13 file14 file15 file16 ... gesendet 3312 Bytes empfangen 1443 Bytes 559,41 Bytes / Sek Gesamtgröße ist 6 Speedup ist 0,00
Es fragt uns nach dem Kennwort des anderen Servers, wenn wir es am Ende nicht mit öffentlichen Schlüsseln haben. Wir haben eine Replik des Ordners backup1 in ServerB.
Kopieren Sie Dateien von einem Remote-Server auf einen lokalen Server
Wenn Sie die Dateien auf einen lokalen Computer herunterladen möchten, verwenden wir denselben Befehl, ändern jedoch die Reihenfolge von Ursprung und Ziel gemäß dem vorherigen Beispiel.
[user @ Joncak6 ~] $ rsync -avz [email protected]: / home / user / backup1 / home / backup1
Sicherung mit SSH für verschlüsselte Daten
Sicherheit ist in Produktionsumgebungen sehr wichtig , Kundeninformationen können nicht gefährdet werden und wir können Daten verschlüsseln, während sie mit SSH gesichert werden. Ein weiterer Vorteil besteht darin, dass Anmeldeinformationen geschützt werden können, wenn wir keine öffentlichen Schlüssel verwenden. Der Nachteil besteht darin, dass mehr Systemressourcen verbraucht werden und die Übertragung möglicherweise nicht so schnell erfolgt.
SSH-Anleitung
Um ein Protokoll mit rsync zu verwenden, verwenden wir die Option -e gefolgt von dem zu verwendenden Protokoll. In diesem Fall verwenden wir ssh, und der Befehl sieht folgendermaßen aus.
[user @ Joncak6 ~] $ rsync -avzhe ssh [email protected]: / home / user / / home / backup1
Zeige Fortschritt mit Rsync
Das Erstellen eines einzelnen Backups kann einige Zeit in Anspruch nehmen. Mit der Option –progress können Sie einen Fortschritt von der Konsole abrufen. Ich empfehle nicht, diese Option mit Skripten zu verwenden. Sie kann ein sehr umfangreiches Protokoll erstellen.
[user @ Joncak6 ~] $ rsync -avzhe ssh --progress [email protected]: / home / user / / home / backup1 Senden einer inkrementellen Dateiliste erstelltes Verzeichnis / root / rpmpkgs rpmpkgs / rpmpkgs / httpd-2.2.3-82.el5.centos.i386.rpm 1,02 M 100% 2,72 MB / s 0:00:00 (xfer # 1, to-check = 3/5) rpmpkgs / mod_ssl-2.2.3-82.el5.centos.i386.rpm 99.04K 100% 241.19kB / s 0:00:00 (xfer # 2, to-check = 2/5) rpmpkgs / nagios-3.5.0.tar.gz 1,79 M 100% 1,56 MB / s 0:00:01 (xfer # 3, to-check = 1/5) rpmpkgs / nagios-plugins-1.4.16.tar.gz 2,09 Mio. 100% 1,47 MB / s 0:00:01 (xfer # 4, to-check = 0/5) 4,99 MByte gesendet, 92 Byte empfangen, 475,56 KByte / Sek Die Gesamtgröße beträgt 4,99 MB. Die Beschleunigung beträgt 1,00
Verwenden Sie -include und -exclude mit Rsync
Es ist möglich, mit Rsync Zugriffslisten mit den Optionen include und exclude zu verwenden. Sie müssen lediglich Textdateien erstellen und die Namen der Dateien oder Ordner platzieren, die in die Sicherung aufgenommen werden sollen, oder die Liste der zu ignorierenden Elemente hinzufügen Führen Sie die Übertragung durch.
Wir werden eine Datei mit dem Namen include und eine andere mit dem Namen exclude erstellen
[user @ Joncak6 ~] $ touch {include, exclude}
Wir fügen jeder Datei das hinzu, was wir wollen, und fügen dann die Datei mit rsync hinzu
[user @ Joncak6 ~] $ rsync -avze ssh --include 'include' --exclude 'exclude' [email protected]: / home / user / backup1 / / home / media / backup2
Löschen Sie Dateien mit Rsync
Standardmäßig können wir keine Dateien zwischen Quelle und Ziel löschen, es sei denn, wir verwenden die Option -delete. Wenn das Ziel eine Datei ist, die sich nicht in der Quelle befindet, werden die Dateien gelöscht, sodass die beiden Verzeichnisse gleich sind.
Wenn wir eine Datei im backup2 erstellen.
[user @ Joncak6 ~] $ touch backup2 / solvetic
Dann synchronisieren wir von der Sicherung1
rsync -avz --delete backup1 / backup2
Wir sehen, wie die Lösungsmitteldatei beseitigt wird.
Maximale Quote der zu übertragenden Dateien
Mit der Option -max-size können wir eine maximale Größe der zu übertragenden oder zu synchronisierenden Dateien festlegen. Wenn wir zum Beispiel nur Dateien übertragen möchten, die nicht größer als 200 MB sind, verwenden wir -max-size ‘200 MB’. Dies kann sehr nützlich sein, wenn wir ein Web unterstützen, aber die Datenbank weglassen möchten.
[user @ Joncak6 ~] $ rsync -avzhe ssh --max-size'200mb '/ var / www / * [email protected]: / root / backupweb
Dateien automatisch löschen, nachdem sie übertragen oder synchronisiert wurden
Angenommen, wir haben einen Webserver und einen Sicherungsserver, und wir haben eine tägliche Sicherung, und wir möchten keine Sicherungsinhalte auf dem Webserver speichern. Es ist nicht notwendig, die Dateien manuell zu löschen. rsync Ich kann sie automatisch mit der Option -remove-source-files löschen.
Nach Abschluss der Übertragung werden die Dateien sofort vom Webserver gelöscht.
[user @ Joncak6 ~] $ rsync - Quelldateien entfernen -zvh backup.tar / tmp / backups / backup.tar
gesendet 14.71M Bytes empfangen 31 Bytes 4.20M Bytes / Sek Die Gesamtgröße beträgt 16,18 MB. Die Beschleunigung beträgt 1,10 Am Ende sehen wir, dass die TAR-Datei nicht auf dem Quellserver gefunden wird. [user @ Joncak6 ~] ll backup.tar ls: backup.tar: Keine solche Datei oder kein solches Verzeichnis
Begrenzen Sie die Bandbreite beim Übertragen von Dateien mit rsync
Es ist üblich, Backups auf Produktionsservern zu erstellen, um zu vermeiden, dass der Service für die Clients beeinträchtigt wird. Bei geringer Bandbreite empfiehlt es sich, das Backup mit der Option -bwlimit zu begrenzen. Wir begrenzen die E / A-Bandbreite.
[user @ Joncak6 ~] rsync --bwlimit = 100 -avzhe ssh / var / lib / rpm / [email protected]: / root / tmprpm / [email protected] Passwort: Senden einer inkrementellen Dateiliste gesendet 324 Bytes empfangen 12 Bytes 61,09 Bytes / Sek Die Gesamtgröße beträgt 38,08 MB. Die Beschleunigung beträgt 113347,05
Wir haben das Backup auf 100 kbit / s Übertragungsgeschwindigkeit begrenzt.
Rsync und Cron für automatische inkrementelle Sicherungen
In diesem Abschnitt wird davon ausgegangen, dass Sie bereits wissen, wie die Zeit in einer Crontab angegeben wird. Weitere Informationen hierzu finden Sie in meiner vorherigen Veröffentlichung Verwenden von Cronjobs zum Automatisieren von Aufgaben.
Wenn wir täglich eine vollständige Sicherung durchführen würden, könnten wir die folgende crontab verwenden:
rsync -au --delete backup1 / backup2
Dadurch wird das Quellverzeichnis mit dem Zielverzeichnis synchronisiert, und am Ziel wird eine vollständige Sicherung durchgeführt. Wir hätten jedoch nur die Dateien im gleichen Zustand wie seit der letzten Kopie. Wir konnten zu keinem anderen Zeitpunkt zurückkehren. Um eine Kopie der Dateien so zu belassen, wie sie waren, bevor wir sie verwendet haben , dh eine Teilsicherung, sollten wir Folgendes verwenden:
rsync -ab --backup-dir = old_`date +% F` --delete --exclude = old_ * source / destination /
Jetzt hätten wir die vollständige Sicherung im Zielverzeichnis und eine Sicherung der Dateien wie vor der letzten Sicherung in einem Verzeichnis. Wenn diese Sicherung am 25. Februar 2015 durchgeführt würde, würde das Verzeichnis viejo_2015-02-25 heißen. Natürlich würde dies für jeden Tag, an dem es ausgeführt wird, ein anderes Sicherungsverzeichnis erstellen. Um Dateien an einem bestimmten Tag in Ihrem Zustand wiederherzustellen, müssten wir die Dateien nacheinander von der neuesten bis zu dem Tag kopieren, an dem sie wiederhergestellt werden sollen Vollständiger Sicherungsordner, und löschen Sie alle neuen Dateien, die nach diesem Tag erstellt wurden.
Inkrementelles Rotary Backup mit rsync und cron
Eine fortlaufende Teilsicherung bezieht sich auf die Tatsache, dass wir eine bestimmte Anzahl von Sicherungsordnern für Teilsicherungen wiederverwenden . Anstatt beispielsweise bei einer täglichen Sicherung das vollständige Datum zum Namen eines Verzeichnisses hinzuzufügen, können wir nur den Wochentag verwenden. Dadurch würden die Verzeichnisse old_0, old_1 … old_6 erstellt, und dann würde ich den Ordner old_0 Anfang der nächsten Woche erneut verwenden. Wir würden diesen Ordner entfernen, falls er existiert, und ihn für die neue Sicherung neu erstellen. Auf diese Weise konnten wir bis zu 7 Tage pünktlich zurückkehren. Der offensichtliche Vorteil davon ist, dass wir nicht mit einer großen Anzahl von Sicherungsordnern (und vielen alten Daten) enden würden, da wir den Speicherplatz und die Namen der Ordner wiederverwenden würden. Sieben Tage können sehr kurz sein, wir können die Zahl des Tages im Monat verwenden, um ungefähr 30 Tage in der Zeit zurückzukehren, oder die Zahl des Tages im Jahr, um bis zu 365 Tage in der Zeit zurückzukehren.
Wir können ein grundlegendes Skript für ein tägliches oder wöchentliches inkrementelles Backup verwenden. Dies hängt davon ab, wie Sie es in cron eingestellt haben. Ich lasse ein Beispiel für inkrementelles Backup.
#! / bin / sh SUFFIX = $ (Datum +% j) # Löschen Sie das Verzeichnis auf dem Remote-Server über SSH # ssh remote_up 'ls Backup / my_work / backup _' $ SUFFIX '&& rm -r Backup / my_work / backup _' $ SUFIX # Löschen Sie das Verzeichnis auf dem Remote-Server über SFTP sftp -b / dev / fd / 0 backup_remoto << EOF cd Backups / my_work rmdir backup_ $ SUFFIX aussteigen EOF # Aktualisieren Sie die Informationen, erstellen Sie einen Sicherungsordner und ignorieren Sie den # den Rest der Sicherungsverzeichnisse rsync -ab --recursive --files-from = 'a_support.txt' --backup-dir = backup_ $ SUFFIX --delete --filter = 'protect backup_ *' / home / juan / remote_backup: Backups / my_work /
Denken Sie daran, das Skript in crontab oder einem der Cron-Ordner hinzuzufügen.
crontab -e
Fügen Sie den Ort hinzu, an dem sich das Skript befindet.
/home/user/bin/respaldo_auto.sh