você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito sobre Programação Shell Linux

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 de minha escolha, 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 demasiadamente demorado.

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:

Diretiva Significado
-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

E-mails para <eduardo (a) alexsite com br> em caso de dúvidas ou comentários serão bem-vindos!

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