web-dev-qa-db-fra.com

rsync et liens symboliques

Je veux sauvegarder mon répertoire personnel sur un lecteur externe chaque nuit en utilisant un travail cron pour exécuter rsync. Je ne suis pas sûr du comportement exact des indicateurs de lien symbolique de rsync.

  1. L'indicateur -a de rsync inclut l'indicateur -l (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 souhaite éviter cela car j'ai des liens vers des répertoires contenant des 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) que rsync -a puisse copier tous ces fichiers multimédias, j'ai plutôt ajouté le drapeau --no-links. Cela ne semble pas être un comportement que je veux. Elle 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 l'indicateur --no-links) soit ce que je veux vraiment, il ne fait que copier le lien sans copier les fichiers liés. Les liens seront-ils rompus lorsqu'ils seront sauvegardés? Par exemple, je peux rsync répertoire source /home/me/projects/misc à /media/extdrive/backup/home/me/projects/misc. Dans ce cas, je suppose que rsync n'est pas assez intelligent ni ne tente 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.
60
sean
  1. "Copier les liens symboliques en tant que 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, un différent option, --copy-links décrit le comportement opposé (toujours en copiant les données), ce que vous avez décrit comme indésirable.)

    Voir aussi la section "Liens symboliques":

    Si --links est 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 que --links fait et vous demandez donc le mauvais comportement (voir la réponse n ° 1).

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

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

    Pendant ce temps, si le lien pointait vers un chemin relatif (par exemple ../../projects), il aussi continuera de pointer vers le même chemin, mais puisqu'il est relatif à l'emplacement du lien symbolique, le lien symbolique dans votre sauvegarde pointera également dans 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).

80
grawity

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

 enter image description here

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

3
Gabriel Staples

Il y a plusieurs très bonnes pages qui décrivent rsync en détail.

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

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

Je recommanderais également des utilitaires tels que backintime ou rsnapshot.

2
David Paige