Primeiro, em relação à parte "resume" da sua pergunta, --partial
apenas informa ao terminal de recebimento que mantenha os arquivos parcialmente transferidos se o terminal de envio desaparecer como se tivesse sido completamente transferido.
Durante a transferência de arquivos, eles são salvos temporariamente como arquivos ocultos em suas pastas de destino (por exemplo .TheFileYouAreSending.lRWzDC
) ou em uma pasta escolhida especificamente se você definir a --partial-dir
opção. Quando uma transferência falha e --partial
não está definida, esse arquivo oculto permanecerá na pasta de destino com esse nome criptográfico, mas, se --partial
estiver definido, o arquivo será renomeado para o nome real do arquivo de destino (nesse caso TheFileYouAreSending
), mesmo que o arquivo não está completo. O ponto é que você pode concluir a transferência posteriormente executando o rsync novamente com --append
ou --append-verify
.
Portanto, --partial
ele próprio não retoma uma transferência com falha ou cancelada. Para retomar, você precisará usar um dos sinalizadores acima mencionados na próxima execução. Portanto, se você precisar garantir que o destino nunca contenha arquivos que parecem estar bem, mas estão incompletos, não use --partial
. Por outro lado, se você quiser ter certeza de que nunca deixa para trás arquivos com falha perdidos que estão ocultos no diretório de destino e sabe que poderá concluir a transferência posteriormente, --partial
existe para ajudá-lo.
No que diz respeito à --append
opção mencionada acima, esta é a opção "resumir" real, e você pode usá-la independentemente de também estar usando --partial
. Na verdade, quando você está usando --append
, nenhum arquivo temporário é criado. Os arquivos são gravados diretamente em seus destinos. Nesse sentido, --append
fornece o mesmo resultado que --partial
em uma transferência com falha, mas sem criar esses arquivos temporários ocultos.
Portanto, para resumir, se você estiver movendo arquivos grandes e desejar a opção de retomar uma operação rsync cancelada ou com falha a partir do ponto exato em que rsync
parou, será necessário usar --append
ou --append-verify
ativar a próxima tentativa.
Como o @Alex aponta abaixo, desde a versão 3.0.0 rsync
agora existe uma nova opção --append-verify
, que se comporta como --append
antes da troca. Você provavelmente sempre quer o comportamento de --append-verify
, então verifique sua versão com rsync --version
. Se você estiver em um Mac e não usando rsync
a partir homebrew
, você (pelo menos até e incluindo El Capitan) tem uma versão mais antiga e precisa usar --append
, em vez de --append-verify
. Por que eles não mantiveram o comportamento --append
e, em vez disso, nomearam o recém --append-no-verify
- chegado é um pouco intrigante. De qualquer maneira, --append
a rsync
versão anterior à 3 é igual --append-verify
à das versões mais recentes.
--append-verify
não é perigoso: ele sempre lê e compara os dados nas duas extremidades e não apenas assume que são iguais. Ele faz isso usando somas de verificação, para facilitar a rede, mas exige a leitura da quantidade compartilhada de dados nas duas extremidades da conexão antes que possa realmente retomar a transferência anexando ao destino.
Segundo, você disse que "ouviu dizer que o rsync é capaz de encontrar diferenças entre a origem e o destino e, portanto, apenas copiar as diferenças".
Está correto e é chamado de transferência delta, mas é uma coisa diferente. Para habilitar isso, você adiciona a opção -c
ou --checksum
. Depois que essa opção é usada, o rsync examinará os arquivos existentes nas duas extremidades do fio. Ele faz isso em partes, compara as somas de verificação nas duas extremidades e, se elas diferem, transfere apenas as diferentes partes do arquivo. Mas, como @Jonathan aponta abaixo, a comparação é feita apenas quando os arquivos têm o mesmo tamanho nas duas extremidades - tamanhos diferentes farão com que o rsync carregue o arquivo inteiro, substituindo o destino com o mesmo nome.
Isso requer um pouco de computação nas duas extremidades inicialmente, mas pode ser extremamente eficiente na redução da carga de rede se, por exemplo, você estiver frequentemente fazendo backup de arquivos muito grandes, arquivos de tamanho fixo, que geralmente contêm pequenas alterações. Exemplos que vêm à mente são os arquivos de imagem de disco rígido virtual usados em máquinas virtuais ou destinos iSCSI.
É notável que, se você usar --checksum
para transferir um lote de arquivos completamente novos para o sistema de destino, o rsync ainda calculará suas somas de verificação no sistema de origem antes de transferi-las. Porque eu não sei :)
Então, resumindo:
Se você está sempre usando rsync apenas "mover coisas de A para B" e querem a opção de cancelar essa operação e depois retomá-la, não usar --checksum
, mas não utilizar --append-verify
.
Se você estiver usando o rsync para fazer backup frequentemente, --append-verify
provavelmente não fará muito por você, a menos que você tenha o hábito de enviar arquivos grandes que aumentam de tamanho continuamente, mas que raramente são modificados uma vez gravados. Como uma dica de bônus, se você estiver fazendo backup de um armazenamento compatível com snapshots como btrfs
ou zfs
, adicionar a --inplace
opção ajudará a reduzir o tamanho dos snapshots, já que os arquivos alterados não são recriados, mas os blocos alterados são gravados diretamente sobre os antigos. Essa opção também é útil se você desejar evitar o rsync criar cópias de arquivos no destino quando ocorrerem apenas pequenas alterações.
Ao usar --append-verify
, o rsync se comportará como sempre acontece em todos os arquivos do mesmo tamanho. Se diferirem na modificação ou em outros registros de data e hora, ele substituirá o destino pela fonte sem examinar esses arquivos ainda mais. --checksum
comparará o conteúdo (soma de verificação) de cada par de arquivos com nome e tamanho idênticos.
ATUALIZADO 01/09/2015 Alterado para refletir os pontos feitos por @Alex (obrigado!)
ATUALIZADO 14/07/2017 Alterado para refletir os pontos feitos por @Jonathan (obrigado!)