rsync trava em um arquivo grande

4

Toda noite eu copio vários discos virtuais com rsync de um computador Debian Linux para outro Linux Debian. A maioria dos arquivos são imagens brutas com "buracos": algumas partes nunca foram gravadas, portanto, permaneçam não alocadas no disco.

O rsync trava em um arquivo, sempre o mesmo. O travamento ocorre após transferência de 50 Gb e a cada vez. Não tenho certeza se isso está sempre no mesmo ponto, mas ls -sh exibe 50 Gb.
Este é um arquivo de 800 Gb contendo 151 Gb (portanto, 649 Gb não são alocados). Alguns outros discos virtuais têm números semelhantes e o rsync funciona bem neles.

Eu tenho exatamente o mesmo comportamento se eu usar o rsync para atualizar o arquivo localmente, sem qualquer envolvimento de rede (com --no-whole-file , isso é um requisito, veja adiante).

Uma vez que o rsync está parado, ele usa um núcleo de CPU para 100% e zero atividade de disco no lado de recebimento (este é um pedido pull, então o rsync é executado deste lado) e zero de CPU e zero de disco no lado de envio.
Deixei rodar durante várias horas.
Ctrl + c pára imediatamente o rsync.
Quando corri para copiar localmente, uma vez parado, eu também tenho um núcleo de CPU para 100% e zero de atividade de disco.

A única exceção que encontrei é quando rsync este arquivo para um novo local (ou seja, o arquivo de destino não existe). Então, suspeito que o problema esteja relacionado à comparação entre dados antigos e novos.

Eu uso --inplace para limitar as gravações no disco de destino, porque os instantâneos são usados depois de cada backup. Portanto, esta opção é um requisito, e o rsync também, exceto se eu encontrar uma ferramenta capaz de atualizar apenas partes alteradas desses arquivos.

    
por Gregory MOUSSAT 09.03.2016 / 01:37

2 respostas

6

O rsync é conhecido por ter esse tipo de problema em arquivos grandes devido a um algoritmo ineficiente para o buffer de hashes interno.

Você precisa usar a opção --block-size com um valor grande. Mas as versões atuais não permitem usar mais de 128 kB. Algumas páginas dizem para usar --block-size=10485760 --protocol=29 , mas no meu caso é recusado pelo rsync.

  • use a versão 29 ou anterior
  • ou recompilar após a modificação da constante MAX_BLOCK_SIZE
por 23.03.2016 / 14:12
5

Veja os relatórios de erros no rsync. Talvez arquive um novo. Você pode encontrá-los no link

Seja aqui ou em um relatório de bug, você deve fornecer mais detalhes. Qual versão do rsync está em cada ponta, qual o seu sistema operacional e qual comando você está usando? Os arquivos e / ou transferência rsync são compactados? Com qual versão do zlib?

link e talvez link pode ser relevante. Veja também link

    
por 09.03.2016 / 01:54