rsync - atualiza com links simbólicos

1

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.

    
por Kevin 28.05.2018 / 01:00

1 resposta

1

Uma saída pode ser ignorar links simbólicos no rsync e fazê-los separadamente com, por exemplo, tar , que pode ser solicitado a não sobrescrever novos destinos. Por exemplo

( cd Adir; find . -type l |
  tar cf - -T- 
) |
tar xvvf - --keep-newer-files -C Bdir
    
por 28.05.2018 / 16:15

Tags