2014-08-18 04:35:50 +0000 2014-08-18 04:35:50 +0000
77
77

rsync und symbolische Links

Ich möchte mein Home-Verzeichnis nachts auf ein externes Laufwerk sichern und dazu einen cron-Job ausführen. Ich bin mir über das genaue Verhalten der symbolischen Link-Flags von rsync nicht sicher.

  1. Das rsync-Flag von rsync beinhaltet das -a-Flag (d.h. “Symlinks als Symlinks kopieren”). Bedeutet das nur, dass es den Link kopiert oder dass es dem Link folgt und alles im Link-to-Verzeichnis kopiert? Ich möchte das vermeiden, weil ich Links zu Verzeichnissen voller Mediendateien habe, was das Kopieren von Hunderten von Gigabytes bedeuten würde, die ich nicht sichern muss.
  2. Aus Angst (aber nicht sicher), dass -l all diese Mediendateien kopieren würde, habe ich stattdessen das Flag rsync -a hinzugefügt. Dies scheint nicht das Verhalten zu sein, das ich möchte. Es ignoriert einfach das Kopieren aller Links, was problematisch ist, weil ich Links habe, die ich kopiert haben möchte (z. B. Links zu gemeinsamen Header-Dateien aus verschiedenen Projektverzeichnissen).
  3. Angenommen, die obige Nummer 1 (ohne das Flag --no-links) ist das, was ich wirklich will, und es kopiert nur den Link, ohne die verknüpften Dateien zu kopieren, werden die Links dann kaputt gehen, wenn sie gesichert werden? Zum Beispiel kann ich --no-links Quellverzeichnis rsync zu /home/me/projects/misc. In diesem Fall nehme ich an, dass /media/extdrive/backup/home/me/projects/misc nicht intelligent genug ist und auch nicht versucht, den Inhalt von Symlinks für die relativen Verzeichniswechsel zu korrigieren. Ist dies korrekt? Das ist in Ordnung, es macht nichts, wenn die Links in den Backup-Verzeichnissen kaputt sind, solange sie repariert wären und funktionieren würden, wenn die Zeit kommt, in der sie wiederhergestellt werden müssen.

Antworten (2)

98
98
98
2014-08-18 05:26:17 +0000
  1. “Symlinks als Symlinks kopieren” bedeutet genau das, was es sagt: Wenn rsync einen Symlink im Quellverzeichnis sieht, wird es einen identischen Symlink im Zielverzeichnis erstellen. Nichts weiter.

  2. Das ist nicht das Verhalten, das Sie wollen, weil Sie fehlinterpretieren, was --links tut und deshalb nach dem falschen Verhalten fragen (siehe Antwort #1).

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

19
19
19
2018-12-30 07:47:50 +0000

@grawity hat eine tolle Antwort, aber hier ist ein Screenshot einiger relevanter Informationen aus der Dokumentation. Hier ist z. B. der genaue Wortlaut der Optionen -l und -L, die die relevantesten in Frage zu sein scheinen:

Quelle: https://linux.die.net/man/1/rsync , bzw. man rsync Handbuchseiten unter Linux.

Beachten Sie auch, dass die Option -a (--archive) auch die Option -l in sich trägt, was großartig ist, da ich die Option -l sehr gerne benutze, um meine Symlinks aus der Quelle als Symlinks auf dem Ziel zu erhalten. Aus den Man Pages:

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

Hinweis, für meine bevorzugten rsync-Befehle und Anweisungen, einschließlich Kopieren, Spiegeln, Anzeige des Gesamtfortschritts …

…Trockenläufe durchführen, stderr und stdout in (getrennten) Dateien protokollieren, Statistiken anzeigen, eine include path file und eine exclude file verwenden, usw., finden Sie meine vollständige Antwort hier im zweiten Abschnitt mit dem Titel “2. rsync Command-line tool (Linux, Windows mit Cygwin)”: https://superuser.com/a/1464264/425838