SVN Backup usando o comando rsync

4

Eu configurei um cron para fazer backup do meu repositório SVN (8 GB) para outro servidor. Mas algumas vezes recebo erros e sinto que esta não é a maneira correta de fazer o backup de um svn para um servidor remoto.

Eu usei o comando rsync -avz myrepo.

Por favor, sugira-me uma boa maneira de fazer backup svn para um servidor remoto. Não consigo compactar os arquivos nem transferi-los diariamente, já que são 7 GB.

Obrigado

    
por user37143 19.04.2010 / 11:28

5 respostas

13

Resumo: rsync deve estar perfeitamente bem para fazer o backup de um repositório svn, contanto que você não esteja fazendo o backup de um repositório atualmente ativo . Eu suspeito que você está tentando fazer backup de um repositório ativo que é problemático.

Detalhe:

Você não diz quais erros são relatados, o que dificulta qualquer tentativa de diagnóstico. Isso é algo que eu regularmente lamento sobre os nossos usuários para - se um aplicativo lhe dá uma mensagem específica relatar essa mensagem específica para as pessoas que você está pedindo diagnóstico / suporte de , mesmo que a mensagem seja de fato " ocorreu um erro "ou similar (como isso acontece).

Eu estou supondo que os problemas relatados estão relacionados à falta de arquivos (eles estavam presentes durante a varredura inicial, mas foram movidos / renomeados / apagados antes que o backup fosse concluído), sendo bloqueados ou aparentemente alterados enquanto o rsync os estava lendo. . Você verá erros similares (ou muito pior: problemas relacionados, mas não reportados) com a maioria das técnicas de backup se estiver fazendo backup de um serviço svn ativo e você não parar completamente o serviço svn antes de iniciar o backup.

Parar todo o acesso ao repositório durante a execução do backup pode não estar disponível para você, mesmo que seja feito na madrugada (como você pode ter desenvolvedores remotos que trabalham em horários diferentes). Se este for o caso, existem algumas opções, incluindo:

  1. Use hot-backup.py para fazer um backup completo do repositório enquanto ele estiver ao vivo conforme descrito nesta seção do Controle de Versão com Subversão disponível gratuitamente, que é geralmente considerado leitura recomendada. Isso não será adequado diretamente para o backup remoto, pois o repo completo será enviado pela linha toda vez, mas você poderá fazer o backup em uma área local temporária e executar o backup rsync (ou qualquer outra coisa). sobre isso, em vez do repositório ao vivo.

  2. Se você estiver executando no Linux e usar o LVM para o particionamento de sua unidade, poderá usar o recurso de instantâneo do LVM para executar um feito semelhante ao descrito na opção 1. Consulte aqui e aqui por exemplo, documentação da técnica. Isso significa interromper o acesso ao serviço SNV por um curto período de tempo, pelo período de tempo que o instantâneo leva a ser criado, mas isso é quase instantâneo, muito menos provável de ser um problema do que precisar interrompê-lo para toda a operação de backup. .

  3. Use backups incrementais do repositório ativo, também mencionado no livro SVN acima.

A técnica LVM será mais rápida do que hot-backup.py -then-sync, mas não estará disponível para você sem um trabalho extra e aprendizado, a menos que você já esteja familiarizado com o LVM. Suas vantagens são que ele será quase certamente mais rápido e usará menos espaço em disco (embora o espaço em disco seja bastante barato atualmente). Instantâneos de LVM afetam o desempenho de gravação enquanto estão presentes, mas é improvável que a diferença seja notada a menos que seu repositório esteja muito muito ocupado e o desempenho volte ao normal de qualquer maneira no final da execução de backup o instantâneo.

O método hot-backup.py tem a vantagem de fornecer um backup local também se você ainda não tiver um - se você armazenar a versão "hot copy" em outra máquina, poderá restaurá-la com muito mais rapidez do que restaurar a cópia remota se a máquina principal morrer em um evento que não afete a outra (uma falha do controlador de unidade, por exemplo). Também é provável que seja mais simples de implementar, a menos que você já use o LVM e esteja familiarizado com ele.

Backups incrementais serão mais rápidos que essas duas técnicas, mas menos simples que hotcopy-then-sync e restauração após um desastre completo são potencialmente mais complexos, a menos que você use os backups incrementais para construir uma cópia completa do repo na outra extremidade ( em vez de apenas armazenar as informações incrementais). No entanto, recomenda-se a recompilação do repositório na outra extremidade, pois é uma forma de testar se o backup é realmente válido - mesmo com as outras técnicas, você deve testar seus backups regularmente (mantra: um backup não é um bom backup, a menos que foi testado).

Em resumo , rsync deve estar perfeitamente bem para fazer o backup de um repositório svn (assim como muitas outras técnicas, mas eu sou fã de rsync na maioria dos casos de uso) < em> desde que você não esteja fazendo o backup de um repositório que está atualmente ativo - você precisa parar o serviço ou o backup de alguma forma de captura instantânea.

    
por 19.04.2010 / 13:27
8

Que tal svnsync (parte do svn) para outro servidor também rodando o svn? Como transporte você poderia usar ssh + svn.

    
por 19.04.2010 / 11:58
1

Copiar diretamente um repositório svn ao vivo nunca é uma boa idéia.

Você pode procurar svnadmin dump --incremental em uma pasta e rsync isso. Desta forma, você só teria que transferir os incrementos.

Uma alternativa é svnadmin hotcopy , que faz uma cópia idêntica do repo ao vivo, e você rsync isso.

    
por 19.04.2010 / 17:32
0

Você pode fazer backup ao vivo de um repositório SVN ativo, também com o rsync, desde que:

    O
  • backend de armazenamento fsfs é usado
  • você copia os arquivos na ordem correta (o arquivo db / current primeiro)

Também não há sentido em copiar o conteúdo das transações / subdiretórios, pois a transação atual não pode ser copiada de forma confiável.

O repositório copiado desta forma será consistente e conterá os dados até o último commit antes que o arquivo db / current seja copiado.

    
por 20.04.2010 / 21:44
0

(um dos problemas do hotbackup é que se você usar a opção de manter o mínimo de backups, todos os backups noturnos serão sincronizados, pois eles sempre terão um novo número, mesmo que o repo não tenha sido alterado).

    
por 21.01.2011 / 13:01