
Ich möchte mein Home-Verzeichnis jede Nacht mithilfe eines cron
auszuführenden Jobs auf einem externen Laufwerk sichern rsync
. Ich bin mir über das genaue Verhalten der rsync
symbolischen Link-Flags nicht sicher.
rsync
Das-a
Flag von enthält das-l
Flag (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.- Aus Angst (aber nicht sicher), dass
rsync -a
alle diese Mediendateien kopiert würden, habe ich stattdessen das--no-links
Flag 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). - Angenommen, Nr. 1 oben (ohne das
--no-links
Flag) 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 beispielsweisersync
das Quellverzeichnis/home/me/projects/misc
auf ändern/media/extdrive/backup/home/me/projects/misc
. In diesem Fall gehe ich davon aus,rsync
dass 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
„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
--links
angegeben ist, werden symbolische Links mit demselben Ziel am Ziel neu erstellt.Dies ist nicht das gewünschte Verhalten, da Sie das
--links
gewünschte Verhalten falsch interpretieren und daher das falsche Verhalten fordern (siehe Antwort Nr. 1).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 -L
der Optionen, die in diesem Fall am relevantesten zu sein scheinen:
Quelle:https://linux.die.net/man/1/rsync, oder man rsync
Manualpages 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
-l
man 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 rsync
aufexFAToderFETTDateisysteme, sienichtunterstützen weder Symlinks noch POSIX-Besitzer, -Gruppen und -Berechtigungen,Entfernen Sie -lpgo
und verwenden Sie -rtD
anstelle von -a
!Sie können -v
bei Bedarf auch "verbose" hinzufügen und verwenden-vrtD
.
Mehr dazu hier:
- [meine Antwort]Beste Einstellungen für die Verwendung von rsync mit FAT- und exFAT-Dateisystemen
- rsync scheint bereits vorhandene Dateien auf ExFat zu überschreiben
- https://superuser.com/a/384849/425838
- https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-functionality-comparison
Hinweis zu meinen bevorzugten rsync
Befehlen 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