Retoma a transferência de um único arquivo por rsync

46

No Ubuntu, eu quero copiar um arquivo grande do meu disco rígido para uma unidade removível por rsync . Por algum outro motivo, a operação não pode ser concluída em uma única execução. Então, estou tentando descobrir como usar rsync para continuar copiando o arquivo de onde parou da última vez.

Eu tentei usar a opção --partial ou --inplace , mas junto com --progress , achei rsync com --partial ou --inplace na verdade começa do início em vez do que foi deixado por último Tempo. Parar manualmente rsync antecipadamente e verificar o tamanho do arquivo recebido também confirmou o que eu encontrei.

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

Estou confuso como vi na página de manual --partial , --inplace e --append parecem estar relacionados a retomar a cópia do que foi deixado da última vez. Alguém é capaz de explicar a diferença? Por que não --partial ou --inplace funcionam para retomar a cópia? É verdade que, para retomar a cópia, rsync tem que trabalhar com a opção --append ?

Além disso, se um arquivo parcial foi deixado por mv ou cp , não por rsync, rsync --append retomará corretamente a cópia do arquivo?

    
por Tim 26.09.2010 / 16:38

4 respostas

37

Para retomar uma cópia interrompida, você deve usar rsync --append . De Explicação da página man do --append :

This causes rsync to update a file by appending data onto the end of the file, which presumes that the data that already exists on the receiving side is identical with the start of the file on the sending side. [...] Implies --inplace, [...]

A opção --inplace torna rsync (over) gravar o arquivo de destino conteúdos diretamente; sem --inplace , rsync :

  1. crie um novo arquivo com um nome temporário,
  2. copiar conteúdo atualizado para ele,
  3. troque-o pelo arquivo de destino e, finalmente,
  4. exclua a cópia antiga do arquivo de destino.

O modo normal de operação impede principalmente conflitos com aplicativos que podem ter o arquivo de destino aberto e alguns outros percalços que estão devidamente listados no rsync manpage.

Observe que, se uma operação de cópia / atualização falhar nas etapas 1.-3. acima, rsync excluirá o arquivo de destino temporário; o código% opção desabilita esse comportamento e --partial vai sair arquivos temporários parcialmente transferidos no sistema de arquivos de destino. Assim, retomar uma operação de cópia de arquivo único não vai ganhar muito a menos que você tenha chamado o primeiro rsync com rsync ou --partial (mesmo efeito que --partial-dir , além disso instrui --partial para criar todos os arquivos temporários em um diretório específico).

    
por 26.09.2010 / 17:51
19

Esteja ciente de que --append implica --inplace , o que implica --partial .

  • Ao usar apenas --partial , você deve fazer com que rsync seja parcial transferências e retomar as tentativas subsequentes.

  • Ao usar --append , você deve fazer com que rsync deixe os arquivos parciais e retome-os na próxima vez. Após a transferência, rsync deve verificar a soma de verificação apenas dos dados transmitidos.

  • --append-verify inclui o arquivo inteiro na verificação da soma de verificação, incluindo qualquer parte transferida em uma transferência anterior.

  • Com --append ou --append-verify , uma verificação de soma de verificação com falha deve fazer com que o arquivo seja retransmitido completamente (usando --inplace )

Você deve poder retomar uma operação mv ou cp com rsync , mas convém usar a opção --append-verify para ficar tranquila.

Observe que usar --append faz com que rsync copie somente os arquivos cujo tamanho no receptor seja menor que o tamanho do remetente (independentemente dos carimbos de data / hora) ou estejam ausentes receptor. Por documentação sobre esta opção:

If a file needs to be transferred and its size on the receiver is the same or longer than the size on the sender, the file is skipped.

Mais informações na página de manual

    
por 20.11.2013 / 16:28
6

David Schwartz está correto, --partial (ou melhor, -P ) faz o que você quer. Eu verifiquei isso em um arquivo 37G que foi interrompido ~ 8g nele, através de uma rede. O rsync escaneou rapidamente as primeiras partes da parcial (mostrando o progresso como estava indo graças a -P ) e, em seguida, retomou a transferência para o final do arquivo parcial.

    
por 12.02.2012 / 23:31
2

Você estava fazendo certo. --partial faz o que você quer. Parece estar começando desde o início, porque sempre começa no início da lista de partes de dados do arquivo que ele precisa copiar. A opção --append é perigosa e resultará em um arquivo corrompido se os dados não corresponderem por algum motivo.

    
por 31.08.2011 / 07:17

Tags