Para sincronizar arquivos grandes ou dispositivos de bloco com diferenças baixas a moderadas, você pode fazer uma cópia simples ou usar o bdsync , o rsync não é absolutamente adequado para este caso em particular *.
bdsync
funcionou para mim, parece maduro o suficiente, sua história de bugs é encorajadora (pequenos problemas, pronta resolução). Nos meus testes, a velocidade estava próxima do máximo teórico que você poderia obter ** (ou seja, você pode sincronizar o tempo necessário para ler o arquivo). Finalmente, é de código aberto e não custa nada.
bdsync
lê os arquivos dos hosts e troca somas de verificação para compará-los e detectar diferenças. Tudo isso ao mesmo tempo . Finalmente, ele cria um arquivo de patch compactado no host de origem. Em seguida, você move esse arquivo para o host de destino e executa o bdsync uma segunda vez para corrigir o arquivo de destino.
Ao usá-lo em um link bastante rápido (por exemplo, 100Mbit ethernet) e para arquivos com pequenas diferenças (como costuma acontecer em discos de VM), reduz o tempo para sincronizar com o tempo necessário para ler o arquivo. Em um link lento, você precisa de um pouco mais de tempo, porque precisa copiar as alterações compactadas de um host para outro (parece que você pode economizar tempo usando um truque legal, mas não testou).
*: rsync é extremamente ineficiente com arquivos enormes. Mesmo com --inplace ele primeiro lê o arquivo inteiro no host de destino, o AFTERWARDS começa a ler o arquivo no host de origem e, finalmente, transfere as diferenças (apenas execute dstat ou similar ao executar o rsync e observe). O resultado é que, mesmo para arquivos com pequenas diferenças, leva cerca do dobro do tempo necessário para ler o arquivo para sincronizá-lo.
**: Supondo que você não tenha outra maneira de dizer quais partes dos arquivos foram alteradas. Os instantâneos do LVM usam bitmaps para registrar os blocos alterados, para que possam ser extremamente mais rápidos (o leia-me do lvmsync tem mais informações).