Como espelhar sistemas de arquivos com milhões de hardlinks?


11

Temos um grande problema no momento: precisamos espelhar um sistema de arquivos para um de nossos clientes. Isso normalmente não é realmente um problema, mas aqui está:

Neste sistema de arquivos, há uma pasta com milhões de hardlinks (sim! MILHÕES!). rsyncrequer mais de 4 dias para criar apenas a lista de arquivos.

Usamos as seguintes rsyncopções:

rsync -Havz --progress serverA:/data/cms /data/

Alguém tem uma idéia de como acelerar esse rsync ou usar alternativas? Não foi possível usar, ddpois o disco de destino é menor que a origem.

UPDATE: Como o sistema de arquivos original for ext3, vamos tentar dumpe restore. Vou mantê-lo atualizado


Complicado. Reduza primeiro o sistema de arquivos de origem e depois dd?
Bittrance

Respostas:


3

Você precisa atualizar os dois lados para o rsync 3. No log de alterações:

- A new incremental-recursion algorithm is now used when rsync is talking
  to another 3.x version.  This starts the transfer going more quickly
  (before all the files have been found), and requires much less memory.
  See the --recursive option in the manpage for some restrictions.

Faz mais de 2 anos desde que o rsync 3.0.0 foi lançado, mas, infelizmente, a maioria das distribuições corporativas é baseada em códigos mais antigos que isso, o que significa que você provavelmente está usando o rsync 2.6.

Para referência (se alguém tiver esse problema), se você já estiver executando o rsync 3, estará usando opções incompatíveis com a recursão incremental. Na página do manual:

    Some options require rsync to know the full file list, so  these
    options  disable the incremental recursion mode.  These include:
    --delete-before,   --delete-after,    --prune-empty-dirs,    and
    --delay-updates.

Além disso, novamente, os dois lados devem estar executando o rsync 3 para que a recursão incremental seja suportada.


Pritchard, obrigado por isso, mas as partes incrementais não são um problema, os dois lados usam o rsync> 3.0. Se usarmos o rsync sem -H, teremos uma grande melhoria de velocidade, mas não é disso que precisamos.
Thomas Berger

Ai. Sim, nesse caso, você pode procurar opções para acelerar o acesso ao sistema de arquivos (como alternar para ext4 se estiver usando ext3), alternar para discos mais rápidos ou níveis de RAID (se isso é uma opção), etc. Infelizmente, você pode estar em um ponto em que o sistema de arquivos simplesmente não pode ser rápido o suficiente e os backups em nível de bloco podem ser sua única opção. Eu tive esse problema ao tentar sincronizar novamente um pool de BackupPC de um servidor para outro.
Steven Pritchard

3

Nós usamos ext * dump agora. Funciona bem, e o lado da restauração nem precisa ser ext *.

Fizemos um backup offline, desmontando o dispositivo e usado dump vf - /dev/vg0/opt | gzip -c > /mnt/backup/ext3dump.gz.

Aqui as últimas linhas que você pode ver tamanho, hora, velocidade e o último número de inode:

DUMP: dumping regular inode 47169535
DUMP: dumping regular inode 47169536
DUMP: Volume 1 completed at: Wed Jun 29 05:42:57 2011
DUMP: Volume 1 54393520 blocks (53118.67MB)
DUMP: Volume 1 took 4:16:43
DUMP: Volume 1 transfer rate: 3531 kB/s
DUMP: 54393520 blocks (53118.67MB)
DUMP: finished in 15403 seconds, throughput 3531 kBytes/sec
DUMP: Date of this level  dump: Wed Jun 29 01:24:29 2011
DUMP: Date this dump completed:  Wed Jun 29 05:42:57 2011
DUMP: Average transfer rate: 3531 kB/s
DUMP: DUMP IS DONE

Não sei se isso ainda é verdade, mas o dump costumava ter alguns problemas se o sistema de arquivos estiver em uso no momento do dump. Desde que seu objetivo é a velocidade Eu suponho que você já desativou todos os outros acesso a ele, mas apenas no caso .. Deixe-nos saber como você vai
Superbob

0

Você pode usar o LVM e tirar instantâneos do volume e depois sincronizar novamente o instantâneo como backup.

Como alternativa, você pode combinar isso com a outra resposta e usar dump no volume da captura instantânea , para evitar ter que colocar o volume original offline.


Qualquer coisa que funcione no nível do bloco, não no nível do sistema de arquivos provavelmente seria uma grande melhoria.
Marcin

Como você pode ver na minha pergunta, eu tenho que espelhar através da rede, não local. Além disso, o LVM NÃO é um espelho, é apenas, como você disse, um instantâneo.
Thomas Berger

1
@ Thomas Berger: Meu pensamento era que você copiasse o instantâneo (usando o rsync) pela rede. E como exatamente você define o espelho , se um instantâneo LVM não é um?
Teddy

Isso ainda tem o mesmo problema: levaria dias. Nos dias de hoje, havia um enorme dalta (não que precisássemos disso), portanto temos que reservar espaço suficiente e não temos esse espaço. E um espelho é uma cópia independente da fonte. Temos que copiar os dados da produção para o desenvolvimento do cliente.
Thomas Berger

@ Thomas Berger: Originalmente, eu quis dizer que você sincronizaria novamente o volume real do instantâneo, não o sistema de arquivos no instantâneo. No entanto, agora acredito que a solução snapshot + dump seja melhor.
Teddy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.