O rsync sempre usa somas de verificação para verificar se um arquivo foi transferido corretamente. Se o arquivo de destino já existir, o rsync poderá pular a atualização do arquivo se a hora e o tamanho da modificação corresponderem ao arquivo de origem, mas se o rsync decidir que os dados precisam ser transferidos, as somas de verificação sempre serão usadas nos dados transferidos entre os processos rsync de envio e recebimento. . Isso verifica se os dados recebidos são iguais aos dados enviados com alta probabilidade, sem a sobrecarga pesada de uma comparação no nível de bytes na rede.
Depois que os dados do arquivo são recebidos, o rsync grava os dados no arquivo e confia que, se o kernel indicar uma gravação bem-sucedida, os dados foram gravados sem corrupção no disco. O rsync não relê os dados e compara com a soma de verificação conhecida como uma verificação adicional.
Quanto à verificação em si, para o protocolo 30 e além (primeiro suportado no 3.0.0), o rsync usa MD5 . Para protocolos mais antigos, a soma de verificação usada é MD4 .
Embora por muito tempo considerado obsoleto para hashes criptográficos seguros, o MD5 e o MD4 permanecem adequados para verificar a corrupção de arquivos.
Fonte: a página do manual e o código-fonte do rsync para verificar.
-c
sinalizador: "Observe que o rsync sempre verifica se cada arquivo transferido foi reconstruído corretamente no lado de recebimento, verificando uma soma de verificação de arquivo inteiro gerada à medida que o arquivo é transferido, mas a automática após a transferência a verificação não tem nada a ver com a opção antes da transferência: "Este arquivo precisa ser atualizado?".rsync
se não fazer a verificação pós-cópia para cópias de arquivos locais. Você pode verificar isso,rsync
copiando um arquivo grande para uma unidade lenta (por exemplo, USB) e copiando o mesmo arquivo comcp
, por exemplo:Ambos os comandos levam aproximadamente a mesma quantidade de tempo e, portanto,
rsync
não podem estar realizando a soma de verificação - pois isso implicaria reler o arquivo de destino do disco lento.A
man
página é, infelizmente, enganosa sobre isso. Também verifiquei isso comstrace
- depois que a cópia é concluída,rsync
não ocorreread()
chamadas no arquivo de destino; portanto, não pode ser feito com a soma de verificação. Mais uma vez, você pode verificar isso com algo comoiotop
: você vêrsync
lendo e gravando simultaneamente (copiando da origem para o destino) e, em seguida, sai. Se estivesse verificando a integridade, haveria uma fase somente leitura.fonte
rsync -c
novamente se quiser forçá-lo a verificar.rsync
faz uma comparação de soma de verificação antes de copiar (em alguns casos), para evitar copiar o que já existe. O objetivo da comparação da soma de verificação não é verificar se a cópia foi bem-sucedida. Esse é o trabalho da infraestrutura subjacente: os drivers do sistema de arquivos, os drivers de disco, os drivers de rede, etc. Aplicativos individuais, como esses,rsync
não precisam se preocupar com essa loucura. Tudo o que érsync
necessário fazer (e faz!) É verificar os valores de retorno das chamadas do sistema para garantir que não haja erro.fonte
Respostas rápidas e sujas, diretamente para as perguntas.
P: Fará
rsync
a comparação ao copiar os arquivos entre duas unidades locais? R: Ele fará uma comparação para descobrir o que copiar.P: Se ele faz uma verificação - é uma aposta segura? Ou é melhor fazer uma comparação de byte a byte? R: tão seguro quanto a matemática por trás da soma de verificação MD5 do arquivo. Você pode tentar fazer um experimento simples para aprender e confiar na ferramenta.
Resposta longa: eu acho que você queria
rsync
fazer uma comparação de arquivos (pouco a pouco ou por soma de verificação) depois de copiar os arquivos. Se você é um dos poucos que valorizam a integridade dos dados, poderá achar o útil abaixo:A
rsync
pasta de arquivos de código acima, na primeira execução e, se concluída sem problemas, será executadarsync
novamente imediatamente, enquanto você realiza a mesma comparação de nomes de arquivos usando o hash do arquivo inteiro.fonte
Usando o rsync para verificar a integridade de uma duplicata
Para garantir que esse teste re-leia fisicamente os arquivos da mídia da unidade, sugiro desligar as duas unidades e reiniciá-las antes de executar este teste. Isso limpará seus caches voláteis internos.
Se também não reiniciar o Linux, você deve pelo menos descartar os caches ( * ) com:
Para reler as duas árvores e comparar suas somas de verificação:
A soma de verificação moderna do rsync usa MD5, que é de 128 bits. A probabilidade de isso não detectar um erro em um arquivo individual é astronomicamente baixa (algumas discussões aqui ), mas não impossível.
fonte
--checksum
até que o teste tenha passado sem ele.