Ich möchte mein Ausgangsverzeichnis jede Nacht mit einem cron
auszuführenden Auftrag auf einem externen Laufwerk sichern rsync
. Ich bin mir nicht sicher, wie sich die rsync
symbolischen Linkflags genau verhalten .
rsync
Das-a
Flag von enthält das-l
Flag (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.- Aus Angst (aber nicht sicher), dass
rsync -a
all diese Mediendateien kopiert würden, fügte ich stattdessen die--no-links
Flagge 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). - Angenommen, Nummer 1 oben (ohne
--no-links
Flag) 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 dasrsync
Quellverzeichnis/home/me/projects/misc
nach/media/extdrive/backup/home/me/projects/misc
. In diesem Fall gehe ich davon aus, dassrsync
es 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.
linux
rsync
symbolic-link
Sean
quelle
quelle
Antworten:
"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-links
beschreibt das gegenteilige Verhalten (immer die Daten kopieren), das Sie als unerwünscht beschrieben haben.)Siehe auch den Abschnitt "Symbolische Links":
Es ist nicht das Verhalten, das Sie wollen, weil Sie die Aufgaben falsch interpretieren
--links
und deshalb nach dem falschen Verhalten fragen (siehe Antwort 1).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).
quelle
--copy-links
und--links
?--copy-links
=-L
, und--links
=-l
. Siehe Beschreibung aus der Dokumentation in meiner Antwort hier: superuser.com/a/1388910/425838@grawity hat eine großartige Antwort, aber hier ist ein Screenshot einiger relevanter Informationen aus der Dokumentation. Hier ist der genaue Wortlaut der
-l
und-L
-Optionen, die als die relevantesten in Frage kommen:Quelle: https://linux.die.net/man/1/rsync oder
man rsync
Handbuchseiten unter Linux.Beachten Sie auch, dass die Option
-a
(--archive
) auch die darin enthaltene-l
Option enthält , was großartig ist, da ich die-l
Option sehr gerne verwende , um meine Symlinks von der Quelle als Symlinks auf dem Ziel zu erhalten. Aus den Manpages:Beachten Sie, dass für meine bevorzugten
rsync
Befehle 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
quelle