Como você sincroniza enormes arquivos esparsos (imagens de disco da VM) entre máquinas?

18

Existe um comando, como o rsync, que pode sincronizar arquivos enormes e esparsos de um servidor linux para outro?

É muito importante que o arquivo de destino permaneça esparso. Pode ser mais longo (mas não maior) que a unidade que o contém. Apenas blocos alterados devem ser enviados pelo fio.

Eu tentei o rsync, mas não tenho alegria. link

Se eu escrever um programa para fazer isso, estou apenas reinventando a roda? link

Obrigado,

Chris.

    
por fadedbee 17.09.2009 / 18:59

9 respostas

3

Acabei escrevendo software para fazer isso:

link

Este é um software comercial que custa US $ 49 por servidor físico.

Agora posso replicar um arquivo esparso de 50 GB (com 3 GB de conteúdo) em menos de 3 minutos em banda larga residencial.

chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/
syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB)
[........>.........................................]
done - 53687091200 bytes compared, 4096 bytes transferred.

real    2m47.201s
user    0m48.821s
sys     0m43.915s 
    
por 03.05.2013 / 09:35
18
rsync --ignore-existing --sparse ...

Para criar novos arquivos no modo esparso

Seguido por

rsync --inplace ...

Para atualizar todos os arquivos existentes (incluindo os esparsos criados anteriormente) no local.

    
por 06.10.2012 / 17:13
5

O Rsync só transfere as alterações para cada arquivo e com --inplace deve apenas reescrever os blocos que foram alterados sem recriar o arquivo. De sua página de recursos .

rsync is a file transfer program for Unix systems. rsync uses the "rsync algorithm" which provides a very fast method for bringing remote files into sync. It does this by sending just the differences in the files across the link, without requiring that both sets of files are present at one of the ends of the link beforehand.

Usar --inplace deve funcionar para você. Isso mostrará o progresso, compactará a transferência (no nível de compactação padrão), transferirá o conteúdo do diretório de armazenamento local de forma recursiva (a primeira barra à esquerda é importante), fará as alterações nos arquivos e usará ssh para o transporte. / p>

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
[email protected]:/path/to/remote/storage/ 

Costumo usar também a sinalização -a, que faz mais algumas coisas. É equivalente a -rlptgoD Vou deixar o comportamento exato para você procurar na página do manual.

    
por 17.09.2009 / 19:40
3

Dê uma olhada no Projeto de armazenamento Linux Zumastor ele implementa o backup de "instantâneo" usando o binário "rsync" via% ferramentaddsnap.

Da página do manual:

O ddsnap fornece replicação de dispositivo de bloco, dado um recurso de instantâneo em nível de bloco capaz de manter múltiplos snapshots simultâneos com eficiência. O ddsnap pode gerar uma lista de fragmentos de snapshots que diferem entre dois snapshots e, em seguida, enviar essa diferença pelo fio. Em um servidor downstream, grave os dados atualizados em um dispositivo de bloco instantâneo.

    
por 02.10.2009 / 11:21
1

Poderia replicar todo o sistema de arquivos como uma solução? DRBD? link

    
por 02.10.2009 / 11:39
1

Talvez seja um pouco estranho aqui, mas descobri recentemente que o NFS lida bem com isso.

Assim, você exporta um diretório em uma máquina, monta-o na outra e copia os arquivos com utilitários básicos, como cp . (Alguns utilitários antigos / antigos podem ter problemas com arquivos esparsos.)

Eu achei rsync especialmente ineficiente na transferência de arquivos esparsos.

    
por 06.10.2012 / 19:37
1

lvmsync faz isso.

Esta é uma transcrição de uso . Cria um instantâneo LVM na origem, transfere a partição lógica. Você pode transferir atualizações incrementais das alterações desde a criação do instantâneo quantas vezes quiser.

    
por 04.11.2012 / 01:28
0

Não estou ciente de tal utilitário, apenas das chamadas do sistema que podem manipulá-lo, portanto, se você escrever um utilitário desse tipo, poderá ser útil.

o que você realmente pode fazer é usar o qemu-img convert para copiar os arquivos, mas ele só funcionará se o FS de destino suportar arquivos esparsos

    
por 17.09.2009 / 19:07
0

Para sincronizar arquivos grandes ou dispositivos de bloco com diferenças de baixa a moderada, você pode fazer uma cópia simples ou usar bdsync , rsync não é absolutamente adequado para este caso em particular *.

bdsync funcionou para mim, parece maduro o suficiente, sua história de bugs é animadora (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 é open source e não custa nada.

bdsync lê os arquivos de ambos os hosts e troca somas de verificação para compará-las e detectar diferenças. Todos estes ao mesmo tempo . Finalmente, cria um arquivo de correção compactado no host de origem. Em seguida, você moverá esse arquivo para o host de destino e executará 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 ocorre com freqüência em discos VM), ele reduz o tempo de sincronização para o tempo necessário para ler o arquivo. Em um link lento, você precisa de um pouco mais de tempo, porque é necessário copiar as alterações compactadas de um host para o outro (parece que você pode economizar tempo usando um truque legal mas não testei).

*: o rsync é extremamente ineficiente com arquivos enormes. Mesmo com --inplace, ele primeiro lerá todo o arquivo no host de destino, depois de ler o arquivo no host de origem e finalmente transferirá as diferenças (apenas execute dstat ou similar enquanto executa o rsync e observe). O resultado é que, mesmo para arquivos com pequenas diferenças, leva o dobro do tempo necessário para ler o arquivo para sincronizá-lo.

**: Supondo que você não tem outra maneira de saber quais partes dos arquivos foram alteradas. LVM instantâneos usam bitmaps para gravar os blocos alterados para que eles possam ser extremamente mais rápidos (o leiame de lvmsync tem mais informações).

    
por 24.08.2018 / 15:15