Backup com rsync e automação no Crontab

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.

-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

Exemplo de backup usando rsync no freebsd

## Pasta Admin – Backup diario
# as 12 horas de sgunda feira chama o rsync recursivamente local de origem local de destino realizar log (criar esses diretorios antes)

0 12 * * 1 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/seg/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

0 12 * * 2 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/ter/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

0 12 * * 3 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/qua/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

0 12 * * 4 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/qui/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

0 12 * * 5 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/sex/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

0 12 * * 6 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/sab/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

0 12 * * 7 root /usr/local/bin/rsync -av –delete –recursive /shares/administrador/ /storage01/administrador/dom/ > /storage01/administrador/log/`date +\%Y\%m\%d`Administrador.log

# BACK UP DE OUTRO SERVIDOR CONECTANDO SSH SEM SENHA (Relacao de confianca):
# Backup do asterisk ipbx
0 4 30 * 1 root /usr/local/bin/rsync -Cravzp root@172.16.2.250:/etc/asterisk/ /storage01/ipbx/seg/confs >> /storage01/ipbx/log/`date +\%Y\%m\%d`.log
0 4 35 * 1 root /usr/local/bin/rsync -Cravzp root@172.16.2.250:/var/lib/mysql/ /storage01/ipbx/seg/base >> /storage01/ipbx/log/`date +\%Y\%m\%d`.log

Após criar os diretórios:
mkdir /storage01/administrador/
mkdir /storage01/administrador/log/

Abaixo uma estrutara adicional não necessária para o proposito do titulo do artigo:
Verificando se ocorreu backup

55 23 * * * root sh /opt/backup/verificaBackup.sh

———————————————————————————

(root@)~# cat /opt/backup/verificaBackup.sh
#!/bin/bash

# VERIFICA SE OCORREU OS BACKUPS NO DIA

nomeArq=$(date +’%Y%m%d’).log

verificaServidor(){
servidor=”$1″
test -s /opt/backup/resultado
if [ $? -eq 0 ]
then
rm /opt/backup/resultado
fi
test -s /opt/backup/$servidor/log/$nomeArq
if [ $? -eq 0 ]
then
wget -qO /opt/backup/resultado “http://serv/monitor/_actions/actionAtualizaBackup.php?servidor=$servidor&check=1″
echo ”

*** INICIO DO BACKUP ***

” >> /opt/backup/resultado
cat /opt/backup/$servidor/log/$nomeArq >> /opt/backup/resultado
echo ”

*** FIM DO BACKUP ***

” >> /opt/backup/resultado
#cat /opt/backup/resultado | mail -s “Backup ($servidor) – OK” meuemail@meuemail.com
else
wget -qO /opt/backup/resultado “http://serv/monitor/_actions/actionAtualizaBackup.php?servidor=$servidor&check=0”
#cat /opt/backup/resultado | mail -s “Backup ($servidor) – ERRO” meuemail@meuemail.com
fi
test -s /opt/backup/resultado
if [ $? -eq 0 ]
then
rm /opt/backup/resultado
fi
}

verificaServidor “server4”
verificaServidor “server3”
verificaServidor “server2”
verificaServidor “server1”

———————————————————————————

Serv:/home/ # cat actionAtualizaBackup.php

———————————————————–
Parâmetros
-l usuário — lista as tarefas agendadas para o usuário
-e usuário — edita o agendador
-r usuário — apaga o arquivo do usuário
-c diretório — especifica um diretório para o Crontab
Sintaxe:
Dentro do arquivo que se abre após o comando existe uma sintaxe conforme a seguir:
mm hh dd MM ss script
onde
mm = minuto(0-59)
hh = hora(0-23)
dd = dia(1-31)
MM = mes(1-12)
ss = dia_da_semana(0-6)
script = comando a ser executado.
Obs 1: Em dia_da_Semana, 0 refere-se a domingo; e 6, ao sábado.
No caso de dia da semana funciona também as três primeiras letras
(em inglês) do dia da semana (SUN,MON,TUE,WED,THU,FRI,SAT)
Obs 2: Em qualquer posição pode-se usar o * (asterisco) quando não se
importar com o campo em questão.
Obs 3: Pode-se utilizar intervalos nesses campos. O caracter para intervalo
é o – (hifen).
Obs 4: Pode-se utilizar lista de valores nesses campos. O caracter para a
lista é a , (vírgula).
Obs 5: Qualquer texto colocado após o programa que será executado será
considerado comentário e não será interpretado pelo cron
Seguem alguns exemplos:
Todo dia de hora em hora (hora cheia)
00 * * * * /bin/script
De cinco em cinco minutos todos os dias (note a divisão por 5 do intervalo 00-59)
00-59/5 * * * * /bin/script
Nas seguintes horas: 10, 12, 16, 18, 22 aos 15 minutos da hora
15 10,12,16,18,22 * * * /bin/script
Nos primeiros cinco dias do mês às 19:25
25 19 01-05 * * /bin/script
De segunda a sexta ao meio-dia e a meia-noite
00 00,12 * * 1-5 /bin/script
Script rodar Segunda,Quarta,Sexta às 2 horas
0 2 * * mon,wed,fri /bin/script
Script para rodar Terça,Quinta às 3 horas
0 3 * * tue,thu /bin/script
Script para ser executado minuto a minuto
*/1 * * * * /bin/script

Deixe um comentário