Todas as noites eu copio vários discos virtuais com rsync de um computador Linux Debian para outro Linux Debian.
A maioria dos arquivos são imagens brutas com "buracos": algumas partes nunca foram gravadas, portanto, permanecem não alocadas no disco.
rsync trava em um arquivo, sempre o mesmo. O travamento ocorre após 50 Gb transferidos e a cada vez. Não tenho certeza se isso é sempre exatamente no mesmo ponto, mas ls -sh
exibe 50 Gb.
Este é um arquivo de 800 Gb contendo 151 Gb (portanto, 649 Gb não estão alocados). Alguns outros discos virtuais têm números semelhantes e o rsync funciona bem neles.
Tenho exatamente o mesmo comportamento se usar o rsync para atualizar o arquivo localmente, sem nenhum envolvimento de rede (com --no-whole-file
, isso é um requisito, veja mais 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 (esta é uma solicitação pull, então o rsync é executado deste lado) e zero CPU e zero disco no lado de envio.
Deixei correr durante várias horas.
Ctrl+ cinterrompe imediatamente o rsync.
Quando executado para copiar localmente, uma vez parado, também tenho um núcleo de CPU para 100% e atividade de disco zero.
A única exceção que encontrei é quando eu rsync este arquivo para um novo local (ou seja, o arquivo de destino não existe). Portanto, 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 após cada backup. Portanto, esta opção é um requisito e o rsync também, exceto se eu encontrar uma ferramenta capaz de atualizar apenas as partes alteradas desses arquivos.
O rsync é conhecido por ter esse tipo de problema em arquivos enormes devido a um algoritmo ineficiente para o buffer de hashes interno.
Você tem que usar a
--block-size
opção com um grande valor. Mas as versões atuais não permitem usar mais de 128 kB. Algumas páginas da web dizem para usar--block-size=10485760 --protocol=29
, mas no meu caso é recusado pelo rsync.Dê uma olhada nos relatórios de bug contra o rsync. Talvez registre um novo. Você pode encontrá-los em https://rsync.samba.org/bugzilla.html
Seja aqui ou em um relatório de bug, você deve fornecer mais detalhes. Qual versão do rsync está em cada extremidade, qual é o seu sistema operacional e exatamente qual comando você está usando? Os arquivos e/ou a transferência rsync estão compactados? Com qual versão do zlib?
https://bugzilla.samba.org/show_bug.cgi?id=10518 e talvez https://bugzilla.samba.org/show_bug.cgi?id=10372 pode ser relevante. Veja também http://www.anchor.com.au/blog/2013/08/out-tridging-tridge/