#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