it-swarm.com.de

rsync und symbolische links

Ich möchte mein Ausgangsverzeichnis jede Nacht mit einem cron-Job auf einem externen Laufwerk sichern, um rsync auszuführen. Ich bin mir nicht sicher, wie sich die symbolischen Link-Flags von rsync genau verhalten.

  1. Das -a-Flag von rsync enthält das -l-Flag (d. h. "Symlinks als Symlinks kopieren"). Bedeutet dies nur, dass es den Link kopiert oder dass es dem Link folgt und alles in das Link-zu-Verzeichnis kopiert? Ich möchte das vermeiden, da ich Links zu Verzeichnissen voller Mediendateien habe, bei denen Hunderte von Gigabyte kopiert werden müssen, die ich nicht sichern muss.
  2. Aus Angst (aber nicht sicher), dass rsync -a all diese Mediendateien kopieren würde, fügte ich stattdessen das --no-links-Flag 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 das --no-links-Flag) ist das, was ich wirklich will, und kopiert nur den Link, ohne die verknüpften Dateien zu kopieren. Brechen die Links, wenn sie gesichert werden? Zum Beispiel kann ich rsync Quellverzeichnis /home/me/projects/misc zu /media/extdrive/backup/home/me/projects/misc. In diesem Fall gehe ich davon aus, dass rsync nicht intelligent 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.
60
sean
  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 Handbuchseite beschreibt die Option different , --copy-links, das entgegengesetzte Verhalten (immer die Daten kopieren), das Sie als unerwünscht bezeichnet haben.)

    Siehe auch den Abschnitt "Symbolische Links":

    Wenn --links angegeben ist, werden Symlinks mit demselben Ziel auf dem Ziel erneut erstellt.

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

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

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

    Wenn der Link auf einen relativen Pfad (z. B. ../../projects) zeigt, zeigt er also weiterhin auf denselben Pfad, aber da er relativ zum Speicherort des Symlinks ist, zeigt der Symlink in Ihrer Sicherung ebenfalls auf diesen Pfad in 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).

80
grawity

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

 enter image description here

Quelle: https://linux.die.net/man/1/rsync

3
Gabriel Staples

Es gibt mehrere sehr gute Seiten, die rsync sehr detailliert beschreiben.

http://www.jveweb.net/de/archives/2010/11/synchronizing-folders-with-rsync.html

http://www.mikerubel.org/computers/rsync_snapshots/index.html

Ich würde auch Dienstprogramme wie backintime oder rsnapshot empfehlen.

2
David Paige