você está aqui: Home  → Arquivo de Mensagens

Como programar backup com rsync e cron de maneira rápida e simples

Colaboração: Eduardo Alexandre Gula

Data de Publicação: 14 de Janeiro de 2008

Nesse tutorial, você aprenderá uma forma rápida e simples de como criar um backup automatizado através do rsync, acionado pelo cron. Utilizo em meu servidor esse pequeno script de backup. Ele realiza o backup em um momento pré-programado pelo cron em uma pasta que desejar, podendo ser um outro disco no servidor.

Porque usar o rsync

Simplesmente porque ele é um software específico para realização de cópias, funciona de maneira a acelerar as transferências ao copiar as diferenças entre 2 arquivos, ao invés de copiar o arquivo inteiro todas as vezes. Isso mesmo. Ele consegue identificar quais arquivos foram alterados e o administrador pode optar por copiar somente os arquivos novos ou modificados e não necessariamente todos os arquivos, o que tornaria o processo de backup demorado de maneira desnecessária.

Esse recurso pode apresentar grande vantagem, principalmente para backups diários de grande quantidade de arquivos.

Outro grande benefício é que o rsync preserva as informações sobre permissões e propriedade dos arquivos e diretórios, inclusive de links simbólicos.

Instalando o rsync

O primeiro passo é instalar o rsync, caso você ainda não o possua. Se você utiliza Debian, logado como root digite:

  # apt-get install rsync

Se você utiliza Ubuntu, digite:

  $ sudo apt-get install rsync

Somente para confirmar se seu rsync está funcionando normalmente, digite na linha de comando:

  $ rsync

Caso apareçam informações de help do rsync é porque foi instalado corretamente.

Configurando o arquivo de backup

No arquivo abaixo, será utilizado o seguinte parâmetro com o rsync para que ele realize a cópia: -Cravzp. Dessa forma, o rsync está sendo acionado para:

-C auto-ignorar arquivos idênticos
-r copier de forma recursive, ou seja todos os diretórios e subdiretórios no caminho especificado
-a indica que estarão sendo copiados arquivos
-v modo verboso, mais informações da cópia
-z comprime os arquivos durante a cópia
-p indicador de progresso de cópia
  #!/bin/bash
  
  INICIO=`date +%d/%m/%Y-%H:%M:%S`
  LOG=/var/log/`date +%Y-%m-%d`_nome-do-arquivo-de-log.txt
  
  echo " " >> $LOG
  echo " " >> $LOG
  echo "| ------ ------ ------ ------ ------ ------ -----------"  >> $LOG
  echo "  Sincronizacao iniciada em $INICIO" >> $LOG
  
  
  sudo rsync -Cravzp /pasta-de-origem/ /pasta-de-destino/ >> $LOG
  FINAL=`date +%d/%m/%Y-%H%:M:%S`
  
  
  echo "  Sincronizacao Finalizada em $FINAL" >> $LOG
  echo "| ------ ------ ------ ------ ------ ------ -----------"  >> $LOG
  echo " " >> $LOG
  echo " " >> $LOG

Explicando o arquivo de backup

Na primeira linha há um aviso ao interpretador de comandos que deve ser utilizado o bash:

  #!/bin/bash

Armazena o momento de início na variável INICIO, no formato dd/mm/yyyy-hh:mm:ss:

  INICIO=`date +%d/%m/%Y-%H:%M:%S`

Armazena na variável LOG qual o arquivo que deve ser gravado um registro do backup, no formato yyyy-mm-dd_nome-do-arquivo.txt:

  LOG=/var/log/`date +%Y-%m-%d`_nome-do-arquivo-de-log.txt

Mantendo esse arquivo, pode ser muito útil para que possa verificar se os backups têm sido realizados corretamente. Cria o início do registro de log no arquivo, gravando um cabeçalho no qual insere a data e hora do início do backup:

  echo " " >> $LOG
  echo " " >> $LOG
  echo "| ------ ------ ------ ------ ------ ------ --------"  >> LOG
  echo "  Sincronizacao iniciada em $INICIO" >> $LOG

Essa é a linha que realiza o backup de fato. Ela invoca o comando rsync e fornece os parâmetros de quais arquivos copiar e para qual destivo. A cada arquivo copiado, uma linha será inserida no arquivo de log. Dessa forma, o administrador pode saber quais arquivos foram copiados no backup de determinado dia.

  sudo rsync -Cravzp /pasta-de-origem/ /pasta-de-destino/ >> $LOG

Armazena o momento de término do backup na variável FINAL, no formato

  FINAL=`date +%d/%m/%Y-%H%:M:%S`

Finaliza o arquivo de backup com um rodapé no qual insere a data e hora do término do backup:

  echo "  Sincronizacao Finalizada em $FINAL" >> $LOG
  echo "| ------ ------ ------ ------ ------ ------ --------"  >> $LOG
  echo " " >> $LOG
  echo " " >> $LOG

Observações: Caso deseje alterar os parâmetros do rsync para a cópia, consulte o manual do rsync com o comando man rsync. Sugiro criar uma pasta em /var/log com o nome rsync e gravar todos os logs do rsync nessa pasta.

Programando o cron para realizar o backup

O cron é um serviço do Linux que é carregado durante o processo de boot do sistema. Ele funciona como um agendador de tarefas e permite agendar a execução de comandos e processos de maneira repetitiva ou para uma data específica.

O daemon (uma espécie de programa que executa tarefas em segundo plano) do cron executa os comandos nas datas e horários especificados. A cada minuto, o daemon verifica se há alguma tarefa a ser executada.

Todas as ações do cron são realizadas por base em registros em uma espécie de tabela conhecida como crontab.

Para os familiarizados com o Linux, não há segredos para a configuração do cron via linha de comando.

Para os que possuem menos domínio do Linux, sugiro fortemente que instale o Webmin. Trata-se de uma ferramenta de administração através de interface web que facilita muito a vida do administrador.

Para instalar o Webmin, faça seu download a partir de http://www.webmin.com/download.html . Aos usuários de Debian e Ubuntu, baixe o pacote .deb . Se seu Linux for um Debian, digite como root:

  # dpkg  i webmin_versao-do-webmin-copiado.deb

Se seu Linux for um Ubuntu, digite:

  $ sudo dpkg  i webmin_versao-do-webmin-copiado.deb

Caso apresente dependências de outros pacotes, instale os pacotes que solicitar.

Já com o Webmin instalado, acesso pelo navegador o endereço https://192.168.1.11:10000 e digite seu usuário do sistema Linux.

Dentro do Webmin, acesse o menu Sistema > Tarefas agendadas (CRON).

Não remova os agendamentos já existentes! Pode danificar seu Linux.

Apenas clique na opção Criar nova tarefa agendada.

Na próxima janela, uma sugestão de agendamento seria:

Executar tarefa agendada como root

  Ativo: sim
  Descrição: < descreva aqui sua tarefa para que você se lembre>
  Executar quando: Horários e datas selecionados abaixo
  Minutos: Selecionados           0
  Hora: Selecionados              17
  Dias: Todos
  Meses: Todos
  Dias da semana: Todos
  Executar em qualquer data: sim

Seu backup agendado está pronto!

Verifique no primeiro backup se os arquivos foram copiados corretamente para o destino e confirme o registro de log do arquivo. Caso esteja tudo ok, nos momentos programados seu backup irá funcionar automaticamente, sem intervenção manual.

Mais informações

Eduardo Alexandre Gula possui Pós graduação em MBA em Tecnologia da Informação e graduação em Ciência da Computação além de inúmeros cursos. Atualmente é proprietário da ALEXSITE Internet & Informática. Tem experiência na área de Ciência da Computação, com ênfase em desenvolvimento de sistemas via web e apoia e participa do movimento open-source.


Veja a relação completa dos artigos de Eduardo Alexandre Gula

 

 

Opinião dos Leitores

Finallf
25 Dez 2013, 09:28
Se for feito de uma pasta para outra, dentro da mesma maquina não há a necessidade de utilizar o -z, pois só vai demorar mais realmente.
Mas se for efetuar pela rede ou mesmo pela net, ai sim vale a pena.
Rodrigo
16 Nov 2010, 12:00
Bem bom, era o que eu estava precisando.
Na data final, o % e o : do minutos estão trocados.

Também sugiro usar o L para copiar o conteúdo para onde apontam os links simbólicos, caso existam, e o --delete, para excluir do destino o que tenha sido excluído da origem.

Nos testes que fiz, sem o z fica mais rápido.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script