Carregar apenas parte modificada do arquivo usando rsync

Carregar apenas parte modificada do arquivo usando rsync

Estou estudando rsync para sincronizar pastas remotas e locais no Windows (usando cwrsync). Tenho uma dúvida, é possível fazer upload apenas de parte das alterações?

Por exemplo, inicialmente tenho um arquivo de 100 MB e irei carregá-lo usando o comando,

rsync -a /source/path/ /dest/path/

Então farei algumas alterações nesse arquivo. Se eu executar o mesmo comando novamente, todo o arquivo de 100 MB será carregado novamente. Em vez disso, como anexar as alterações feitas nesse arquivo durante o upload?

Responder1

O que você precisa é da --inplaceopção.

Aconselho fortemente que você leia a parte relacionada domanual de sincronizaçãoe entenda o que esta opção implica:

--no lugarEsta opção altera a forma 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 concluído, o rsync grava os dados atualizados diretamente no arquivo de destino .

Isto tem vários efeitos:

  • Links físicos não estão quebrados. Isso significa que os novos dados ficarão visíveis através de outros links físicos para o arquivo de destino. Além disso, as tentativas de copiar arquivos de origem diferentes para um arquivo de destino com links múltiplos resultarão em um "cabo de guerra" com os dados de destino mudando para frente e para trás.
  • Os binários em uso não podem ser atualizados (o sistema operacional impedirá que isso aconteça ou os binários que tentarem trocar seus dados se comportarão mal ou travarão).
  • Os dados do arquivo ficarão em um estado inconsistente durante a transferência e permanecerão assim se a transferência for interrompida ou se uma atualização falhar.
  • Um arquivo no qual o rsync não pode gravar não pode ser atualizado. Embora um superusuário possa atualizar qualquer arquivo, um usuário normal precisa receber permissão de gravação para que a abertura do arquivo seja bem-sucedida.
  • A eficiência do algoritmo de transferência delta do rsync pode ser reduzida se alguns dados no arquivo de destino forem substituídos antes de poderem ser copiados para uma posição posterior no arquivo. Isto não se aplica se você usar --cópia de segurança, já que o rsync é inteligente o suficiente para usar o arquivo de backup como arquivo base para a transferência.

AVISO: você não deve utilizar esta opção para atualizar arquivos que estão sendo acessados ​​por outras pessoas, portanto tome cuidado ao optar por utilizá-la para uma cópia.

Esta opção é útil para transferir arquivos grandes com alterações baseadas em blocos ou dados anexados e também em sistemas vinculados ao disco e não à rede. Também pode ajudar a evitar que um instantâneo do sistema de arquivos de cópia na gravação diverja de todo o conteúdo de um arquivo que contém apenas pequenas alterações.

A opção implica--parcial(já que uma transferência interrompida não exclui o arquivo), mas entra em conflito com--partial-dire --delay-atualizações. Antes do rsync 2.6.4--no lugartambém era incompatível com--compare-deste--link-dest.

Você também pode estar interessado --appendou --append-verifyoptar por apenas aumentar arquivos.

Responder2

Você está usando o rsync para copiar de um diretório para outro diretório - A opção--arquivo inteiroestá em vigor então:

-W, --arquivo inteiroCom esta opção, o algoritmo de transferência delta do rsync não é usado e, em vez disso, o arquivo inteiro é enviado como está. A transferência pode ser mais rápida se esta opção for usada quando a largura de banda entre as máquinas de origem e de destino for maior que a largura de banda para o disco (especialmente quando o "disco" for na verdade um sistema de arquivos em rede).Este é o padrão quando a origem e o destino são especificados como caminhos locais, mas somente se nenhuma opção de gravação em lote estiver em vigor.

Você precisa iniciar o rsync no modo daemon de um lado para acionar o algoritmo rsync com transferências delta.

informação relacionada