10/09/2010

ad.

Linux: utilize o rsync para fazer backup

Há muitas formas de se copiar arquivos no linux, desde os básicos cp, rcp, scp, etc… mas uma das melhores é utilizando um pequeno aplicativo chamado rsync. Na verdade o que será feito é mais do que uma cópia, é uma sincronização. Se foi feita alguma mudança o aplicativo ira refletir isso. Ou seja, adicione os arquivos novos, retire os excluídos, altere as propriedades, etc… Se você sincronizar com  rsync, alterar um arquivo e fizer uma nova sincronização, apenas as partes alteradas daquele arquivo serão atualizadas, muito mais rápido que refazer tudo.

O formato do comando é muito simples

rsync [OPTION...] origem destino
Há muitas opções no rsync, sugiro um rsync –help para ver todas, mas vou dar uma lista bastante interessante e que serve a quase todos. No exemplo a seguir vou copiar recursivamente TODOS os diretórios e subdiretórios da minha pasta, mantendo as permissões e propriedade (no sentido de dono, ownership) dos arquivos, para um pendrive:

rsync -av /home/compdicas /media/disk/compdicas

a “/” final faz toda a diferença no diretório de origem. Seu eu escrever /home/compdicas/, o aplicativo cria uma pasta compdicas no destino e copia tudo. Seu eu não colocar a barra final, ele apenas copia os diretórios recursivamente para /media/disk/compdicas. Isso é fundamental para backups.

Opções:
-a, –archive: reúne uma série de opções em um mesmo comando, é o mesmo que -rlptgoD. De forma geral, copia recursivamente (-r), copia symlinks como symlinks (-l), preserva as permissões (-p), preserva os horários de criação, alteração, etc dos arquivos (-t),  preserva o grupo (-g), preserva o proprietário (-o) e o -D preserva devices e special files

-v, –verbose: o bom e velho verbose mostra o que está acontecendo. Você também pode utilizar -vv e -vvv para saber ainda mais sobre o que está acontecendo.

-z, –compress: Comprime o arquivo durante a transferência. É excencial se a transferência é feita entre dois computadores distintos, na mesma rede ou pela internet. Se for localmente, de um HD para outro do mesmo computador, é melhor não utilizar essa opção.

–delete: deleta no diretório a ser sincronizado os arquivos que foram excluídos no diretório de origem. atenção: muito cuidado com o comando delete, de fato, enquanto você se acostuma com o rsync é melhor não utiliza-lo, ou pelo menos substitui-lo pelo –dry-run

–dry-run: mostra o que o rsync faria (sem chegar a fazer nada). Muito bom para ver se era isso mesmo que você queria. Recomendo fortemente antes de sair utilizando o rsync, “brincar” bastante sempre com essa opção.

Assim, o nosso comando ficaria:

rsync -av –delete /home/compdicas /media/disk/compdicas

Sincronizando remotamente de forma segura (com SSH)
Uma das coisas boas do rsync é a facilidade em se utilizar o SSH para conectar a um servidor remoto de forma segura. Nada de ficar se expondo, basta indicar o destino na forma de um usuário em outra máquina. Antes porém, mais duas opções:

–progress: exibe o progresso da transferência

-e: especifica o shell a ser utilizado, no caso, SSH

O que, substituindo pelo seu nome de usuário, nome do servidor e diretórios, resultaria em :

rsync -avze ssh –delete –progress /home/compdicas/dir/    user@servidorremote.com.br:dir/

O programa, claro, irá solicitar a senha.Caso não queira ficar digitando a senha todas as vezes, utilize o seguinte procedimento para gera uma chave:

Crie uma chave (e pressione ENTER quando o sistema perguntar por uma passphrase):
ssh-keygen -t dsa

Em seguida, copie a chave para o servidor remoto com:
ssh-copy-id -i .ssh/id_dsa.pub user@servidorremoto.com.br

E finalmente o rsync (igual ao anterior):

rsync -avze ssh –delete –progress /home/compdicas/dir/    user@servidorremote.com.br:dir/


Espero que a dica tenha sido útil. Qualquer dúvida ou sugestão (vale elogio também :) ), não esqueçam de comentar.

comentários

3 comentários para “Linux: utilize o rsync para fazer backup”

  1. Marcelo em 12/04/2009

    Excelente arquivo. O comando –delete era o que faltava para mim para manter o backup exatamente igual entre meus arquivos e o hd de backup.

    Um abraço

    Marcelo

  2. Hugo Leonardo em 01/10/2009

    Cara, muito bom mesmo! Ótimo artigo. Eu achei diversos artigos sobro o rsync, mas nenhum em pt_BR com tanta propriedade e detalhes em sua descrição.

    Estou com uma dúvida e gostaria de saber se pode me ajudar, tenho 2 servidores de arquivos em cidades diferentes, gostaria de manter o sincronismo dos dados via internet, só que ambos os servidores produzem arquivos e todos precisam estar sincronizados.

    Os arquivos criados no servidor A, precisam estar no servidor B e os criados no servidor B, precisam estar no A. Será que com rsync isso é possível? Sincronização nas duas frentes?

    Desde já agradeço!

    Hugo,

    faça o rsync de A para B e em seguida de B para A. Deve funcionar.
    []s

  3. Carlos Alberto em 16/02/2010

    Simplesmente prático e prático usei aprovei thks

Deixe seu comentário