Como o rsync corrige arquivos quando há uma diferença no meio?

2

Eu sei como rsync funciona. Minha dúvida é como rsync corrige as partes que são diferentes entre o arquivo de origem e de destino.

Depois de calcular o bloco que é diferente, ele envia essa parte para o destino. Agora, como o destino insere isso no meio do arquivo? Ele move todos os bytes subsequentes também porque não podemos inserir (anexar) byte no meio do arquivo.

Suponha a fonte: ABCDEFGH

destino: ABCEFGH

Suponha que o rsync detecte que D está faltando o envio para o destino. Que como o destino insere D no arquivo. Se inserir depois de C e mover EFGH ou faz algo mais eficiente. Porque em qualquer linguagem de programação não podemos inserir bytes no meio de um arquivo sem substituí-lo.

    
por Trying 22.11.2013 / 02:41

1 resposta

1

Eu só sei sobre implementações C de rsync , elas trabalham com as limitações dos sistemas de arquivos mais subjacentes. Isso significa apenas se o arquivo for exatamente do mesmo tamanho os dados "no meio" podem ser atualizados.

No entanto, isso é irrelevante. Por motivos de segurança rsync faz uma cópia da alteração dados e move isso em cópia no lugar somente se estiver completo . rsync normalmente não tenta e atualiza um arquivo existente, que corre o risco de corrupção se o processo for interrompido.

Você deve olhar para o --delay-updates na página man para entender o processo de atualização. Essa opção permite que você atrase a renomeação até que todos os arquivos que precisam ser alterados em uma execução sejam concluídos e, em seguida, renomeie.

    
por 22.11.2013 / 08:34

Tags