rsync reivindica arquivos diferentes, mas diff não?

3

Eu tenho um arquivo localmente e no servidor. Primeiro, tento executar rsync no modo "dry-run", para ver se existem algumas diferenças entre os arquivos:

$ rsync -aP --dry-run [email protected]:/home/dir .
[email protected]'s password: 
receiving incremental file list
dir/myfile.txt

Isso aparentemente significa que o arquivo dir/myfile.txt é diferente, pois seria atualizado. Então eu verifico os mesmos arquivos com um diff :

$ ssh [email protected] 'cat /home/dir/myfile.txt' | diff --report-identical-files - dir/myfile.txt
[email protected]'s password: 
Files - and dir/myfile.txt are identical

Então, os arquivos são idênticos, aparentemente.

Por que rsync deseja atualizar este arquivo - e como eu posso confirmar o motivo na linha de comando?

    
por sdbbs 30.06.2016 / 10:47

3 respostas

3

rsync relatará alterações para

  • diferenças de permissões
  • diferenças de data e hora
  • diferenças de conteúdo (e tamanho do arquivo)

Em comentários, @roaima apontou que há uma opção para fornecer um resumo dessas mudanças, na página de manual do rsync :

-i, --itemize-changes       output a change-summary for all updates

Você pode achar útil, embora o resumo seja conciso e (na versão que tenho à mão) apenas relate o tipo (arquivo, link ou diretório) e nome . Aqui está o que eu vejo com o rsync 3.0.9-4 e 3.1.1-3 no meu Debian 7 e máquinas de teste:

cd+++++++++ backup-invisible-island/
>f+++++++++ backup-invisible-island/.bash_history
cL+++++++++ backup-invisible-island/conf -> ../system/invisible-island.net/conf
cL+++++++++ backup-invisible-island/statistics -> ../system/invisible-island.net/statistics
cd+++++++++ backup-invisible-island/anon_ftp/
cL+++++++++ backup-invisible-island/anon_ftp/AdaCurses -> pub/AdaCurses
cL+++++++++ backup-invisible-island/anon_ftp/DEBS -> pub/DEBS
cL+++++++++ backup-invisible-island/anon_ftp/GIT -> pub/GIT

Para meu próprio uso, as mudanças de timestamps para diretórios são relativamente sem importância. Eu uso um script que mostra apenas arquivos que são alterados:

rsync : mostra quando arquivos mais novos no destino devem ser sobrescritos

    
por 30.06.2016 / 10:58
2

O Rsync sincroniza arquivos, a menos que seja capaz de decidir que eles são iguais sem comparar seu conteúdo. Ele pode sincronizar um arquivo e perceber que não há diferenças, se não for capaz de dizer que os arquivos são idênticos sem verificar o conteúdo.

Por padrão, o rsync decide que dois arquivos são idênticos (e, portanto, pula a leitura do conteúdo) se tiverem o mesmo tamanho e o mesmo timestamp.

O motivo mais comum para dois arquivos serem tratados como diferentes quando são idênticos é que eles têm conteúdo idêntico, mas timestamps diferentes, porque o arquivo foi copiado no passado e o registro de data e hora na cópia é a data da cópia em vez do timestamp do arquivo original. Por exemplo, o arquivo pode ter sido copiado com scp sem -p , com rsync sem -p ou -a , baixado por um navegador da Web, etc.

Se os timestamps forem diferentes, o rsync precisará sincronizar o arquivo de qualquer maneira desde que você o tenha informado para sincronizar os metadados ( -a ). Portanto, a listagem em rsync -n é perfeitamente justificada: o rsync tem trabalho a fazer. Sincronizar o horário é uma boa idéia, porque é a única maneira de organizar que futuras execuções do rsync saibam que não há nada a fazer.

    
por 01.07.2016 / 01:41
0

Apenas uma nota sobre as respostas anteriores - se você encontrar o rsync relatando repetidamente o (s) mesmo (s) arquivo (s) que foi (em) modificado (s) - alguns sistemas de arquivos (mais notavelmente FAT) armazenam timestamps com menos precisão falha ao definir o mesmo timestamp se estiver sincronizando entre diferentes sistemas de arquivos.

    
por 12.01.2018 / 03:41

Tags