rsync und symbolische Links

rsync und symbolische Links

Ich möchte mein Home-Verzeichnis jede Nacht mithilfe eines cronauszuführenden Jobs auf einem externen Laufwerk sichern rsync. Ich bin mir über das genaue Verhalten der rsyncsymbolischen Link-Flags nicht sicher.

  1. rsyncDas -aFlag von enthält das -lFlag (also "Symlinks als Symlinks kopieren"). Bedeutet das nur, dass esKopiere den Linkoder dass es dem Link folgt und alles im Linkverzeichnis kopiert? Das möchte ich vermeiden, weil ich Links zu Verzeichnissen voller Mediendateien habe, was das Kopieren von Hunderten Gigabyte bedeuten würde, die ich nicht sichern muss.
  2. Aus Angst (aber nicht sicher), dass rsync -aalle diese Mediendateien kopiert würden, habe ich stattdessen das --no-linksFlag hinzugefügt. Dies scheint nicht das gewünschte Verhalten zu sein. Es ignoriert einfach das Kopieren aller Links, was problematisch ist, da ich Links habe, die ich kopieren möchte (z. B. Links zu gemeinsamen Header-Dateien aus verschiedenen Projektverzeichnissen).
  3. Angenommen, Nr. 1 oben (ohne das --no-linksFlag) ist das, was ich wirklich will, und es kopiert nur den Link, ohne die verknüpften Dateien zu kopieren. Werden die Links dann beim Sichern unterbrochen? Ich kann beispielsweise rsyncdas Quellverzeichnis /home/me/projects/miscauf ändern /media/extdrive/backup/home/me/projects/misc. In diesem Fall gehe ich davon aus, rsyncdass es nicht intelligent genug ist und auch nicht versucht, den Inhalt der symbolischen Links für die relativen Verzeichnisänderungen zu korrigieren. Ist das richtig? Das ist in Ordnung, es spielt keine Rolle, ob die Links in den Sicherungsverzeichnissen unterbrochen sind, solange sie repariert werden und funktionieren, wenn der Zeitpunkt kommt, an dem sie wiederhergestellt werden müssen.

Antwort1

  1. „Symlinks als Symlinks kopieren“ bedeutet genau das, was der Name sagt: Wenn rsync einen Symlink im Quellverzeichnis sieht, wird ein identischer Symlink im Ziel erstellt.Nichts mehr.

    (Ein paar Zeilen weiter unten in der Manualpage wird einandersOption, --copy-links, beschreibt das entgegengesetzte Verhalten (immer das Kopieren der Daten), das Sie als unerwünscht beschrieben haben.)

    Siehe auch Abschnitt „Symbolische Links“:

    Wenn --linksangegeben ist, werden symbolische Links mit demselben Ziel am Ziel neu erstellt.

  2. Dies ist nicht das gewünschte Verhalten, da Sie das --linksgewünschte Verhalten falsch interpretieren und daher das falsche Verhalten fordern (siehe Antwort Nr. 1).

  3. Standardmäßig kopiert es das Zielgenau.

    Das heißt, wenn der Link auf einen absoluten Pfad (z. B. /home/me/projects) zeigte, wird er weiterhin auf denselben Pfad zeigen; er wird nichtbrechen, wird weiterhin auf eine Datei in Ihrem Home-Verzeichnis und nicht auf die in Ihrem Backup verwiesen.

    Wenn der Link jedoch auf einen relativen Pfad (z. B. ../../projects) zeigt, wird erAuchZeigen Sie weiterhin auf denselben Pfad, aber da dieser relativ zum Speicherort des symbolischen Links ist, zeigt der symbolische Link 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, sie vollständig zu unterbrechen). Um Probleme zu vermeiden, sollten Sie vorhandene Symlinks in relative ändern (was generell eine gute Idee ist, für Links innerhalb von $HOME).

Antwort2

@grawity hat eine tolle Antwort, aber hier ist ein Screenshot mit einigen relevanten Informationen vondie Dokumentation. Hier ist beispielsweise der genaue Wortlaut des -l(Kleinbuchstabe L, keine Eins) und -Lder Optionen, die in diesem Fall am relevantesten zu sein scheinen:

Bildbeschreibung hier eingeben

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

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

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

Und hier sind die Bedeutungen von -rlptgoD, ebenfalls von man rsync:

   --recursive, -r          recurse into directories
   --links, -l              copy symlinks as symlinks
   --perms, -p              preserve permissions
   --times, -t              preserve modification times
   --group, -g              preserve group
   --owner, -o              preserve owner (super-user only)
   -D                       same as --devices --specials
   --devices                preserve device files (super-user only)
   --specials               preserve special files ["such as named sockets and fifos"]

Wichtig!:

Bei Verwendung rsyncaufexFAToderFETTDateisysteme, sienichtunterstützen weder Symlinks noch POSIX-Besitzer, -Gruppen und -Berechtigungen,Entfernen Sie -lpgound verwenden Sie -rtDanstelle von -a!Sie können -vbei Bedarf auch "verbose" hinzufügen und verwenden-vrtD.

Mehr dazu hier:

  1. [meine Antwort]Beste Einstellungen für die Verwendung von rsync mit FAT- und exFAT-Dateisystemen
  2. rsync scheint bereits vorhandene Dateien auf ExFat zu überschreiben
  3. https://superuser.com/a/384849/425838
  4. https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-functionality-comparison

Hinweis zu meinen bevorzugten rsyncBefehlen und Anweisungen, einschließlich Kopieren, Spiegeln, Anzeigen des Gesamtfortschritts …

...Trockenläufe durchführen, stderr und stdout in (separate) Dateien protokollieren, Statistiken anzeigen, einInclude-Pfaddateiund einDatei ausschließen, usw., siehe meine vollständige Antwort hier im 2. Abschnitt mit dem Titel "2. rsync-Befehlszeilentool (Linux, Windows mit Cygwin)":https://superuser.com/a/1464264/425838

verwandte Informationen