Als Systemadministrator verbringe ich den größten Teil meiner Energie mit zwei Dingen (außer dafür zu sorgen, dass es Kaffee gibt):Sich Gedanken über Backups zu machen und herauszufinden, wie man die Dinge am einfachsten und besten erledigt. Eines meiner Lieblingstools zur Lösung beider Probleme heißt rsync
.
Rsync
wurde von einem der gleichen Leute entwickelt, die Samba erfunden haben, Andrew Tridgell. Es ist ein so nützliches und flexibles Tool, dass es in jeder Version von Linux enthalten ist und auf andere Betriebssysteme portiert wurde. Am einfachsten ist rsync ein Werkzeug zum Kopieren von Dateien. Es ist jedoch viel mächtiger als das.
- Es hält zwei Sätze von Dateien auf dem neuesten Stand und synchronisiert.
- Es wird als Befehl ausgeführt und kann per Skript erstellt werden.
- Es komprimiert und verschlüsselt den Datenstrom.
- Es verwendet mehrere Arten von Fernzugriffsclients (z. B. SSH und RSH).
Daher überrascht es nicht, dass es bei vielen Systemadministratoren beliebt ist.
Die Grundlagen
Wie das mv
und cp
Befehl, in seiner einfachsten Form rsync
braucht nur eine Quelle und ein Ziel:
[root@milo enable]# rsync ./foo/testfoo ./bar/
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:15 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:08 foo
./bar:
total 8
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4982446 -rw-rw-r-- 1 root root 8 Jun 11 15:15 testfoo
./foo:
total 4
5001268 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testfoo
Wir haben testfoo
kopiert in die bar
Verzeichnis. Keine große Sache, wirklich.
Lassen Sie uns nun eine Datei zu ./foo
hinzufügen und erneut synchronisieren:
[root@milo enable]# touch ./foo/bat.txt
[root@milo enable]# rsync ./foo/* ./bar/
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:45 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:25 foo
./bar:
total 8
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4992604 -rw-rw-r-- 1 root root 8 Jun 11 15:45 testfoo
./foo:
total 4
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testfoo
An dieser Stelle wollen wir ein paar Dinge anmerken. Erstens, als wir rsync
erneut ausgeführt haben , es hat testfoo
erneut kopiert und aktualisierte atime
. Außerdem gibt es jedes Mal, wenn es eine Datei kopiert, der Datei einen neuen inode
Anzahl. Daher ist es, soweit es das Dateisystem betrifft, eine völlig andere Datei (denn es ist – es hat alle kopiert die Informationen jedes Mal). Beachten Sie schließlich, dass wenn wir rsync
die Datei, ändert sie den Besitz auf den Benutzer, der den Befehl ausgeführt hat (in diesem Fall root).
All dies ist wichtig, wenn wir Backups erstellen möchten. Dieses Verhalten ist dasselbe wie beim cp
Befehl. Wir können auch den cp
verwenden Befehl zum rekursiven Kopieren von Verzeichnissen sowie zum Beibehalten von Attributen und Eigentumsrechten. Der große Unterschied besteht darin, dass rsync
kann eine Prüfsumme der Datei erstellen und Quell- und Zieldatei vergleichen, wobei cp
schaut nur auf atime
Wert. Rsync
Die zusätzliche Funktionalität von ist nützlich, um die Integrität des Backups zu bewahren (wir werden uns später in dieser Serie mit der Integrität befassen).
Lassen Sie uns also nur eine dieser Dateien aktualisieren und sehen, was rsync
ist tut:
[root@milo enable]# echo 'this is new text'>>./foo/testfoo
[root@milo enable]# ls -al ./foo
-rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
[root@milo enable]# rsync -aruv ./foo/* ./bar/
sending incremental file list
testfoo
sent 194 bytes received 35 bytes 458.00 bytes/sec
total size is 25 speedup is 0.11
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 16:16 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:56 foo
./bar:
total 8
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4998080 -rw-r--r-- 1 root root 0 Jun 11 15:56 footoo.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4983541 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
./foo:
total 4
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 0 Jun 11 15:56 footoo.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Beachten Sie, dass wir dieses Mal einige Schalter verwendet haben:
-a
Archivmodus, bewahrtmtime
, Berechtigungen und Symlinks.-r
Rekursiver Modus, bohrt in beliebige Verzeichnisse und synchronisiert diese (sollte mit dem-a
redundant sein wechseln, aber ich gebe es trotzdem immer an).-u
Aktualisiert Dateien nur, wennmtime
auf der Quelle ist neuer.-v
Der Verbose-Modus sagt Ihnen, was es tut (es ist immer schön, überwachen zu können, was passiert. Ein weiterer nützlicher Trick besteht darin, diese Ausgabe in eine Datei zu leiten und sie später zu überprüfen).
Datei mit rsync wiederherstellen
Also lass uns so tun, als wäre es ein paar Wochen später. Der CFO ruft an und sagt, dass etwas nicht stimmt – in seinem /foo-Verzeichnis fehlen viele Dateien.
./foo:
total 8
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Wir werfen einen Blick auf die Backups und sehen die fehlenden Dateien:
./bar:
total 12
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4994298 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
4994359 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles1.txt
4994367 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles2.txt
4994374 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles3.txt
4994413 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles4.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4983541 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Ein schnelles rsync
wiederherstellen:
[root@milo enable]# rsync -aruv ./bar/* ./foo
sending incremental file list
bat.txt
laterfiles1.txt
laterfiles2.txt
laterfiles3.txt
laterfiles4.txt
testbar
Und:
./foo:
total 12
4994387 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
4994562 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles1.txt
4994564 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles2.txt
4994565 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles3.txt
4994567 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles4.txt
4994579 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Die fehlenden Dateien werden aus den neueren Sicherungen wiederhergestellt oder aktualisiert, aber die vorhandenen Dateien – die sich nicht geändert haben – bleiben unverändert. Beachten Sie auch, dass der Besitz von footoo.txt
wurde beibehalten.
Abschluss
Ich ermutige Sie, einen Blick (wie immer) auf die Manpage für rsync
zu werfen , und probieren Sie diesen nützlichen Befehl aus.
Hier sind ein paar weitere Schalter, die Sie berücksichtigen sollten:
-r
(rekursiv)-b
(Sicherung)-R
(relativ)-u
(Aktualisieren - nur geänderte Dateien kopieren)-P
(Fortschritt)-c
(komprimieren)-p
(Berechtigungen beibehalten)
Im nächsten Artikel dieser Serie gehen wir etwas weiter und sehen uns Remote-rsync
an und einige der anderen erweiterten Funktionen dieses Befehls.
[ Kostenloser Online-Kurs:Technischer Überblick zu Red Hat Enterprise Linux. ]