rsync et liens symboliques

69

Je veux sauvegarder mon répertoire personnel sur un lecteur externe tous les soirs en utilisant un crontravail à exécuter rsync. Je ne suis pas sûr du comportement exact des rsyncindicateurs de lien symbolique de.

  1. rsyncLe -adrapeau de 's inclut le -ldrapeau (c'est-à-dire "copier les liens symboliques en tant que liens symboliques"). Cela signifie-t-il simplement qu'il va copier le lien ou qu'il va suivre le lien et tout copier dans le répertoire des liens? Je veux éviter cela car j'ai des liens vers des répertoires pleins de fichiers multimédias qui impliqueraient la copie de centaines de giga-octets que je n'ai pas besoin de sauvegarder.
  2. Craignant (mais pas certain) de rsync -acopier tous ces fichiers multimédias, j'ai plutôt ajouté le --no-linksdrapeau. Cela ne semble pas être un comportement que je veux. Cela ignore simplement la copie des liens posant problème, car j'ai des liens à copier (par exemple, des liens vers des fichiers d'en-tête communs à partir de différents répertoires de projet).
  3. En supposant que le numéro 1 ci-dessus (sans le --no-linksdrapeau) soit ce que je veux vraiment, il copie simplement le lien sans copier les fichiers liés. Les liens seront-ils rompus lorsqu'ils seront sauvegardés? Par exemple, je peux rsyncsource répertoire /home/me/projects/miscà /media/extdrive/backup/home/me/projects/misc. Dans ce cas, je suppose que ce rsyncn’est pas assez intelligent ni qu’il essaie de corriger le contenu des liens symboliques pour les modifications relatives au répertoire. Est-ce correct? Ce n'est pas grave, peu importe si les liens sont rompus dans les répertoires de sauvegarde, dans la mesure où ils seront réparés et fonctionneront si le moment vient où ils doivent être restaurés.
Sean
la source
3
Le drapeau -L est probablement ce que vous voulez. Dans la page de manuel rsync sur Centos Linux: "-L, --copy-links transforme le lien symbolique en fichier / répertoire de référence." Je vous recommande de tester cela avec des exemples de répertoires et de liens pour vous assurer de ne pas écraser les données que vous ne souhaitez pas. Édité pour inclure un avertissement sur une possible perte de données. ;)
Mick T

Réponses:

90
  1. "Copier les liens symboliques sous forme de liens symboliques" signifie exactement ce qu'il dit: si rsync voit un lien symbolique dans le répertoire source, il créera un lien symbolique identique dans la destination. Rien de plus.

    (Quelques lignes plus bas dans la page de manuel, une option différente--copy-links , décrivent le comportement opposé (toujours en copiant les données) que vous avez décrit comme indésirable.)

    Voir aussi la section "Liens symboliques":

    Si --linksest spécifié, les liens symboliques sont recréés avec la même cible sur la destination.

  2. Ce n'est pas le comportement que vous voulez parce que vous interprétez mal ce qui se --linkspasse et par conséquent vous demandez le mauvais comportement (voir la réponse n ° 1).

  3. Par défaut, il copie exactement la destination .

    Autrement dit, si le lien pointait vers un chemin absolu (par exemple /home/me/projects), il continuerait de pointer vers le même chemin. cela ne cassera pas , cela continuera simplement de pointer vers un fichier de votre répertoire personnel plutôt que vers celui de votre sauvegarde.

    En attendant, si le lien pointe vers un chemin relatif (par exemple ../../projects), il continuera également de pointer vers le même chemin, mais comme il est relatif à l'emplacement du lien symbolique, le lien symbolique dans votre sauvegarde pointera également vers un fichier de votre sauvegarde.

    Malheureusement, il ne semble pas y avoir d’option permettant de traduire les liens symboliques absolus pour leur nouvelle base (seule une option permettant de les casser complètement). Pour éviter les problèmes, vous devez remplacer les liens symboliques existants par des liens relatifs (ce qui est une bonne idée en général pour les liens contenus dans $ HOME).

Grawity
la source
2
euh alors quelle est la différence entre --copy-linkset --links?
Alexander Mills
--copy-links= -L, et --links= -l. Voir la description de la documentation dans ma réponse ici: superuser.com/a/1388910/425838
Gabriel Staples
12

@grawity a une excellente réponse, mais voici une capture d'écran d'informations pertinentes de la documentation. Voici le libellé exact des options -let -L, par exemple, qui semblent être les plus pertinentes:

entrez la description de l'image ici

Source: https://linux.die.net/man/1/rsync , ou man rsyncpages de manuel sous Linux.

Notez également que l' option -a( --archive) inclut également l' -loption qu'il contient , ce qui est génial, car j'aime beaucoup utiliser l' -loption pour conserver mes liens symboliques de la source en tant que liens symboliques sur la destination. À partir des pages de manuel:

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

Remarque, pour mes rsynccommandes et instructions préférées , y compris la copie, la mise en miroir, la progression totale ...

... faire des courses à sec, l' exploitation forestière stderr et stdout aux fichiers (séparés), montrant les statistiques, en utilisant un fichier include de chemin et un ne comprennent pas le fichier , etc, voir ma réponse complète ici sous la 2ème section, intitulée « 2. rsync en ligne de commande outil (Linux, Windows avec Cygwin) ": https://superuser.com/a/1464264/425838

Gabriel Staples
la source