rsync und symbolische links

69

Ich möchte mein Ausgangsverzeichnis jede Nacht mit einem cronauszuführenden Auftrag auf einem externen Laufwerk sichern rsync. Ich bin mir nicht sicher, wie sich die rsyncsymbolischen Linkflags genau verhalten .

  1. rsyncDas -aFlag von enthält das -lFlag (dh "Symlinks als Symlinks kopieren"). Bedeutet dies , nur wird es den Link kopieren oder dass sie den Link und kopieren alles in der Link-Verzeichnis folgen? Ich möchte das vermeiden, da ich Links zu Verzeichnissen voller Mediendateien habe, die das Kopieren von Hunderten von Gigabyte erfordern, die ich nicht sichern muss.
  2. Aus Angst (aber nicht sicher), dass rsync -aall diese Mediendateien kopiert würden, fügte ich stattdessen die --no-linksFlagge hinzu . Dies scheint kein von mir gewünschtes Verhalten zu sein. Das Kopieren von Links, die problematisch sind, wird einfach ignoriert, da ich Links habe, die ich kopieren möchte (z. B. Links zu allgemeinen Header-Dateien aus verschiedenen Projektverzeichnissen).
  3. Angenommen, Nummer 1 oben (ohne --no-linksFlag) ist das, was ich wirklich möchte, und kopiert nur den Link, ohne die verknüpften Dateien zu kopieren. Werden die Links bei der Sicherung beschädigt? Zum Beispiel kann ich das rsyncQuellverzeichnis /home/me/projects/miscnach /media/extdrive/backup/home/me/projects/misc. In diesem Fall gehe ich davon aus, dass rsynces nicht schlau genug ist und auch nicht versucht, den Inhalt von Symlinks für die relativen Verzeichnisänderungen zu korrigieren. Ist das richtig? Dies ist in Ordnung, es spielt keine Rolle, ob die Links in den Sicherungsverzeichnissen beschädigt sind, solange sie repariert werden und funktionieren, wenn sie zu einem bestimmten Zeitpunkt wiederhergestellt werden müssen.
Sean
quelle
3
Das -L-Flag ist wahrscheinlich das, was Sie wollen. Auf der rsync-Manpage unter Centos Linux: "-L, --copy-links transformieren symlink in referent file / dir." Ich empfehle, dies mit einigen Beispielverzeichnissen und -links zu testen, um sicherzustellen, dass Sie keine Daten überschreiben, die Sie nicht beabsichtigen. Bearbeitet, um eine Warnung über möglichen Datenverlust einzuschließen. ;)
Mick T

Antworten:

90
  1. "Symlinks als Symlinks kopieren" bedeutet genau das, was es sagt: Wenn rsync einen Symlink im Quellverzeichnis sieht, wird ein identischer Symlink im Ziel erstellt. Nichts mehr.

    (Ein paar Zeilen weiter unten in der Manpage, eine andere Option, --copy-linksbeschreibt das gegenteilige Verhalten (immer die Daten kopieren), das Sie als unerwünscht beschrieben haben.)

    Siehe auch den Abschnitt "Symbolische Links":

    Wenn --linksangegeben, werden Symlinks mit demselben Ziel auf dem Ziel erneut erstellt.

  2. Es ist nicht das Verhalten, das Sie wollen, weil Sie die Aufgaben falsch interpretieren --linksund deshalb nach dem falschen Verhalten fragen (siehe Antwort 1).

  3. Standardmäßig wird das Ziel exakt kopiert .

    Das heißt, wenn der Link auf einen absoluten Pfad zeigt (z. B. /home/me/projects), zeigt er weiterhin auf denselben Pfad. Es wird nicht kaputt gehen , sondern nur weiter auf eine Datei in Ihrem Home-Verzeichnis und nicht auf die in Ihrem Backup.

    Wenn der Link auf einen relativen Pfad (z. B. ../../projects) verweist, verweist er weiterhin auf denselben Pfad. Da er sich jedoch auf den Speicherort des Symlinks bezieht, verweist der Symlink in Ihrem Backup auch auf eine Datei in Ihrem Backup.

    Leider scheint es keine Option zu geben, absolute Symlinks für ihre neue Basis zu übersetzen (nur eine Option, um sie vollständig zu brechen). Um Probleme zu vermeiden, sollten Sie vorhandene Symlinks in relative ändern (was im Allgemeinen für Links innerhalb von $ HOME eine gute Idee ist).

Grawity
quelle
2
ähm, was ist der Unterschied zwischen --copy-linksund --links?
Alexander Mills
--copy-links= -L, und --links= -l. Siehe Beschreibung aus der Dokumentation in meiner Antwort hier: superuser.com/a/1388910/425838
Gabriel Staples
12

@grawity hat eine großartige Antwort, aber hier ist ein Screenshot einiger relevanter Informationen aus der Dokumentation. Hier ist der genaue Wortlaut der -lund -L-Optionen, die als die relevantesten in Frage kommen:

Bildbeschreibung hier eingeben

Quelle: https://linux.die.net/man/1/rsync oder man rsyncHandbuchseiten unter Linux.

Beachten Sie auch, dass die Option -a( --archive) auch die darin enthaltene -lOption enthält , was großartig ist, da ich die -lOption sehr gerne verwende , um meine Symlinks von der Quelle als Symlinks auf dem Ziel zu erhalten. Aus den Manpages:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Beachten Sie, dass für meine bevorzugten rsyncBefehle und Anweisungen, einschließlich Kopieren, Spiegeln, der Gesamtfortschritt angezeigt wird ...

... Trockenläufe durchführen, stderr und stdout in (getrennten) Dateien protokollieren, Statistiken anzeigen, eine Include-Pfad-Datei und eine Exclude-Datei verwenden , usw., siehe meine vollständige Antwort hier im 2. Abschnitt mit dem Titel " 2. rsync Command-line Tool (Linux, Windows mit Cygwin) ": https://superuser.com/a/1464264/425838

Gabriel Staples
quelle