118 votes

rsync et les liens symboliques

Je veux sauvegarder mon répertoire personnel sur un disque externe tous les soirs en utilisant un fichier de sauvegarde. cron travail à exécuter rsync . Je ne suis pas sûr du comportement exact de rsync Les drapeaux de liens symboliques.

  1. rsync 's -a comprend l'option -l (c'est-à-dire "copier les liens symboliques en tant que liens symboliques"). Est-ce que cela signifie simplement qu'il copier le lien ou qu'il suivra le lien et copiera tout ce qui se trouve dans le répertoire du lien ? Je veux éviter cela car j'ai des liens vers des répertoires remplis de fichiers multimédias, ce qui impliquerait de copier des centaines de gigaoctets que je n'ai pas besoin de sauvegarder.
  2. Craignant (mais pas certain) que rsync -a copierait tous ces fichiers multimédias, j'ai plutôt ajouté l'option --no-links drapeau. Cela ne semble pas être le comportement que je souhaite. Il ignore simplement la copie de tout lien, ce qui est problématique car j'ai des liens que je veux copier (par exemple, des liens vers des fichiers d'en-tête communs à partir de différents répertoires de projets).
  3. En supposant que le point 1 ci-dessus (sans le --no-links flag) est ce que je veux vraiment et qu'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 a /media/extdrive/backup/home/me/projects/misc . Dans ce cas, je suppose rsync n'est pas assez intelligent et n'essaie pas de corriger le contenu des liens symboliques pour les changements de répertoire relatifs. Est-ce correct ? Ce n'est pas grave, cela n'a pas d'importance si les liens sont rompus dans les répertoires de sauvegarde, du moment qu'ils sont réparés et fonctionnent si le moment est venu de les restaurer.

8 votes

Le drapeau -L est probablement ce que vous voulez. Extrait de la page de manuel rsync sur Centos Linux : "-L, --copy-links transforme le lien symbolique en fichier/répertoire référent." Je recommande de tester ceci avec quelques exemples de répertoires et de liens pour vous assurer que vous n'écrasez pas de données que vous n'avez pas l'intention d'écraser. Modifié pour inclure un avertissement sur la perte possible de données ;)

3 votes

Pour plus de clarté et d'exhaustivité : Le site -L ou --copy-links transformera le lien symbolique en fichier/répertoire référent. Exactement ce que craint le PO, c'est à dire copier les répertoires médias de 100 Go vers lesquels pointent les liens, au lieu de simplement ajouter le lien textuellement dans le nouvel emplacement (pour cela utiliser -l ou --links ).

141voto

James Mertz Points 390
  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 le répertoire de destination. Rien de plus.

    (Quelques lignes plus bas dans la page du manuel, un bouton différents option, --copy-links décrit le comportement opposé (toujours copier les données) que vous avez décrit comme indésirable).

    Voir aussi la section "Liens symboliques" :

    Si --links est spécifié, alors 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 demande donc le mauvais comportement (voir réponse #1).

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

    En d'autres termes, si le lien pointe vers un chemin absolu (par ex. /home/me/projects ), il continuera à pointer vers le même chemin ; il ne sera pas rupture il continuera simplement à pointer vers un fichier dans votre répertoire personnel plutôt que vers celui de votre sauvegarde.

    En revanche, si le lien pointait vers un chemin relatif (par exemple ../../projects ), il también continuent 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 dans votre sauvegarde.

    Malheureusement, il ne semble pas y avoir d'option pour traduire les liens symboliques absolus pour leur nouvelle base (seulement une option pour les casser entièrement). Pour éviter les problèmes, vous devriez changer les liens symboliques existants en liens relatifs (ce qui est une bonne idée en général, pour les liens à l'intérieur de $HOME).

4 votes

Ummm alors quelle est la différence entre --copy-links y --links ?

2 votes

--copy-links = -L y --links = -l . Voir la description de la documentation dans ma réponse ici : superuser.com/a/1388910/425838

3 votes

Pour que cela fasse gagner du temps à tout le monde, pas seulement à moi.

32voto

Diejmon Points 111

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

enter image description here

Source : https://linux.die.net/man/1/rsync o man rsync pages de manuel sur Linux.

Notez également que le -a ( --archive ) comprend également l'option -l ce qui est génial, puisque j'aime vraiment utiliser l'option -l pour conserver mes liens symboliques de la source comme liens symboliques sur la destination. Dans les pages du manuel :

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

Note, pour mon préféré rsync des commandes et des instructions, y compris la copie, la mise en miroir, l'affichage de la progression totale...

... faire des essais, enregistrer stderr et stdout dans des fichiers (séparés), afficher les statistiques, utiliser un système de gestion des données. inclure le chemin du fichier et un exclure le fichier etc., voir ma réponse complète ici sous la 2ème section, intitulée " 2. rsync Outil en ligne de commande (Linux, Windows avec Cygwin) " : https://superuser.com/a/1464264/425838

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X