Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2015, à 19:35

azen0r

Rsync : comportement surprenant avec les liens symboliques

Bonjour,
J'ai récemment potassé l'utilisation de rsync, et j'ai trouvé un comportement bien surprenant sur la gestion des liens symboliques.
J'utilise la version 3.0.9 (la dernière est 3.1.1 mais je n'ai pas vraiment l'intention de changer ma version système)
Dans le man, on lit que

--links --copy-unsafe-links
              Turn all unsafe symlinks into files and duplicate all safe symlinks.

J'ai vu aussi qu'il y a une différence de traitement de la source selon que le chemin se termine ou non par un slash :

A trailing slash on the source changes this behavior to avoid creating an additional directory level at the  destination. 
  You  can think of a trailing / on a source as meaning "copy the contents of this directory" as opposed to "copy the directory 
by name", but in both cases the attributes of the containing directory are transferred  to  the containing  directory  on  the 
destination.  In other words, each of the following commands copies the files in the same way, including their setting of the 
attributes of /dest/foo:
              rsync -av /src/foo /dest
              rsync -av /src/foo/ /dest/foo

Mais j'ai constaté qu'un lien qui pointe à l'extérieur du répertoire source peut être considéré comme sûr :

$ tree
.
├── faraway
│   └── farawayFile
└── sandbox
    ├── dest
    ├── extern
    │   └── outsideFile
    └── src
        ├── insideFile
        ├── linkedFile1 -> ../../faraway/farawayFile
        └── linkedFile2 -> ../extern/outsideFile

5 directories, 5 files

sandbox$ rsync -iia -n --links --copy-unsafe-links src/ dest/
.d..t...... ./
>f+++++++++ insideFile
>f+++++++++ linkedFile1
>f+++++++++ linkedFile2

sandbox$ rsync -iia -n --links --copy-unsafe-links src dest/
cd+++++++++ src/
>f+++++++++ src/insideFile
>f+++++++++ src/linkedFile1
cL+++++++++ src/linkedFile2 -> ../extern/outsideFile

Après exécution, je me retrouve avec un lien cassé dans le répertoire dest :

$ tree
.
├── faraway
│   └── farawayFile
└── sandbox
    ├── dest
    │   └── src
    │       ├── insideFile
    │       ├── linkedFile1
    │       └── linkedFile2 -> ../extern/outsideFile
    ├── extern
    │   └── outsideFile
    └── src
        ├── insideFile
        ├── linkedFile1 -> ../../faraway/farawayFile
        └── linkedFile2 -> ../extern/outsideFile

Est-ce bien un bug de rsync ?

Dernière modification par azen0r (Le 15/03/2015, à 19:36)

Hors ligne

#2 Le 15/03/2015, à 21:31

JoelS

Re : Rsync : comportement surprenant avec les liens symboliques

Pour moi, un lien symbolique unsafe est un lien qui pointe sur un composant via un chemin qui démarre de la racine /, soit directement soit indirectement. C'est a dire que si ton lien est /etc/passwd ou bien (exemple depuis /tmp) est ../etc/passwd, ce lien est unsafe. Ce n'est pas ton cas.

Hors ligne

#3 Le 15/03/2015, à 22:29

azen0r

Re : Rsync : comportement surprenant avec les liens symboliques

Bonjour,
Le man ne mentionne pas la racine comme critère de safe/unsafe. D'après ce qui est écrit (et ce que je trouve logique), un lien est "safe" si ce qu'il pointe est inclus dans l'arborescence copiée et donc --copy-unsafe-links devrait garantir que tous les liens copiés en tant que lien seront valides, et sinon copier le fichier cible au lieu du lien.

--copy-unsafe-links
    This tells rsync to copy the referent of symbolic links that point outside the copied tree. Absolute symlinks are also treated like ordinary files

Hors ligne