Isso está relacionado a esta pergunta , mas não creio que a resposta se aplique exatamente aqui.
Eu tenho dois servidores que sincronizam diretórios entre si. Esses diretórios contêm arquivos e links simbólicos. No servidor B , eu sincronizo do servidor A com este comando: rsync -auv A:dir/ dir/
O que eu quero : Qualquer arquivo ou link simbólico em A que seja diferente e mais novo que o arquivo correspondente ou link simbólico em B é sincronizado.
O que realmente acontece : Qualquer arquivo em A diferente e mais recente que o arquivo correspondente em B é sincronizado. Qualquer link simbólico em A que é diferente do link simbólico correspondente em B é sincronizado, independentemente do timestamp .
A página man para rsync
tem isso (ênfase minha):
-u, --update
This forces rsync to skip any files which exist on the destination and have a modified time that is newer than the source file. (If an existing destination file has a modification time equal to the source file's, it will be updated if the sizes are different.) Note that this does not affect the copying of symlinks or other special files.
Então esse é o comportamento esperado. Por que é isso? Existe uma maneira de contornar isso? Ou existe uma solução alternativa para o objetivo geral, que é obter esses diretórios em sincronia depois que um servidor ficar off-line por algum tempo e perder dados?
Minha versão do rsync é 3.0.9
.
Exemplo : eu configurei 2 diretórios, Adir
e Bdir
, cada um contendo um arquivo e um link simbólico com diferentes conteúdos:
$ ls -l Adir/ Bdir/
Adir/:
total 0
-rw-r--r-- 1 kevin kevin 5 May 27 18:00 file
lrwxrwxrwx 1 kevin kevin 10 May 27 18:00 symlink -> /some/file
Bdir/:
total 0
-rw-r--r-- 1 kevin kevin 6 May 27 17:00 file
lrwxrwxrwx 1 kevin kevin 16 May 27 17:00 symlink -> /some/other/file
A execução de rsync --dry-run -auv Adir/ Bdir/
gera isso:
sending incremental file list
./
file
symlink -> /some/file
sent 101 bytes received 21 bytes 244.00 bytes/sec
total size is 15 speedup is 0.12 (DRY RUN)
Qual é o que eu espero. Ele copia (ou não estaria em execução a seco) tanto o arquivo quanto o link simbólico porque são mais novos. No entanto, executar rsync --dry-run -auv Bdir/ Adir/
gera isso:
sending incremental file list
./
symlink -> /some/other/file
sent 104 bytes received 18 bytes 244.00 bytes/sec
total size is 22 speedup is 0.18 (DRY RUN)
Mesmo que Bdir/symlink
seja mais antigo que Adir/symlink
, ele ainda é sincronizado.