Diferença de Rsync entre as opções --checksum e --ignore-times

96

Alguém pode esclarecer as diferenças entre as opções --checksume --ignore-timesdo rsync?

Meu entendimento é o seguinte:

--checksum
Se o tamanho e a hora do arquivo corresponderem, ele fará uma soma de verificação nas duas extremidades para verificar se os arquivos são realmente idênticos.

--ignore-times
'Transferir' todos os arquivos, independentemente de o tempo do arquivo ser o mesmo nas duas extremidades. Como ele ainda usará o algoritmo de transferência delta, se um arquivo for realmente idêntico, nada será transferido.

Essa é a diferença técnica, mas, pelo que sei, elas são semanticamente a mesma coisa.

Então, o que eu quero saber é:

  • Qual é a diferença prática entre as duas opções?
  • Em que casos você usaria um e não o outro?
  • Existe alguma diferença de desempenho entre eles?
Andy Madge
fonte

Respostas:

99

Normalmente, rsyncignora os arquivos quando eles têm tamanhos e horários idênticos nos lados de origem e de destino. Essa é uma heurística que geralmente é uma boa ideia, pois evita a rsyncnecessidade de examinar o conteúdo de arquivos que provavelmente são idênticos nos lados de origem e de destino.

--ignore-timesdiz rsyncpara desativar a heurística de horários e tamanhos de arquivo e, assim, transferir incondicionalmente TODOS os arquivos da origem para o destino. rsyncirá então ler todos os arquivos no lado da fonte, pois precisará usar seu algoritmo de transferência delta ou simplesmente enviar todos os arquivos por inteiro, dependendo se a --whole-fileopção foi especificada.

--checksumtambém modifica a heurística de horários e tamanhos de arquivo, mas aqui ignora horários e examina apenas tamanhos. Os arquivos nos lados de origem e destino que diferem em tamanho são transferidos, pois são obviamente diferentes. Arquivos com o mesmo tamanho são rsyncsomados de verificação (com o MD5 na versão 3.0.0+ ou com o MD4 nas versões anteriores), e os arquivos com somas diferentes também são transferidos.

Nos casos em que os lados de origem e destino são basicamente os mesmos, a --checksummaioria dos arquivos é somada em ambos os lados. Isso pode levar muito tempo, mas o resultado é que o mínimo de dados mínimo será realmente transferido pela conexão, especialmente se o algoritmo de transferência delta for usado. Obviamente, isso é apenas uma vitória se você tiver redes muito lentas e / ou CPU muito rápida.

--ignore-timespor outro lado, enviará mais dados pela rede e fará com que todos os arquivos de origem sejam lidos, mas pelo menos não imporá o ônus adicional de computar muitos hashsums criptograficamente fortes nas CPUs de origem e de destino. Eu esperava que essa opção tivesse um desempenho melhor do que --checksumquando suas redes são rápidas e / ou sua CPU relativamente lenta.

Eu acho que jamais usaria --checksumou estaria --ignore-timestransferindo arquivos para um destino em que suspeitava que o conteúdo de alguns arquivos estivesse corrompido, mas cujos tempos de modificação não foram alterados. Não consigo realmente pensar em outra boa razão para usar qualquer uma das opções, embora provavelmente existam outros casos de uso.

Steven segunda-feira
fonte
12
Eu achei --checksumútil junto com --itemize-changesa verificação de backups. De vez em quando, meus scripts de backup executam uma comparação completa dessa maneira após a conclusão das atualizações diárias / semanais atuais. Recebi um e-mail com a mensagem urgente, se --itemize-changesgerar algo inesperado, por isso sei que há um problema em potencial que devo investigar.
David Spillett
10
--checksum é útil ao trabalhar no Git e alternar entre ramificações com arquivos alterados, o que continua alterando os tempos de atualização dos arquivos que você não pretende enviar de uma ramificação específica.
FriendlyDev
6
--ignore-timese especialmente --checksumsão necessários se um dos seus "arquivos" for um contêiner de arquivos Truecrypt, pois, por padrão, o carimbo de data e hora do arquivo não é atualizado. Consulte productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs e ask-leo.com/why_wont_my_truecrypt_volume_backup.html
Marcus Junius Brutus em
Nota: fiz uma experiência rápida e o ctime não é comparado, apenas o mtime. No Mac, pelo menos. Isso pode ser útil saber. É por isso que tenho tantos problemas com os sistemas de arquivos do Windows, que relatam o mesmo horário (ctime) para atime, mtime e ctime.
Edward Falk
A --checksumsoma de verificação apenas os nomes de arquivos de origem na máquina de destino ou todos os arquivos no diretório de destino?
Greg
17

a soma de verificação também é útil se você estiver usando outro sistema para sincronizar arquivos, que não preservou os carimbos de data e hora. A soma de verificação transfere apenas arquivos diferentes E atualiza todos os carimbos de data e hora no lado de recebimento para que correspondam

Paulus
fonte
4

Um detalhe: a opção de soma de verificação verifica um arquivo inteiro em uma extremidade e depois o arquivo inteiro na outra extremidade. Se seus arquivos são um pouco grandes, esse tipo de paralelismo.

Além disso, se você tiver arquivos enormes, é mais provável que o tempo limite seja atingido --checksum, como não ocorre -I.

François
fonte
2

Em info rsyncrelação à --checksumopção - "Como essa soma de verificação de todo o arquivo de todos os arquivos nos dois lados da conexão ocorre, além das verificações automáticas de soma de verificação que ocorrem durante a transferência de um arquivo, essa opção pode ser bastante lenta".

LeoB
fonte
1
Essa frase não parece estar nas minhas páginas de manual ... isso significa que a opção de soma de verificação usará somas de verificação para identificar se os arquivos são idênticos e, se não estiverem, será transferida, gerando somas de verificação novamente como parte da transferência? A opção --ignore-times apenas ignora a verificação e assume que eles foram alterados? Portanto, o desempenho doignore-times é uma maneira melhor de conseguir a mesma coisa? Eu ainda estou lutando para ver por que há 2 opções diferentes (além do fato de que --checksum é mais transparente)
Andy Madge
Você deve consultar a documentação mais recente edit: gitweb.samba.org/…
Aleksandr Levchuk
2

A --ignore-timesopção provavelmente resultará em todos os arquivos codificados em delta e o algoritmo de transferência delta (codificação delta) é pelo menos tão lento quanto a soma de verificação.

Não sei se o rsync --ignore-timesé inteligente o suficiente para evitar a "verificação automática após a transferência" no caso frequente em que a transferência delta resultará em nada sendo transferido.

Para --ignore-times:

  • Caso o rsync não seja inteligente (ou não confie na codificação delta), a verificação (soma de verificação e codificação) será feita duas vezes.
  • Também pode ser que a codificação delta seja muito mais lenta que a soma de verificação MD4 de 128 bits.

Ambos --checksume --ignore-timesserão "bastante lentos", mas --ignore-timesprovavelmente ainda mais lentos (devido às 2 possibilidades acima).

Boa pergunta - poste se encontrar alguma diferença de desempenho na prática.

Aleksandr Levchuk
fonte
Eu vejo o que você quer dizer. Vou fazer alguns testes e postar de volta.
Andy Madge