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.