Retomar a transferência de um único arquivo pelo rsync

22

No Ubuntu, quero copiar um arquivo grande do meu disco rígido para um disco removível pelo rsync. Por algum motivo ou outro, a operação não pode ser concluída em uma única execução. Então, estou tentando descobrir como usar o rsync para retomar a cópia de arquivos de onde foi deixado na última vez.

Eu tentei usar a opção --partial ou --inplace, mas junto com --progress, encontrei o rsync com --partial ou --inplace, na verdade, começa do começo ao invés do que foi deixado na última vez. A interrupção precoce do rsync e a verificação do tamanho do arquivo recebido também confirmam o que encontrei.

Mas com --append, o rsync começa com o que restou da última vez.

Estou confuso, como vi na página de manual --partial, --inplace ou --append, parece estar relacionado à retomada da cópia do que restou da última vez. Alguém pode explicar a diferença? Por que --partial ou --inplace não funciona para retomar uma cópia? É verdade que, para retomar uma cópia, o rsync precisa trabalhar com a opção --append?

Além disso, se um arquivo parcial foi deixado pelo mv ou o cp não pelo rsync, o rsync - será anexado corretamente?

Obrigado e cumprimentos!

Tim
fonte
Meu entendimento de como o rsync funciona é limitado, mas para responder à sua última pergunta. Se um cp estiver incompleto, o rsync deve retomar a cópia. Eu acredito arquivos hashs rsync de uma forma que iria encontrar a parte inicial do arquivo o mesmo, e copiar a parte restante do arquivo.
Scott McClenning 26/09/10

Respostas:

25

Olhando algumas páginas para rsync:

--append
Isso faz com que o rsync atualize um arquivo anexando dados ao final do arquivo, o que pressupõe que os dados que já existem no lado de recebimento são idênticos ao início do arquivo no lado de envio.

--inplace
Essa opção altera como o rsync transfere um arquivo quando seus dados precisam ser atualizados: em vez do método padrão de criar uma nova cópia do arquivo e movê-lo para o lugar quando estiver completo, o rsync grava os dados atualizados diretamente no arquivo de destino.

--partial
Por padrão, o rsync excluirá qualquer arquivo parcialmente transferido se a transferência for interrompida. Em algumas circunstâncias, é mais desejável manter arquivos parcialmente transferidos.

Parece que, se o arquivo for muito grande, você gostaria de usá-lo --partial --append. ( --appendimplica --inplace) Se esse arquivo grande for alterado, solte o --appendbotão e o rsync verificará o início do arquivo para garantir que ele também corresponda ao arquivo de origem. --inplacepara mim parece perigoso, exceto se você estiver sincronizando um arquivo grande, não deseja que o rsync crie um novo arquivo temporário da parte inicial, continue a transferência e remova o arquivo antigo para colocá-lo no lugar. A transferência seria mais rápida se você pudesse usar o mesmo arquivo, sem mencionar que o espaço em disco necessário para a transferência seria menor.

Além disso, descobri, do ponto de vista da transferência de arquivos, que uma cópia é mais rápida que o rsync. No entanto, se eu precisasse atualizar um arquivo, o rsync sincronizaria o arquivo mais rapidamente do que transferi-lo novamente. (como eu disse acima) O Rsync deve ser capaz de retomar de um cp.

Eu espero que isso ajude.

Scott McClenning
fonte
1
Você pode dar uma olhada neste relatório de bug: lists.samba.org/archive/rsync/2012-June/027615.html
Stefan Schmidt
Bom argumento sobre o uso do cp mais rápido por padrão e o rsync para "reparar" um processo quebrado do cp! Neat :)
Samuel Lampa 17/01