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 escasso. Pode ser mais longo (mas não maior) do que a unidade que o contém. Somente blocos alterados devem ser enviados através do fio.
Eu tentei o rsync, mas não tenho alegria. https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M
Se eu escrever um programa para fazer isso, estou apenas reinventando a roda? http://www.finalcog.com/synchronise-block-devices
Obrigado,
Chris.
linux
rsync
kvm-virtualization
fadedbee
fonte
fonte
Respostas:
Para criar novos arquivos no modo esparso
Seguido por
Para atualizar todos os arquivos existentes (incluindo os esparsos criados anteriormente) no local.
fonte
rsync --existing --inplace
e, em seguida,rsync --ignore-existing --sparse
ter um aumento de velocidade de sincronizaçãoO Rsync transfere apenas as alterações para cada arquivo e com --inplace deve reescrever os blocos que foram alterados sem recriar o arquivo. Na página de recursos .
Usar --inplace deve funcionar para você. Isso mostra o progresso, compacta a transferência (no nível de compactação padrão), transfere o conteúdo do diretório de armazenamento local recursivamente (a primeira barra é importante), faz as alterações nos arquivos existentes e usa ssh para o transporte.
Costumo usar também a bandeira -a, que faz mais algumas coisas. É equivalente a -rlptgoD. Vou deixar o comportamento exato para você procurar na página de manual.
fonte
Acabei escrevendo software para fazer isso:
http://www.virtsync.com
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 na banda larga residencial.
fonte
Dê uma olhada no Zumastor Linux Storage Project, que implementa o backup "instantâneo" usando o binário "rsync" por meio da
ddsnap
ferramenta.Na página de manual:
O ddsnap fornece replicação de dispositivo de bloco, dado um recurso de captura instantânea no nível do bloco capaz de armazenar várias capturas instantâneas simultâneas com eficiência. O ddsnap pode gerar uma lista de blocos de snapshots que diferem entre dois snapshots e depois enviar essa diferença pela conexão. Em um servidor downstream, grave os dados atualizados em um dispositivo de bloco com captura instantânea.
fonte
O lvmsync faz isso.
Aqui está uma transcrição de uso . Ele 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 da captura instantânea quantas vezes quiser.
fonte
A replicação de todo o sistema de arquivos pode ser uma solução? DRBD? http://www.drbd.org/
fonte
Talvez um pouco estranho aqui, mas descobri recentemente que o NFS lida com isso.
Então 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.)Achei
rsync
especialmente ineficiente na transferência de arquivos esparsos.fonte
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).
fonte
Não conheço esse utilitário, apenas as chamadas do sistema que podem lidar com isso; portanto, se você escrever esse utilitário, pode ser bastante útil.
o que você realmente pode fazer é usar o qemu-img convert para copiar os arquivos, mas só funcionará se o FS de destino suportar arquivos esparsos
fonte